Sports Betting Models on Prediction-Market Order Books
Closing-line value, pre-game line movement and in-play microstructure from tick-level Kalshi and Polymarket sports books. €1 per series-day, no subscription.
Sportsbook data arrives as odds snapshots: a line at open, a line at close, maybe a few points in between. A prediction-market contract on the same game is different in kind — it is a limit-order book, quoted in 0..1, with every order placed, changed and cancelled and every trade with its aggressor side, from the moment the contract lists until the final print. This guide explains how that changes the way a betting model is built, evaluated and trained: what closing-line value means when you can see the whole book, which features live in the pre-game path and which only exist in play, and how to split the data so that a backtest survives contact with the next season.
Everything below runs on the CryptoStruct archive: every message Kalshi, Polymarket and 35+ crypto venues publish — every Level-2 snapshot and update at full depth, every trade, every contract, every day since we added the venue — captured co-located with nanosecond venue and receive timestamps and a gap-audited event-id chain, in one normalized schema. It is the same capture our own trading engine and enterprise feeds run on, sold as €1 day bundles you buy as a guest in the Data Shop with instant download — no subscription, no minimum, no sales call. Free full-day samples let you run every command in this guide before paying.
What a sports contract is
A moneyline contract pays 1 if the team wins and 0 otherwise, so its price is the market's probability for that outcome with no overround to strip — the two sides of a game trade as separate contracts (Kalshi: KXNFLGAME-26OCT18BUFLV-BUF and -LV) or as one market with a Yes and a No side (Polymarket: nfl-hou-jax-2026-10-18). A spread contract asks whether a team covers a line, a total whether the combined score clears a number, and a player prop whether one player clears a yardage, reception or scoring threshold. Every one of them is a binary contract with the same price semantics, which is what makes them one dataset rather than a zoo of odds formats.
The venues organise these markets differently, and the difference matters when you buy data. Kalshi lists each market type as its own series: the game winner, the spread, the total, first-half and quarter variants and dozens of props — about 80 NFL series in our registry as of 2026-10. Polymarket, predict.fun and OG.com list one family per league (Polymarket NFL, predict.fun NFL, OG.com NFL) and put moneylines, spreads, totals and props inside it. A Kalshi series-day is one market type across every game of the day; a Polymarket series-day is every market type across every game of the day. Both are one bundle, €1 per series-day, no subscription, no minimum, no account.
Closing-line value, defined on a book
Closing-line value (CLV) is the difference between the price you entered at and the price the market settled on just before the event started. The idea behind it is simple: results are noisy and arrive slowly — a season of NFL games is a few hundred labels — but the closing price aggregates everything the market learned up to kick-off, so beating it consistently is evidence that your entries carried information, long before your win rate says anything statistically. A model that buys at 0.56 what later closes at 0.61 has CLV of five cents whether or not that particular team won.
With sportsbook snapshots the closing line is whatever number someone published. With an order book it is a quantity you choose and can defend: the last best bid and best ask before the venue's listed close time, the mid of the two, or the volume-weighted price of the last minute of pre-start trading. More importantly, your own entry price is no longer a hypothetical either. At the timestamp your model would have acted, the L2 book tells you the best ask you could actually have lifted, how many contracts sat at that price, and what the next levels cost — so a CLV benchmark can charge you for the depth you would have consumed instead of assuming you were filled at the top of book for any size.
The first thing to compute from a sports series-day is not a prediction but a baseline: for every contract, the mid at a fixed time before the listed close (say sixty minutes) against the mid at close. The distribution of that difference is the market's own late information flow. Any model you train should be measured as CLV against that same close, with fills taken from the book at the decision timestamp.
Why tick-level L2 changes the question
Three things an odds-history feed cannot give you follow from recording the book live. First, the state of the market at any second: not the last trade, which on a thin pre-game book can be hours old, but the resting bids and asks and their sizes. Second, the queue you would have joined or crossed — the difference between a model that is right about direction and a model that could have been filled. Third, the receive timestamp of every message, recorded co-located with the venue, which lets you prove that a feature was computable before the price moved rather than after. That last point is the one that quietly breaks most published betting backtests: a feature built from an injury report time-stamped by a news site, aligned to a closing price time-stamped by nobody.
Each series-day bundle holds one file per contract with the complete Level-2 path and every trade print, nanosecond-stamped; the bundle format guide walks through the schema and the free reader. The statistics on each series page — spread in contract-price cents, top-of-book depth, Level-2 updates per trade, taker-buy share — are computed from exactly these files, so the page is also a preview of what the features look like.
The pre-game line path
A game contract exists for days before kick-off, and the market reprices it as lineups, injuries, weather and money arrive. In our 2026-10 measurement, NFL game contracts on Kalshi ranked among the series' ten most traded contracts for a median of about three captured days before settling; the live figure is printed on each series page under "Days traded before settling", together with the share of turnover that printed on the settlement day. That share was 86–92 % for NFL game markets — the pre-game path carries a small fraction of the volume, but it carries the information most sportsbook models try to exploit.
- Open-to-close drift: the mid at first quote against the mid at the listed close — the sign and size of the market's own revision, per contract and per market type.
- Steam moves: a sequence of prints lifting several levels within seconds, usually visible first as depth pulled from one side of the book and only then as a price change.
- Late money: turnover and taker-buy share in the last hours before close, compared with the contract's own earlier days — the book tells you whether the late flow was aggressive or passive.
- Cross-market consistency: the moneyline, the spread and the total of the same game should move together; a spread that reprices without the moneyline is either information or a stale quote, and the book's depth tells you which.
To get the whole path of a contract you buy the series-days it traded, as a range: /shop/bundles?bundle=<series-key>&d=<from>..<to> pre-fills the shop calendar with every day from the first quote to the settlement day. The series page's "How long before an event" answer tells you how many days that typically is for the family you are looking at.
In-play microstructure
Once the game starts, the contract becomes something no sportsbook feed resembles: a continuously repriced book whose fair value jumps on every scoring event. The series-day file records all of it. Spreads widen into a drive and collapse after it resolves; depth becomes asymmetric when the market leans one way; the taker-buy share of turnover swings as traders chase the score; and the final minutes, when a contract runs from 0.70 to 0.99 or to 0.01, are where most of the day's turnover prints. In the contract tables on each series page, the open, high, low and close of a game day show exactly that path in four numbers; the file behind them has every step.
For a model this is a different problem from pre-game pricing: the features are book imbalance, spread, recent trade flow and time to the listed close, the horizon is seconds to minutes, and the label can be the settlement or any forward move of the mid. The order-book dataset guide covers the feature pipeline — grids, imbalance, microprice — and it applies unchanged to a 0..1 contract.
Market types and where the labels are
The market types differ in liquidity and in how noisy their labels are. Moneylines carry most of the turnover and settle cleanly. Spreads and totals carry the lines that sportsbook models traditionally target and settle on a number that can land on the line. Player props are the long tail: in the Polymarket NFL family our 2026-10 count of distinct instruments was roughly 27 thousand spread markets, 24 thousand player props, 23 thousand totals and 11 thousand moneylines — many thin markets with a wide spread each, which is where a model with genuine information finds the least competition and the worst fills. Pick the type by what you can label and by the book quality the series page shows, not by what is most familiar.
| Market type | Label | Book character | Where to find it |
|---|---|---|---|
| Moneyline / game winner | team won (implied by the last print, ≥ 0.97 / ≤ 0.03) | deepest book, tightest spread | Kalshi …GAME series; inside every Polymarket, predict.fun and OG.com league family |
| Spread | team covered the line | liquid for main lines, thin for alternates | Kalshi …SPREAD, …1HSPREAD; league families |
| Total | combined score cleared the number | liquid for main totals | Kalshi …TOTAL, …TEAMTOTAL; league families |
| Player prop | player cleared a threshold | thin, wide, many contracts per game | Kalshi prop series; league families (-rec-, -anytime-, -pass- slugs) |
| Period market | half or quarter result | moderate, active in play | Kalshi …1H, …1Q series; -1h, -2q slugs |
Market types as the venues list them (2026-10). Each series page shows the mix it actually contains.
Labels and leakage
The label of a sports contract is its settlement. In our statistics the outcome is implied from the last recorded print — a close at or above 0.97 reads as Yes, at or below 0.03 as No — and every page says so; the venue's official settlement is a separate record you should join when you build a training set, because a contract that stopped trading at 0.95 before a late scoring change is not a resolved label. Never derive the label from your own box-score source without checking the venue's settlement rule for that market type.
Leakage in sports data is structural, not accidental. Every contract of one slate shares injuries, weather and the same public money, so a random split puts Sunday's early games in training and the late games of the same Sunday in test. The honest protocol is walk-forward over game days: train on a contiguous past, validate on the next block of game days, roll forward, and purge any day whose contracts were still open when the training window ended. Treat the season as a regime — a model fitted on September football has not seen playoff books — and report CLV and hit rate per block, never as one pooled number.
Each series page prints how often the side favoured at the opening price finished in the money. Read the caption before quoting it: the sample is the day's ten most traded contracts, which leans towards the closest games, so a hit rate near 50 % there says nothing about favourites in general — it says that the most traded contests were close ones.
Data plan
- Pick a league and the market types you can label — start with the moneyline series of one venue and add spreads and totals once the pipeline runs.
- Download the free sample contract of the series page and the full-day samples to build the parser and the CLV benchmark before buying anything.
- Buy game days as ranges with
/shop/bundles?bundle=<series-key>&d=<from>..<to>so each contract's whole pre-game path is in the set; on Kalshi, buy the same days across the sibling series (game, spread, total) you need. - Compute the closing-line benchmark first: mid at close against mid at your decision time, fills charged against the book at that timestamp.
- Only then train — walk-forward over game days, purged, per-season blocks — and report CLV next to accuracy.
- When the model runs live, the MCP server and the HTTP quote route let an agent buy the day bundles it needs as the season advances.
Coverage
| Series | Venue | Days | Coverage | Size | |
|---|---|---|---|---|---|
| Professional Football Game | Kalshi | 160 | May 2026 – present | 5.77 GB | Browse days |
| Pro Football Spread | Kalshi | 82 | August 2026 – present | 21.3 GB | Browse days |
| Pro Football Total Points | Kalshi | 82 | August 2026 – present | 14.2 GB | Browse days |
| Professional Baseball Game | Kalshi | 238 | February 2026 – present | 44.2 GB | Browse days |
| NFL (games & props) | Polymarket | 344 | July 2025 – present | 63.5 GB | Browse days |
| MLB (games & props) | Polymarket | 406 | May 2025 – present | 127 GB | Browse days |
| NFL (games & props) | predict.fun | 13 | October 2026 – present | 24.1 MB | Browse days |
| NFL (games & props) | OG.com | 16 | October 2026 – present | 13.0 GB | Browse days |
Live archive coverage of the series discussed here (updates daily); the Sports hub lists all 1,126 series as of 2026-10.
The Sports category hub lists every league family on every venue; the NFL, NBA and MLB topic hubs group the sibling series of one league. Everything is sold the same way: €1 per series-day, no subscription, no minimum, no account.
Limitations
The statistics on series pages cover the ten most traded contracts per day — the bundle holds every contract, the statistics do not. Measurements quoted here are from 2026-10 and change as the archive grows; the series pages print the current figures. Polymarket files between 2025-09-16 and 2026-01-08 are affected by an adapter fault that left about half of them without order-book deltas (trades are complete); those days are sold as-is and marked in the shop. Kalshi trades between 2026-02-26 and 2026-03-10 were recorded twice by the first recorder — de-duplicate on the trade id. All venues have a late start on 2026-06-17. Seasons end: a league family has no new days in its off-season, and coverage continues when the league trades again. Venue APIs expose some historical market and trade data, but not the tick-by-tick book path — check the current docs. Nothing here is betting or investment advice: order-book data makes a model measurable, not successful.
Why buy the data in this guide here
Four things every page on this site is built on — and the reason the numbers above exist at all.
We record everything
The complete public feed of each venue as it was published: every Level-2 snapshot and update at the venue's full book depth, every trade with its aggressor side, every quote, funding, mark-price and liquidation event — for every instrument the venue lists, every UTC day since we added the venue. Nothing sampled, no top-N cut, no on-demand capture.
Institutional grade
Captured co-located at the venue with the exchange timestamp and our receive timestamp in integer nanoseconds, an event-id chain that makes any gap visible, and one normalized schema across 35+ venues — the same capture our own high-frequency trading engine and enterprise feeds run on.
€1 per instrument-day
Any instrument-day is €1, series-day bundles start at €1 — no subscription, no minimum order, no tiers to unlock. Credit packs lower the effective price and never expire, and every venue has free full-day samples to test against first.
Self-service for everyone
Pick the days in the Data Shop, pay by card as a guest and download immediately — no sales call, no enterprise contract, no KYC. Coding agents buy the same files through the MCP server, and the free Agent Skill teaches them the format.
Agents: /llms.txt · MCP server /mcp · every page as markdown via Accept: text/markdown
Frequently asked questions
What is closing-line value in prediction markets?
The difference between the price you entered a contract at and the market's last price before the event started. On an order book both ends are observable: your entry is the best bid or ask at your decision timestamp (with its depth), the close is the last pre-start quote or print. Beating the close consistently is evidence of information long before results accumulate.
Can I download historical NFL betting lines with order-book depth?
Yes — as series-day bundles: every NFL contract of a venue for one UTC day with every trade and the complete Level-2 book, nanosecond-stamped. Kalshi splits game, spread and total markets into separate series; Polymarket, predict.fun and OG.com hold every market type of the league in one family. €1 per series-day, no subscription, no minimum, no account.
How many days before a game do Kalshi and Polymarket contracts trade?
Each series page prints the current median under "How long before an event do … contracts trade?" — counted over the days a contract ranked among the series' most traded. In our 2026-10 measurement it was a few days for NFL game contracts, with most of the turnover printing on game day itself.
Do I get moneyline, spread and total markets?
Yes. On Kalshi they are separate series (buy the same day across them); on Polymarket, predict.fun and OG.com they sit inside the league family together with player props and period markets. The market type is readable from the contract identifier, and each series page shows its mix.
How much does sports prediction-market data cost?
€1 per series-day, no subscription, no minimum, no account — a series-day is every contract of the series listed on that UTC day. Pick days in the shop calendar, pay as a guest, download immediately.