What Historical Odds Data Actually Contains
It varies more than the label suggests. Some historical odds data records only opening and closing prices per market; some records snapshots at fixed intervals; some records every change. What it can answer depends on capture frequency, which bookmakers are included, and whether timestamps mark when a price changed or when it was collected.
Three shapes of historical odds
Open and close only. One opening price and one closing price per market. Compact and widely available. Enough to evaluate predictions against closing prices and to study how far markets move in aggregate. Not enough to see when movement happened or what triggered it.
Interval snapshots. Prices captured at fixed intervals, for example every few minutes or every hour, often more frequently close to event start. This supports most analysis of how prices evolve. Anything that happened between snapshots is invisible, so a price that moved and reverted inside an interval does not appear.
Change-level records. Every price change with its time. The most complete and the largest. Required for questions about how quickly markets react to information or how prices propagate between bookmakers.
None of these is better in general. The right shape is the least detailed one that answers your question, because storage, cost, and processing all grow quickly with detail.
Matching shape to question
Evaluating a model against closing prices needs open and close. Studying how prices drift over the days before an event needs interval snapshots. Studying reaction to specific news, or which bookmaker moves first, needs change-level data. Decide the question before paying for or collecting the data.
Bookmaker selection changes the story
Historical data from a single bookmaker describes that bookmaker's pricing, including its margin and its reaction speed. Data aggregated across many describes the market more broadly. Know which you have, and do not compare a single-book history with a consensus history as though they measure the same thing.
What the timestamps mean
This is the most important and least documented property of any historical odds dataset.
Collection time is when the data collector requested the price. The price may have been set well before that.
Change time is when the bookmaker actually changed the price, as reported by the source. More informative, and not always available.
A dataset using collection time with hourly snapshots can show a price change as happening up to an hour after it really did. For evaluation against closing prices that rarely matters. For studying reaction to news, it can reverse the apparent order of events.
Time zones. Check whether timestamps are in UTC or local time, and whether event start times use the same convention. Mixed conventions produce errors that look like plausible data, particularly around daylight saving changes.
Event start time. Scheduled start times change. A dataset should record the start time as it was known at each snapshot, or at minimum the final actual start time, because the definition of closing depends on it.
Pitfalls to check for
How closing is defined. The last price before scheduled start, the last before actual start, or the last before the market was suspended. For markets that continue trading in play, the boundary matters a great deal, since an in-play price mistaken for a closing price is a price set with knowledge of the game.
Missing snapshots. Collection fails sometimes. A missing snapshot should be recorded as missing, not filled with the previous value, or a gap in collection looks like a period of stable prices.
Suspended markets. Markets are pulled temporarily around news and events. These periods need their own representation. Interpolating across them invents prices that never existed.
Bookmaker coverage over time. Sources are added and removed across a long history. A consensus or average price computed from a changing set of bookmakers shifts for reasons that have nothing to do with the market.
Market identity. Lines change as well as prices. A spread market at one line and the same market at a different line later are different propositions, and a dataset needs to keep the line with every price.
Survivorship. Markets that were offered and later withdrawn, or events that were postponed, sometimes vanish from historical datasets. Their absence biases any analysis of what was available.
This page describes data structure and is not betting advice.
A storage shape that avoids most of this
Store one row per observation: market identifier, bookmaker, line, price, collection timestamp, change timestamp when available, and a status field for open, suspended, or missing. Derive opening and closing prices from that table with an explicit rule, rather than storing them as separate unexplained columns.
Frequently asked questions
- What is historical odds data?
- Records of past prices for sporting markets. It ranges from only opening and closing prices per market, to snapshots at fixed intervals, to records of every price change. What it can answer depends on capture frequency, bookmaker coverage, and what the timestamps mean.
- Is closing odds data enough for analysis?
- It is enough to evaluate predictions against closing prices and to study aggregate movement. It cannot show when prices moved or what caused movement. Questions about timing or reaction to news need interval snapshots or change-level records. Choose the least detailed shape that answers the question, since cost grows with detail.
- What is the difference between collection time and change time?
- Collection time is when a collector requested the price; change time is when the bookmaker actually changed it. With sparse snapshots, collection time can place a change long after it happened, which can reverse the apparent order of events in analysis of news.
- How should missing odds snapshots be handled?
- Record them explicitly as missing rather than carrying the previous value forward. Forward filling turns a collection failure into what looks like a period of stable prices. Suspended markets likewise need their own status rather than interpolated prices. The same principle applies to charts built from the data.