Polymarket historical data,
every change of the book.
Millisecond resolution on every market Polymarket runs, both clocks kept, trades back to 2020 — and a published ledger of exactly what we captured. One flat price, no row meter.
Tick by tick — the lowest granularity that exists.
We store the event the venue emits, not a snapshot of how the book looked 100 ms later. There is nothing finer than this, because nothing finer leaves the exchange.
ts_exchange- the venue's own clock, untouched
ts_recv- the moment the frame landed on our recorder
Which Polymarket markets are covered? All of them.
No volume gate, no series whitelist, no minimum. The categories and markets below are Polymarket’s own, read live — so the claim is checked against something we do not control.
Browse all markets →Polymarket, live
——————————
——————————
——————————
——————————
——————————
——————————
——————————
One price, and you can check us before you pay.
The two things that stop a purchase in this field. A flat price on data nobody can audit is a flat price on a promise, so you get both or neither.
One price, whatever you pull
No row meter, no credits, no per-instrument-day arithmetic. The bill at a terabyte is the bill at a gigabyte.
- Every market
- Full book depth
- Trades
- Both clocks
- Coverage ledger
- lp2 and parquet
Check what we captured before you pay
Recorded milliseconds, gaps and uptime for every market-hour. Free, keyless, and the one number nobody else in this field publishes.
- An hour of every marketthe full tape, free, no card
- The coverage ledgerrecorded ms, gaps and uptime per market-hour
- No key to read itpublic and citable, before you sign up
Four lines to access the data lake.
Signed URLs straight onto object storage, an open reader for the wire format, one schema across every market. Nothing proprietary sits between you and the files.
Clients
Formats
Dimmed clients are on the way and said so here rather than in a changelog. How a row gets here, and what is in it →
import pmdbook = pmd.books("btc-updown-5m-1762598700-up",start="2026-11-08T12:05:00Z",end="2026-11-08T12:10:00Z")print(book.head(3))
The parts you only notice later.
None of these sells the product on its own. Every one of them is a thing you would have found out in month two, and would rather have known in week one.
Every level, not just the top of the book
Both sides of the ladder at every price the venue publishes - not a best bid and a best ask with the queue behind them thrown away. Depth is where a fill of any size is decided.
The whole archive, the day you join
Not a rolling window that shortens the moment you stop paying.
Lossless, and about 7x smaller
lp2 is our encoding, with an open reader, so nothing is locked behind our tooling. Parquet is an export from the same bytes.
Both clocks on every row
When the venue stamped it, and when it landed on our recorder. Latency is a column you read, not something we averaged away.
ts_exchangets_recvOne schema, everywhere
The columns in a historical file are the columns a replay emits and the columns a live tail will carry.
ts_recvts_exchangepxszRights, not bytes
Personal, then commercial, then redistribution by contract. What you may do with the tape is the thing that costs - the bytes are the same bytes.
Invoiced, not charged
No card is collected anywhere on this site, and nothing renews because you forgot about it. An invoice, then access.
Start with a free hour of every market.
No card is collected anywhere on this site. The catalog and the coverage ledger carry no key at all, so you can check what we captured before you decide anything.
Or order a dataset and we invoice it. Nothing renews because you forgot.