Predict.fun
Predict.fun historical data coverage, downloads, and collection details.
Coverage start date: 2026-09-10.
Available data
| Data type | Contents |
|---|---|
l2 | Order book of one market for one UTC day, from the Predict.fun WebSocket. Every row is a complete aggregated book. |
onchain_fills | Fills of one market for one UTC day, recorded on BNB Smart Chain, with maker and taker wallets. |
lifecycle | Market status, trading status and market changes for every market, one file per UTC day, from the Predict.fun WebSocket. |
There is no trades data type: Predict.fun's WebSocket has no public trade channel; fills come from the chain as onchain_fills. See the Predict.fun L2, on-chain fills and lifecycle 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.
Predict.fun is a separate product from Plus: Polymarket. Free accounts can download Predict.fun data older than 3 weeks (21 days): 600 downloads at sign-up, then 50 per month, counted separately from Polymarket. Data from the last 3 weeks needs Plus: Predict.fun; Plus: Polymarket does not include it. Plus: Predict.fun also includes Chainlink data.
Market API
Download one market's Parquet file for one data type and UTC date. market_id is Predict.fun's numeric market id. Markets and dates PMData has recorded: see the markets catalog.
https://api.pmdata.dev/v1/predict_fun/{data_type}/{YYYY}/{MM}/{DD}/{market_id}.parquetResponse schema by data_type: l2 · onchain_fills
import pandas as pd
market_id = 123 # Predict.fun numeric market id
date = "2026/10/01" # UTC date, YYYY/MM/DD
data_type = "l2" # l2, onchain_fills
url = (
f"https://api.pmdata.dev/v1/predict_fun/{data_type}/"
f"{date}/{market_id}.parquet"
)
df = pd.read_parquet(
url,
storage_options={
"api_key": "<YOUR_API_KEY>",
"User-Agent": "Mozilla/5.0",
},
)
print(df.head())Each L2 file holds one book, priced in the market's first outcome; the other outcome's book is its complement. The outcome parameter is not supported and returns 400.
Market lifecycle API
Download one UTC day of lifecycle updates for every market:
https://api.pmdata.dev/v1/predict_fun/lifecycle/{YYYY}/{MM}/{DD}/markets_lifecycle.parquetResponse schema: Predict.fun lifecycle
import pandas as pd
date = "2026/10/01" # UTC date, YYYY/MM/DD
url = f"https://api.pmdata.dev/v1/predict_fun/lifecycle/{date}/markets_lifecycle.parquet"
df = pd.read_parquet(
url,
storage_options={
"api_key": "<YOUR_API_KEY>",
"User-Agent": "Mozilla/5.0",
},
)
print(df.head())Captured real-time channels
PMData collects these topics from Predict.fun's WebSocket, wss://ws.predict.fun/ws:
predictOrderbook/{marketId}— Complete aggregated order book for one market, sent on subscription and on every change. Stored inl2.predictMarketStatus/{marketId}— Market status, such asREGISTEREDorRESOLVED. Stored inlifecycle.predictTradingStatus/{marketId}— Trading status, such asOPENorCLOSED. Stored inlifecycle.predictMarketChanged/{marketId}— Changes to a market, such as the opening and closing prices of crypto Up/Down markets. Stored inlifecycle.
Every market is collected over two independent connections. Each row keeps the source timestamp and PMData's receive timestamp, local_timestamp. On-chain fills are read from BNB Smart Chain, not the WebSocket, and stored in onchain_fills.
Market data collection details
PMData's market data collection infrastructure for Predict.fun is located in AWS ap-northeast-1 (Tokyo), colocated with Predict.fun's exchange.
