How it works
Two things happen behind this site: articles are grouped into stories, and stories are matched to markets. Both are done by software, and both can be wrong in ways worth understanding.
Grouping articles into stories
Every few minutes we fetch the feeds of several hundred publishers. For each new article we take the headline and the short lead the feed provides, and turn them into a list of numbers that represents their meaning — an embedding. Articles about the same event produce similar numbers.
A new article joins an existing story when it is close enough to that story's average, and was published within two days of it. Otherwise it starts a story of its own. "Close enough" is a threshold we tuned by hand against a test set of headlines, including deliberately tricky ones: two reports of the same Fed decision should merge, while an Apple product launch and an apple harvest should not.
That threshold is a trade-off, not a solved problem. Set it high and one story splits into three; set it low and two stories merge into one. Sports needs a higher bar than the rest, because sports writing is formulaic enough that unrelated previews look alike to the maths.
Writing the headline
Once a story has two or more publishers, a language model running on our own hardware reads the members' headlines and leads and writes a neutral headline, a one-sentence summary, and a section. It is told to report only what the articles say. Nothing is invented, and no article text is reproduced.
Ranking
A story's position is mostly how many separate publishers are carrying it, damped by how long ago it was last updated. Major outlets count for a little more, and a story carrying a live market gets a small lift. A story from a single publisher can appear, but it will not lead the page.
Matching markets
We compare each story against every open Polymarket contract the same way we compare articles to each other. A match needs either a strong similarity, or a moderate one plus at least one named person, organisation or place that the story and the market question share. Contracts that have already resolved are excluded, checked against Polymarket's own API rather than a cached list.
Matches are imperfect. A market naming the same company as a story is not necessarily about the same question, and you should read the market question rather than trusting the pairing.
How current is it
Feeds are polled on a cycle of a few minutes, with quiet feeds checked less often and busy ones more. Market prices are refreshed each cycle for every market shown on the site.