PMDataDocs
Historical Data Details

Predict.fun

Predict.fun historical data coverage, downloads, and collection details.

Coverage start date: 2026-09-10.

Available data

Data typeContents
l2Order book of one market for one UTC day, from the Predict.fun WebSocket. Every row is a complete aggregated book.
onchain_fillsFills of one market for one UTC day, recorded on BNB Smart Chain, with maker and taker wallets.
lifecycleMarket 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.

GEThttps://api.pmdata.dev/v1/predict_fun/{data_type}/{YYYY}/{MM}/{DD}/{market_id}.parquet

Response 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:

GEThttps://api.pmdata.dev/v1/predict_fun/lifecycle/{YYYY}/{MM}/{DD}/markets_lifecycle.parquet

Response 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 in l2.
  • predictMarketStatus/{marketId} — Market status, such as REGISTERED or RESOLVED. Stored in lifecycle.
  • predictTradingStatus/{marketId} — Trading status, such as OPEN or CLOSED. Stored in lifecycle.
  • predictMarketChanged/{marketId} — Changes to a market, such as the opening and closing prices of crypto Up/Down markets. Stored in lifecycle.

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.