Methodology

Honest about what we do and don't do.

Data sources

Polymarket prices come from the public Gamma API (gamma-api.polymarket.com) — see the live Polymarket sports markets. Kalshi prices come from the public Trade API (api.elections.kalshi.com) — browse the underlying Kalshi markets. We poll both endpoints server-side every 12 seconds, cache the response, and serve it to your browser on a 15-second refresh.

How we price a market

For Polymarket we use the lastTradePrice, falling back to the first outcomePrice. For Kalshi we take the mid of yes_bid and yes_ask when both are positive, otherwise the last trade price. A market with a price ≤ 1¢ is treated as illiquid and hidden — never displayed as "0¢".

How we pair Kalshi and Polymarket

Each match is keyed by kickoff date plus a normalized version of both team names (lowercase, no punctuation, "FC/AFC/Club" stripped, longest two meaningful tokens). When the two books agree on date and teams, we attach Kalshi's home/draw/away prices to the same match row.

"Best bets" ranking

The "Best Bets" sections rank matches by the higher of the two home-win prices, after filtering out illiquid (≤1¢) markets. That surfaces the games where the market has the strongest conviction — not the games most likely to be profitable bets.

What we don't do

  • Make up missing data. If a book has no price, the cell is empty.
  • Re-order matches based on affiliate payouts.
  • Inject editorial picks above the prediction-market price.
  • Track you across sites for advertising.

Corrections

Spot a wrong pairing or a stale price? The Kalshi and Polymarket APIs are the source of truth — if their prices change, ours do too on the next refresh. For pairing errors (same teams, different countries), reach out and we'll patch the normalizer.