Core concepts

How the market line is computed

eo_market — de-vig, median, renormalise, and the coverage rule behind every published line.

source: "eo_market" is a derived line: an aggregate of several bookmakers and exchanges with each one's margin removed. It is not any single book's price, and no contributing book is ever named.

The steps

De-vig each contributor. A bookmaker's prices imply probabilities summing to more than 1 — the excess is their margin. Each contributor's prices are converted to probabilities and normalised so they sum to 1, recovering that book's implied fair view.

Take the median per outcome. Across contributors, the median fair probability — not the mean. A median is resistant to one book being briefly mispriced or stale, which is exactly the failure mode that matters here.

Renormalise. Medians taken independently per outcome don't necessarily sum to 1, so the set is rescaled until it does.

Convert back to a price. price = 1 / probability, published as decimal odds.

The consequence you can verify: the implied probabilities of a market's outcomes sum to almost exactly 1. Sum 1/price across a market's outcomes and you should land within rounding distance of 1.0 — a raw bookmaker market would sum to noticeably more.

The coverage rule

A line is published only when at least two independent contributors priced that outcome. One contributor is not a market, so no row is emitted at all rather than a single book's price wearing an aggregate's label.

book_count reports how many contributed — always present on eo_market, never below 2, typically 2–4. Treat it as a confidence signal: a line built from 2 contributors is thinner evidence than one built from 4.

Why no book is named

Naming contributors would make the line a price-comparison surface, which is a different product with a different legal posture. The published line is a descriptive statistic about the market, not a shopping list. So there is no bookmaker name, no per-book price and no "via" attribution anywhere in the API — by construction, not by filtering.

What it is and isn't

eo_market describes what the market thinks. It carries no accuracy gate because it isn't a forecast — it's a measurement of prices that existed. It is the right baseline to compare a model against, and the right input for anything that needs a market-implied probability.

It is not our opinion. That's the model line, which is a separate source and held to a much stricter standard.

Freshness

Lines are appended only when something changes. Consecutive captures can be far apart without the data being stale — a gap means the price held. Judge freshness by captured_at on the newest row for a market, and see odds movement for reading a series.

For the conceptual background on de-vigging, the marketing site has a longer explainer at esportsodds.gg/learn/devig-fair-odds.

On this page