PMDataDocs
Historical Data Details

Polymarket US

Polymarket US historical data coverage, downloads, and collection details.

Coverage start date: 2026-09-10.

Polymarket US (polymarket.us) is the CFTC-regulated US exchange, separate from the international Polymarket exchange: its own markets, market slugs and order books.

Available data

Data typeContents
l2Order book of one market for one UTC day, from the Polymarket US WebSocket. Every row is a complete book with the market state.
tradesTrades of one market for one UTC day, from the Polymarket US WebSocket, with maker and taker side and intent. A day has a file only if the market traded that day.

There is no lifecycle file: every l2 and trades row carries the market or trade state in its state column. There are no on-chain fills. See the Polymarket US L2 and trades schemas for column definitions.

API access and data format

Send your API key in the api_key request header. Get a free key at pmdata.dev/app.

Each file costs one download. A file that does not exist returns 404 and costs nothing.

Polymarket US is a separate product from Plus: Polymarket and Plus: Predict.fun. Free accounts can download Polymarket US data older than 3 weeks (21 days): 600 downloads at sign-up, then 50 per month, counted separately from the other products. Data from the last 3 weeks needs Plus: Polymarket US; Plus: Polymarket and Plus: Predict.fun do not include it. Plus: Polymarket US also includes Chainlink data.

Market API

Download one market's Parquet file for one data type and UTC date. market_slug is the Polymarket US market slug. Markets and dates PMData has recorded: see the markets catalog.

GEThttps://api.pmdata.dev/v1/polymarket_us/{data_type}/{YYYY}/{MM}/{DD}/{market_slug}.parquet

Response schema by data_type: l2 · trades

import pandas as pd

market_slug = "aec-nfl-pit-cle-2026-10-01"  # Polymarket US market slug
date = "2026/10/01"  # UTC date, YYYY/MM/DD
data_type = "l2"  # l2, trades

url = (
    f"https://api.pmdata.dev/v1/polymarket_us/{data_type}/"
    f"{date}/{market_slug}.parquet"
)

df = pd.read_parquet(
    url,
    storage_options={
        "api_key": "<YOUR_API_KEY>",
    },
)
print(df.head())

timestamp and local_timestamp are nanosecond timestamps (timestamp[ns], UTC). pandas reads them as datetime64[ns] and keeps the nanoseconds; df["timestamp"].astype("int64") gives nanoseconds since the epoch. Add .dt.tz_localize("UTC") for timezone-aware values.

Prices are in US dollars from 0 to 1 and are the price of the market's long outcome (the catalog's yes_outcome). The outcome parameter is not supported and returns 400.

Captured real-time channels

PMData collects these subscriptions from the Polymarket US WebSocket, wss://api.polymarket.us/v1/ws/markets:

  • SUBSCRIPTION_TYPE_MARKET_DATA — The complete order book of a market (marketData), sent on every change. Stored in l2.
  • SUBSCRIPTION_TYPE_TRADE — Every trade (trade). Stored in trades.

Each row keeps the source timestamp and PMData's receive timestamp, local_timestamp.

Market data collection details

PMData's market data collection infrastructure for Polymarket US is located in AWS us-east-1, colocated with Polymarket US.