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.