Methodology & responsible gambling
FragOdds focuses on Valorant, Call of Duty and Rocket League, and also covers CS2. FragOdds is a best-price board: for every match, it shows what Kalshi and Polymarket each ask for each team, which venue is cheaper, and how prices are moving. This page explains where every number comes from.
Markets
- Polymarket: the public Gamma API (
gamma-api.polymarket.com), esports series for Counter-Strike, Valorant, Call of Duty and Rocket League. We use each event's match-winner (moneyline) market. Price history comes from the public CLOBprices-historyendpoint. - Kalshi: the public trade API (
api.elections.kalshi.com/trade-api/v2), series KXCODGAME, KXCS2GAME, KXCSGOGAME, KXRLGAME, KXROCKETLEAGUEGAME, KXVALORANTGAME. Each match has one market per team. We combine the two books into one effective bid and ask. History comes from the public candlesticks endpoint. - The "mid" is the midpoint of the best bid and best ask, or Polymarket's displayed price. A missing or one-sided book shows as missing. We never fill gaps with estimates.
- We pair the same match across venues by game, start time and fuzzy team-name matching. We only compare prices, mark a cheaper venue or show savings when the pairing is confident: both team names match at 90%+ similarity, and the start times agree within 90 minutes. Looser matches (for example "WBT" vs "WBT Academy") are shown as "Pairing unconfirmed", with no comparison.
Best price and savings
- Price you'd pay = the venue's best ask for a contract that pays $1 if that team wins. On Kalshi, buying one team's "No" is the same as buying the other team's "Yes", so we take the cheaper of the two routes.
- If a venue has no ask for a team, we show its mid or last price in grey, marked "~ mid". That's for reference only. It's never treated as a price you can pay, and it never counts toward a saving.
- Cheaper venue (green ▼) and savings (in cents per contract) are shown only when both venues have a real ask for that team, both books are no wider than 15¢ (bid to ask), and the match is confidently paired. A one-sided or very wide book (for example 5¢/95¢) shows as "Thin book", and its mid is also left out of charts, movers and alerts. A gap under half a cent counts as the same price.
- Prices exclude venue fees. Kalshi charges a trading fee that depends on price, while Polymarket's fees vary by market. Fees can shrink or reverse a small saving, so check each venue's fee schedule. Books can also be thin, and the ask may only cover a few contracts.
Line movement and line-jump alerts
- Charts and movers use each venue's mid or last-trade price. Our snapshots from each 30-minute update add the ask too, plotted where we captured it. History is real stored data only. Gaps in coverage show as gaps.
- Biggest movers: the largest pre-match change for any team over the last 24 hours (this needs a stored price from about 24 hours ago, give or take 3 hours) and since the market opened (from our first stored price).
- Line jumps: a team's price on one venue moves 6¢ or more within 180 minutes before the match. After an alert, the same market only alerts again once it moves 4¢ further. Alerts are published as RSS and JSON on this site, and nothing is posted anywhere else.
Results data
- Primary: resolved Polymarket match-winner markets from the past ~12 months. Their rules name Liquipedia as the official resolution source. Matches resolved 50/50 (cancelled) are excluded.
- Secondary: settled Kalshi match markets, added only when Polymarket has no result for the same match.
- Coverage right now: Valorant 2581 results, Call of Duty 325 results, Rocket League 274 results, Counter-Strike 2 11077 results. This covers only matches that one of the two venues listed, which skews toward higher-profile events.
Team ratings (informational)
- Game and match pages show an Elo team rating, built from resolved matches. It's a quick read on form, not a betting signal. FragOdds doesn't publish fair prices or picks.
- We tested this honestly. An out-of-sample backtest against historical pre-match prices found that the market predicted results better than the ratings in every game we could measure. Even a market-anchored blend never found gaps large enough to beat the market after costs. That's why the site is a price board, not a picks site.
- What a rating can't see: roster moves, stand-ins, map pools and vetoes, patches, LAN vs online, travel and motivation.
Model track record (background)
We still log the rating model's pre-match numbers quietly, and grade them in public, so the record stays honest. See the full model track record and backtest.
Track record rules
- Each run logs or updates the model's number for every match that hasn't started. The row locks at the scheduled start time and is never edited after that.
- We grade against the official venue resolution. Matches with no result 7 days after start are marked void.
- We report the model's Brier score next to the market's, on the same matches. A historical backtest is shown separately and never mixed into the live record.
Affiliate disclosure
The site has placeholder slots for Kalshi and Polymarket (the per-venue "Trade on" buttons), plus OddsJam, Outlier and Novig. There are no affiliate agreements yet, so every slot is inactive and earns nothing. If that changes, this section will say so. Affiliate status will never change which venue we mark as cheaper.
Update cadence
Data is refreshed every 30 minutes, whenever the updater runs. Last update: Mon Oct 19, 11:08 PM ET. Prices change fast, so always confirm on the venue before you trade.