Polymarket order book data
Polymarket order book data: what it looks like and where to get it
Full L2 depth for Polymarket's outcome tokens — every price level and the size resting at each. Polymarket does not archive it, so it has to be captured live. Here is what the data actually looks like once you have it.
Figures measured on the published dataset, 2026-08-24.
Short answer
What the data is
An order book snapshot is the set of resting bids and asks for one outcome token at one moment: every price level, and how many shares sit at each. Level 2 means the whole ladder, not just the best bid and ask.
| Two tokens per market | A binary market has an Up token and a Down token, each with its own book. They are separate order books, not two sides of one. |
|---|---|
| Prices are probabilities | Every level sits in [0, 1]. A bid of 0.19 is someone offering 19 cents for a contract that pays 1.00 if that outcome wins. |
| Sizes are share counts | Multiply by price for the dollar value resting at that level. |
| Ladders are best-price first | Bids descend from the highest, asks ascend from the lowest. |
| Depth varies per snapshot | Median 39 bid levels on 5-minute markets, but it ranges from zero to over 120. Never assume a fixed number. |
What a snapshot looks like
One row per token per moment, with the ladders as parallel arrays. Best price first, so index 0 is the top of book:
{
"market_slug": "btc-updown-5m-1787551200",
"outcome": "Up",
"captured_at": "2026-08-23T14:31:07Z",
"seconds_to_close": 53.0,
"bid_prices": [0.19, 0.18, 0.17],
"bid_sizes": [147.34, 63.69, 277.77],
"ask_prices": [0.20, 0.21],
"ask_sizes": [13.60, 152.17],
"crossed": false
}That example is worth reading twice. The midpoint is 0.195, which looks like a liquid market — but there are 13.6 shares at the best ask. A 100-share buy, about $21, would average 0.2086: 4.3% above top of book. Headline price and executable price are not the same thing, and only the ladder tells you the difference.
Three properties that break naive analysis
| Property | Measured | Why it happens |
|---|---|---|
| Books go one-sided near settlement | 76.2% of 5-minute snapshots in the final minute | As a binary market resolves, nobody offers the losing side and nobody bids the winning one. This is real market behaviour, not missing data, and it breaks code that assumes two-sided books. |
| Some snapshots are crossed | 3.24% on 5-minute markets, 1.50% on 4-hour | Best bid at or above best ask, which is not tradeable. One side of the captured book was momentarily stale. Median duration is 2 seconds and 98.2% clear within 60 seconds. |
| Contract length changes everything | 4-hour books are one-sided 0.5% of the time; 5-minute, 16.9% | A longer contract holds a two-sided market for almost all of its life. Conclusions drawn from 5-minute books do not transfer to 4-hour ones. |
All three are measured on the published dataset — 897,192 snapshots across 805 resolved markets — so you can check every figure against files you can download:
import pandas as pd
df = pd.read_parquet("updown_5m.parquet")
(df.best_bid >= df.best_ask).mean() # crossed rate
(df.bid_prices.str.len() == 0).mean() # empty bid side
df[df.seconds_to_close <= 60].crossed.mean() # crossed near settlementPolymarket does not archive it
The /book endpoint returns the book as it is now. There is no historical equivalent, no date parameter, and nothing behind it storing yesterday's state. Depth is forward-only.
Rebuilding it from the websocket archive is the obvious workaround and it does not hold up. Replaying a public delta archive against its own snapshots diverged at 67.8% of 381,093 checkpoints, and 6.4% came back crossed. Extra levels outnumbered missing ones 4.2 to 1 — one-directional, which means removal events are absent from the stream rather than the replay logic being wrong. The full measurement is here.
Getting it
- Live API. Free tier at 1-second resolution, the same as the paid plans, over a shorter history window. Full ladders with the resolved outcome attached.
- Open dataset. 897,192 snapshots across three contract lengths on Zenodo, CC BY 4.0, citable by DOI, no signup.
- A single market first. The free BTC 5-minute sample is one full lifecycle in CSV and JSON.
- What each Polymarket API surface serves and the wider picture of what is and is not archived.
FAQ
What is Polymarket order book data?
The full set of resting bids and asks for a market's outcome tokens at a point in time — every price level and the size available at each. A binary market has two tokens, Up and Down, each with its own book. Prices are probabilities in [0, 1] and sizes are share counts.
Does Polymarket provide historical order book data?
No. Polymarket's /book endpoint returns the current state of a book and there is no historical equivalent, no date parameter, and no archive behind it. Depth is forward-only: if nobody recorded the ladders while a market was live, they do not exist anywhere.
Can I rebuild Polymarket order books from the websocket archive?
Not reliably. Replaying a public delta archive against its own snapshots diverged at 67.8% of 381,093 checkpoints, with 6.4% returning crossed books. Extra levels outnumbered missing ones 4.2 to 1, indicating removal events absent from the stream. The feed carries no sequence numbers, so dropped messages leave no detectable gap.
Why are so many Polymarket order books one-sided?
Because binary markets resolve. In the final minute of a 5-minute market, 76.2% of snapshots have an empty bid or ask side — nobody offers the losing outcome and nobody bids the winning one. It is genuine market behaviour, and any analysis that indexes bid_prices[0] without guarding will fail on those rows.
What does crossed order book data mean?
The best bid is at or above the best ask, which cannot happen in a functioning book because those orders would match. It means one side of the captured snapshot was momentarily stale. In our data it affects 3.24% of 5-minute rows, lasts a median of 2 seconds, and 98.2% of episodes clear within 60 seconds. The rows are flagged rather than removed so the rate stays measurable.
How do I get Polymarket order book data?
It has to be captured live. PolyOrderbooks records full L2 depth at 1-second resolution across Polymarket's crypto markets and serves it over REST, with resolved outcomes attached. A free tier queries at the same resolution, and 897,192 snapshots across 805 resolved markets are published openly on Zenodo under CC BY 4.0.