Markets catalog
A free Parquet file listing every Polymarket market PMData has recorded, with the UTC dates it has L2 data for.
The markets catalog is one Parquet file that lists the Polymarket markets PMData has recorded, and the UTC dates it has L2 data for each one. It needs no API key, uses no download quota and is updated daily.
Use it to find a market's market_slug and dates, then download the data with the API reference.
https://public-data.pmdata.dev/v1/polymarket/markets.parquetSchema
Columns are listed in file order.
| # | Field | Type | Description |
|---|---|---|---|
| 1 | exchange | string | Exchange: polymarket. |
| 2 | event_slug | string | Polymarket event slug. One event can contain many markets. |
| 3 | market_slug | string | Polymarket market slug. Use it as {market_slug} in the API; it is case-sensitive. |
| 4 | record_start | timestamp (UTC) | First UTC date PMData has L2 data for the market. |
| 5 | record_end | timestamp (UTC) | Last UTC date PMData has L2 data for the market. Updated daily while the market is still being recorded. |
| 6 | market_start | timestamp (UTC) | null | Time Polymarket opened the market for trading. |
| 7 | market_end | timestamp (UTC) | null | End time set by Polymarket. |
| 8 | question | string | null | Market title, e.g. Jaguars vs. Ravens. |
| 9 | event_title | string | null | Event title. |
| 10 | yes_outcome | string | null | Outcome whose order book the l2 files contain, e.g. Jaguars. |
| 11 | no_outcome | string | null | The market's other outcome, e.g. Ravens. |
| 12 | series | string | null | PMData category, e.g. sports.nfl or updown.5m.btc. Empty if the market is not categorized. |
Market information (columns 6–11) can be empty for a few markets recorded before 2026-08-07 that Polymarket no longer returns.
Dates
record_startandrecord_endare UTC dates, the same dates as in the download URL/{YYYY}/{MM}/{DD}/.- If a market had no events at all on a day between
record_startandrecord_end, there is no file for that day. The API returns404 Not Found, which uses no download quota.
Example
Find a market by its title, then see which dates PMData recorded:
import pandas as pd
url = "https://public-data.pmdata.dev/v1/polymarket/markets.parquet"
# Python's default User-Agent is blocked, so set one
catalog = pd.read_parquet(url, storage_options={"User-Agent": "pmdata-catalog"})
# By question text
matches = catalog[catalog["question"].str.contains("Jaguars", case=False, na=False)]
# Or every market in one event
# matches = catalog[catalog["event_slug"] == "<event_slug>"]
print(matches[["market_slug", "question", "record_start", "record_end"]])
Then download a date in that range:
https://api.pmdata.dev/v1/polymarket/l2/{YYYY}/{MM}/{DD}/{market_slug}.parquet
The catalog covers L2. trades and onchain_fills use the same markets and dates; see API reference for how those files behave when a market had no trades.
