V2 data overview
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