How it works
How we turn live prediction-market prices into the probabilities you see — and what they do and don't mean.
Every probability on the site is derived from real-money prediction markets — primarily Kalshi, Polymarket, and PredictIt. For each race we read the current price of the contracts tied to each candidate and aggregate across the platforms that list that market. We do not run our own forecasting model; we surface what traders are pricing.
Prediction-market contracts settle at 100¢ if the outcome happens and 0¢ if it doesn't, so a contract trading at 55¢ implies roughly a 55% chance of that outcome. That's why a candidate's "win probability" and their contract price are the same number shown two ways. Prices can include a small premium or discount, so treat them as close estimates, not exact forecasts.
We label each race by the gap between the leading and trailing candidate's odds: Toss-Up (within ~3 points), Lean (3–10), Likely (10–20), and Safe (20+), for each party. Ratings update automatically as prices move — they're a quick read of competitiveness, not an editorial call.
Live markets move continuously; we refresh aggregated prices on a short cadence and timestamp data where the source provides it. Balance-of-power and party-control figures are modeled at the chamber level and are reconciled across the site so the same number appears everywhere it's referenced.
Markets can be thin, slow to react, or wrong — especially in low-volume races. Fundraising, endorsements, biographical detail, and news shown alongside the odds are contextual and, where noted, illustrative pending live sources. Nothing here is investment, legal, or voting advice.
Questions about the data? About us & press contact →