How we aggregate the news.

Every day we read dozens of articles about the same events from different outlets. We then assemble a single neutral summary that shows where sources agree, where coverage is uneven, and where outlets actually contradict each other.

Below: every step of the pipeline, the AI models doing the work, and the limitations we know about.

The pipeline

Each aggregated story is built in five stages. The stages run automatically once a day; the output is what you read on the homepage and individual story pages.

  1. Discovery — We pull recently published articles from a curated list of Brazilian newsrooms (RSS feeds when available, front-page scraping when not). URLs that look like sports, entertainment, weather, horoscopes, or branded content are filtered out before processing.
  2. Clustering — Articles about the same event are grouped together. First, we compare titles by shared keywords (ignoring stopwords). Then an LLM confirms whether the groups really describe the same news event, splitting false positives and merging related angles. A cluster needs at least two different outlets.
  3. Synthesis — For each cluster, an LLM reads the articles (higher-quality sources get more weight) and produces four things: a neutral headline, a short "what happened" summary, a list of consensus facts (with source attribution), a list of no-consensus facts (reported by some outlets but not others), and a list of divergences (where sources actively contradict).
  4. Review — A second LLM pass audits the synthesis. It removes off-topic facts that leaked from source articles, demotes weak divergences that are actually complementary details, extracts background context needed to understand the event, and strips any loaded language the synthesizer may have inherited from source articles.
  5. Enrichment — If the articles genuinely lack background context, the reviewer triggers a web search and pulls in 3–5 additional sources to fill the gap. Those external sources are shown in a separate "Background sources" section on the story page so readers can see what was added.
  6. Translation — The reviewer produces an English version of every field in the same call. The /en/ URL prefix shows the translated content; the default Portuguese URL shows the original.

Neutrality rules

Both the synthesizer and the reviewer follow strict rules about language. These are the hardest part of the system and the reason we added a reviewer step.

  • We replace loaded verbs like "attacked", "blasted", "slammed" with neutral alternatives like "said", "criticized", "stated".
  • We drop judgment adjectives like "controversial", "bombshell", "historic", "surprising". If the facts are striking, the facts will speak.
  • We replace characterizations like "coup plot" or "illegal surveillance" with their neutral legal category ("attempted coup charges", "alleged irregularities"), or quote them with attribution when they matter.
  • We do not adopt either side's framing. If one side calls something a "coup" and the other calls it "legitimate political action", we describe the dispute instead of picking a side.

The AI models

We disclose which models do the work. Most AI tools don't.

  • Clustering, synthesis, and review use Claude Sonnet 4 (Anthropic).
  • Individual article quality scoring (the six dimensions that feed into source attribution) uses DeepSeek V3.
  • Web enrichment uses Tavily Search.

How article quality scores are computed

Each article used in aggregation also has a quality score. The score influences how much weight the article gets during synthesis (higher-quality articles are given more room). Scores are not shown in aggregated stories, only in the "Read directly from the press" section.

Six dimensions, each scored 1–5. Sum is 6–30. Letter grades map to ranges: A (26–30), B (22–25), C (18–21), D (14–17), F (6–13).

Limitations

What can go wrong. We publish these because a system that doesn't practice transparency has no business asking for your trust.

  • Clustering errors: The clusterer sometimes misses related articles (false negatives) or groups unrelated ones (false positives). When a group is wrong, the synthesis will be too.
  • Topic contamination: Source articles often cover multiple topics. The reviewer removes off-topic facts that leak through, but catches are not guaranteed.
  • Language drift: LLMs can inherit loaded terms from source articles despite the neutrality rules. We re-review periodically when rules change.
  • Coverage bias: We only aggregate from Brazilian newsrooms we track. International events read through a Brazilian lens; direct foreign coverage is not included.
  • No fact-checking: We do not verify whether the events happened. We aggregate what outlets reported. If every outlet got a fact wrong, so will we.
  • LLM variability: Re-running the same articles can produce slightly different wording. The structure (consensus/divergence) is stable; phrasing varies.

Data & privacy

  • Articles are aggregated from publicly available URLs. Full article text is processed but not permanently stored beyond the synthesis inputs needed to re-run review.
  • Aggregated stories are stored to preserve the daily feed.
  • User accounts (optional) store email addresses for authentication only.

Contact

Questions about the methodology? Found an issue? Reach us at thiago@thinktwice.capital.

Open today's aggregated stories.