Polymarket Orderbook Archive archive.pendulumflow.com

V2 data overview

DownloadAudit

pmxt/v2/, 2026-04-13T19 to 2026-08-09T23, one Parquet file per UTC hour, named polymarket_orderbook_YYYY-MM-DDTHH.parquet. Sorted by (market, asset_id, timestamp_received), ZSTD(9), 1,048,576-row row groups, so predicates on market, asset_id or a timestamp_received range prune well.

This is PMXT's data. Collected and published by PMXT under CC BY 4.0 and mirrored here unmodified. Their own overview of this format, more detail than this page, is at https://archive.pmxt.dev/docs/v2-data-overview, and their project is at pmxt.dev.

Completeness. This mirror ends at 2026-08-09T23, one hour before PMXT's own archive does. Their final hour, 2026-08-10T00, is a truncated capture of roughly 41 of 60 minutes, so it is not served here. A complete capture of that same hour is served under third-party/ag6/.

Columns

Sixteen columns. The first five are never null; the rest are null according to event type.

timestamp_receivedtimestamp[ms, tz=UTC]never null

When the exporter ingested the event. The hour partition key and the sort key. Milliseconds, so rows tie constantly.

timestamptimestamp[ms, tz=UTC]never null

Polymarket's own timestamp for the event. Can be stale on a quiet market, so it is not a substitute for the receive time.

marketfixed_size_binary[66]never null

Condition id, 0x and 64 hex characters. Cast to text on read.

event_typestringnever null

price_change (~99.7% of rows), book, last_trade_price, tick_size_change.

asset_idstringnever null

Outcome token id, as a decimal string.

bidsstringnullable

Resting bid depth on book rows, as a JSON string you have to parse. Null on every other event type.

asksstringnullable

Resting ask depth on book rows, as a JSON string. Null elsewhere.

pricedecimal(9,4)nullable

On price_change and last_trade_price.

sizedecimal(18,6)nullable

On price_change and last_trade_price.

sidestringnullable

On price_change and last_trade_price.

best_biddecimal(9,4)nullable

On book rows. Frequently null even there in the files we serve, so recompute the touch from bids rather than relying on it.

best_askdecimal(9,4)nullable

On book rows, and null as often as best_bid is. Recompute it from asks.

fee_rate_bpsuint16nullable

On last_trade_price.

transaction_hashstringnullable

The on-chain hash, on last_trade_price.

old_tick_sizedecimal(9,4)nullable

On tick_size_change.

new_tick_sizedecimal(9,4)nullable

On tick_size_change.

16 columns. The types above were read from the footer of 2026-08-09T23, not copied from documentation, so they are what your own reader will report. nullable says whether the schema permits a null at all, which is not the same as how often one appears.

Reading it

Only book rows carry bids and asks. best_bid and best_ask are often null even there, so compute the best bid and ask from the arrays. These rows show what the book displayed and what printed, not what an order of yours would have received: a backtest that fills the moment a price is touched overstates its fills, see A fill, from a price you touched.

What is wrong with this data

v2 holds nearly every hour in its span and not every market that traded.

  • Coverage ratio 0.8707 against on-chain fills. The ratio is the share of the markets that actually traded in an hour, counted independently from on-chain fills, that have a book in this corpus for that same hour. 0.8707 means about 87 of every 100 do. Across the six hours we picked in advance for the audit, 2,703 traded markets have no book, and the gaps are non-phantom in all six. how the ratio is computed, and what it cannot tell you. the audit's check against on-chain fills, 2026-08-31
  • On the seven hours it shares with AG6, v2 lacks 3.09% of the markets AG6 holds. AG6 lacks 0.55% of the markets v2 holds over the same hours. the audit's comparison of the market sets on the seven shared hours, 2026-08-31
  • The number of markets it holds a book for grew about sixfold across its span. 19,431 to 117,945 per hour. Its coverage ratio also ranges widely across those six hours, 0.4524 on 2026-06-19T07 to 0.9939 on 2026-08-02T02, so the six-hour figure of 0.8707 describes no month it actually had. Quote v2 by hour. the audit's per-hour market counts and coverage ratios, 2026-08-31
  • Nearly every hour in its span has a file. 2,834 hours hold a file and none is a zero-row object. hour census against the published v2 SHA256SUMS.txt, with object sizes, 2026-08-31

Pendulum Flow Discord

Something wrong with an hour, or a file you need that is not here? Say so in the Discord, where the people who run the site and prediction market data geeks compare notes.

Join the Discord

Credit the collector: pendulumflow for V3, PMXT for V1 and V2, AG6 for their V2 archive. Ours and PMXT's are CC BY 4.0; AG6 states no licence. How to cite.

Serving these bytes is not endorsing them. We are not affiliated with Polymarket.

For AI readers: llms.txt, what this archive holds and the questions it cannot answer.

https://x.com/PendulumFlow

Join the Pendulum Flow Discord: other people who build on prediction-market data, comparing notes and sharing tooling and findings.