methodology

How our odds & data are made

Full transparency on sourcing, normalization, and modeling — so you can trust the numbers and cite them.

9 sections

EsportsOdds publishes two derived odds lines, CS2 statistics, and our own team & player rankings as a data product: a market line we compute by combining prices from multiple bookmakers and exchanges, and (once validated) our own model’s line. We never republish any individual bookmaker’s or exchange’s price, and we never name the books that feed the aggregate. This page documents exactly how every number is derived. It is informational — nothing here is betting advice or an inducement to bet.

1.

Data sources & provenance

Match, team, player and tournament data — results, maps, rosters and stats — is compiled from multiple independent public sources, cross-checked against each other, plus our own statistics parsed from public match data. We deliberately don’t rely on any single upstream source: facts are corroborated across sources, conflicts are resolved by recency and agreement, and every record carries internal provenance so a correction upstream can be traced and applied here. Player ratings are our own computation from raw performance data — never a third party’s rating republished. All of it is served through our CS2 data API.

2.

The market line (live)

Our published market line (eo_market) is a de-vigged aggregate: we monitor real prices across multiple bookmakers and exchanges, remove each book’s margin to recover fair probabilities, take the median across books, and re-normalize. A market line is only published when at least two independent books contribute, and every line carries a book_count so you can see how deep the consensus is. What we never do: republish a single book’s price, name a contributing book, or frame any price as “best” — the aggregate is a reference line, not a shopping comparison.

3.

Normalizing odds

We work in decimal odds throughout. Every published line is captured as a timestamped, append-only time series — one row per outcome, per update — and we never overwrite a value, so movement over time is preserved and auditable.

4.

Implied probability

The implied probability of any decimal price is 1 ÷ decimal odds. Raw bookmaker prices bake in a margin (the “vig” / overround), so implied probabilities across a market’s outcomes sum to more than 100%. Removing that margin — de-vigging — is the first step in both our market line and our model.

The same arithmetic is available as free tools, if you want to run it on your own numbers: the no-vig calculator (which compares the multiplicative, additive, power and Shin methods side by side), the vig calculator, and the implied probability calculator.

5.

Our modeled line — coming soon

We are building a proprietary model that estimates a fair probability and price for each outcome from match and player statistics. This model is not yet live. We will not present modeled lines as production data until they clear an accuracy-validation gate — measured against real outcomes — because a model people rely on must be shown to work before it ships.

When it goes live, we will publish its track record, not just its predictions: calibration (how closely predicted probabilities match real outcomes) and a Brier score against a stated no-skill baseline, so you can audit the model’s accuracy rather than take it on trust. Modeled lines are always rendered in our distinct model accent colour and clearly labelled as our estimate, so a modeled number can never be mistaken for the market line.

6.

Team & player rankings

Our CS2 team rankings are our own rating, computed from match results — not a copy of any other ranking. The team rating uses Glicko-2, a rating system (the successor to Elo) that tracks both a team’s strength and how certain we are of it. We replay every completed CS2 match in our data in date order; each map is one rated game against the opponent’s strength at that moment, so beating a strong team moves a rating more than beating a weak one.

Two deliberate choices keep the board honest. First, teams are ordered by a conservative estimate — the rating minus twice its uncertainty — so a team can’t top the table on a short hot streak we aren’t yet sure about; a proven record has to outweigh the doubt. Second, that uncertainty grows while a team is idle: a side that hasn’t played in weeks is rated less confidently than its last result alone would suggest, which is what makes “recent form” actually mean recent. A team needs a minimum of five rated matches in the recent window to appear at all, so no one ranks off two or three games.

Player ratings follow the same principle — our own per-map performance rating, averaged over a window, with a minimum-maps floor so a big game or two can’t vault someone over a season’s body of work. Everything is recomputed daily. Where we also show the official Valve Regional Standings or the community HLTV world ranking, those are labelled as theirs and shown for comparison — never merged into, or presented as, our own number.

7.

Update cadence

Pre-match lines are refreshed on a regular polling cadence, typically within tens of seconds of an upstream change. Rankings are recomputed daily. Any freshness indicator on our pages reflects how recently a number was updated, bounded by our ingest cadence — it is not a countdown and not a signal to act quickly.

8.

Limitations

  • Coverage depth varies by tournament tier and by what upstream sources publish.
  • The market line requires at least two contributing books — thinner matches may have stats but no published line.
  • Our model, once released, is an estimate derived from public statistics — it is not a guarantee, and it does not represent any bookmaker’s price.
  • Historical and current data can contain gaps or corrections; we version and revise.
9.

Corrections

Found something that looks wrong? Tell us at data@esportsodds.gg and we’ll investigate and correct the record.

Ship your first odds feed today

One plan — $99/mo for 10,000 requests. Production-ready in minutes.