Schemas Get a free key
LIVE --:--:-- UTC Hyperliquid positions snapshot on a 5-min UTC grid — last boundary --:-- next in -:--
Prediction Markets

Polymarket Historical Data — Free Full L2 Order Book Archive

Free historical Polymarket order book data: a daily Parquet archive of the full L2 book recorded from the live CLOB WebSocket feed since 2026-07-25 — every book snapshot, price-change delta and trade the recorder received, plus a derived top-of-book stream, across the markets it records (crypto up/down, sports and politics). CC BY 4.0, one free API key, samples with no key at all.

Coverage: 3 streams · one Parquet partition per UTC day · CC BY 4.0 · sizes in the live manifest, since 2026-07-25 (the live manifest lists what exists right now). Free — API key — delivered via Archive.

Data summary

CategoryPrediction Markets
Coverage3 streams · one Parquet partition per UTC day · CC BY 4.0 · sizes in the live manifest
Start date2026-07-25
DeliveryAPIArchiveStreamMCP
AccessFree — API key
Partitioningvenue=polymarket/date=YYYY-MM-DD/{book_events,trades,l1_quotes}.parquet
REST/v1/polymarket/archive/datasets
/v1/polymarket/archive/url
Manifesthttps://data.vike.io/archive/manifest.json

Getting started

bash
# Every available date with per-stream sizes and row counts — no key required:
curl -O https://data.vike.io/archive/manifest.json

# Download one day of one stream (needs a free key; archive downloads do NOT
# count against your hourly limit). -C - resumes an interrupted download.
curl -H "X-API-Key: vk_..." -C - -O \
  "https://data.vike.io/archive/venue=polymarket/date=2026-10-11/trades.parquet"

# Free evaluation sample — one full up/down market, no key required:
curl -O https://data.vike.io/archive/samples/book_events.parquet

Schema

book_events

Full L2: snapshots + price_change deltas + trades + tick-size and status markers. `bids`/`asks` hold JSON level arrays.

ColumnType
token_idString
condition_idString
tsInt64
local_tsInt64
seqUInt64
event_typeEnum8('book'=1,'price_change'=2,'trade'=3,'tick_size_change'=4,'status'=5)
is_snapshotUInt8
sideEnum8('none'=0,'buy'=1,'sell'=2)
priceDecimal(9, 4)
sizeDecimal(18, 6)
best_bidDecimal(9, 4)
best_askDecimal(9, 4)
bidsString
asksString
tick_sizeDecimal(9, 4)
statusLowCardinality(String)

trades

Taker tape only — one row per print.

ColumnType
token_idString
condition_idString
tsInt64
local_tsInt64
seqUInt64
priceFloat64
sizeFloat64
sideString

l1_quotes

Derived top-of-book bid/ask, one row per L1 change.

ColumnType
token_idString
condition_idString
tsInt64
local_tsInt64
bidDecimal(9, 4)
askDecimal(9, 4)
bid_sizeDecimal(18, 6)
ask_sizeDecimal(18, 6)

Real rows from the free sample file

Real rows from the free evaluation sample — one full crypto up/down 5-minute market (both outcome tokens, open through resolution), regenerated daily; no key required. These rows were read from the 2026-09-01 sample. Source: https://data.vike.io/archive/samples/

trades

token_idcondition_idtslocal_tsseqpricesizeside
65198662956…4024100xd73785d0…059a051788269593315178826959595100.765.0buy
65198662956…4024100xd73785d0…059a051788269593609178826959628500.751.333332buy
65198662956…4024100xd73785d0…059a051788269593628178826959632200.753.04buy
65198662956…4024100xd73785d0…059a051788269593811178826959650100.7424.648646buy

l1_quotes

token_idcondition_idtslocal_tsbidaskbid_sizeask_size
65198662956…4024100xd73785d0…059a05178826940401217882694051250.420.45235.050.0
65198662956…4024100xd73785d0…059a05178826940401417882694051250.420.45235.055.0
65198662956…4024100xd73785d0…059a05178826940401517882694051260.420.44235.050.0

book_events

token_idcondition_idtsseqevent_typesidepricesizeaskstick_size
65198662956…4024100xd73785d0…059a051788269333901990price_changesell0.9996293.28[[0.99,96293.28]]0.01
65198662956…4024100xd73785d0…059a051788269334132991price_changesell0.5247.86[[0.5,247.86]]0.01
65198662956…4024100xd73785d0…059a051788269334132992price_changesell0.51629.12[[0.51,629.12]]0.01

Example applications

  • Backtest an up/down market-making strategy

    If you are testing whether quoting inside the spread on 5-minute crypto up/down markets earns the maker share it appears to, replay book_events sequence-by-sequence and fill your quotes against the actual taker tape in trades — the archive carries both sides of that experiment at full depth.

  • Measure resolution-window microstructure

    If your hypothesis is that spreads widen and depth vanishes in the final seconds before resolution, l1_quotes gives you top-of-book at every L1 change through a market's final minutes — no sampling, no conflation.

  • Study cross-market information flow

    If you suspect politics and sports books move before correlated crypto up/down books, the whole universe is in one archive with a common clock (`ts` venue time plus `local_ts` capture time), so lead–lag is a join, not a data-engineering project.

Access

Free — get an API key at vike.io/account (up to 3 keys per account) and send it as X-API-KEY on every request.

Archive files are licensed CC BY 4.0 — use them for anything, credit Vike. API responses carry the same attribution ask. Keys, rate limits and errors: the API page.

FAQ

Does Polymarket's own API have historical order book data?
Polymarket's official APIs serve the live order book and historical prices and trades, not past order-book depth: a book state that was never recorded cannot be fetched later. This archive is that recording — the CLOB WebSocket feed captured as it happened, one Parquet file per stream per UTC day.
How complete is "full L2"?
Every book snapshot, every price_change delta, every trade print and every tick-size or status change the CLOB WebSocket published while the recorder held the subscription, for each market it records — with `seq` numbering so a gap is detectable rather than silent. Trades and derived L1 quotes ship as separate streams so you don't have to reconstruct them.
What do `ts` and `local_ts` mean?
`ts` is the venue's own event timestamp; `local_ts` is the recorder's receive time (both epoch milliseconds, UTC). The difference is your feed-delay measurement, per event.
Can I evaluate before getting a key?
Yes — /archive/samples/ holds one complete crypto up/down 5-minute market (both outcome tokens, open through resolution) with all three streams, regenerated daily from a real recent day, and /archive/manifest.json lists every partition. Neither needs a key.
Do downloads count against my hourly limit?
No. Archive files need a free API key, but downloading them is not counted against the hourly request limit.
How current is the archive?
Daily partitions; a UTC day is published after it closes. The manifest is regenerated with each export and is the authority for what is available right now.