Data sets
L2
L2 data is collected from the Polymarket websocket feed for up/down markets. Available since 2026-02-01.
Data type: poly_l2
Format: Daily ZIP of Parquet files, or single-market Parquet by slug.
import requests
api_key = "<YOUR_API_KEY>"
series = "btc-5m"
data_type = "poly_l2"
data_date = "2026-06-22"
file_name = f"{series}_{data_type}_{data_date}.zip"
url = f"https://api.pmdata.dev/polymarket/{series}/{data_type}/{file_name}"
response = requests.get(
url,
headers={"api_key": api_key},
timeout=300,
)
Schema
| Field | Type | Description |
|---|---|---|
market_slug | string | Polymarket market slug. |
timestamp | timestamp | Exchange event timestamp in UTC. |
local_timestamp | timestamp | PMData receive timestamp in UTC. |
event_type | string | Row type: book, price_change, or last_trade_price. |
ask_prices | list<float> | null | Ask price levels for book rows. |
ask_sizes | list<float> | null | Ask size at each price level for book rows. |
bid_prices | list<float> | null | Bid price levels for book rows. |
bid_sizes | list<float> | null | Bid size at each price level for book rows. |
best_ask | float | null | Best ask after a price change. |
best_bid | float | null | Best bid after a price change. |
pc_price | float | null | Changed price level. |
pc_size | float | null | Updated size at the changed price level. |
pc_side | string | null | Book side for the changed level, BUY or SELL. |
trade_price | float | null | Most recent trade price. |
trade_size | float | null | Most recent trade size. |
trade_side | string | null | Aggressor side, BUY or SELL. |
