Skip to main content

Polymarket Historical Data

Bitquery provides Polymarket historical data as Parquet files covering on-chain trades, outcome prices and settlements, already joined with the market question, outcome label and collateral token. It is built for backtesting, research, leaderboards and data lake integrations where paging through a REST API is too slow. These datasets can be hosted directly in your own cloud storage (for example, AWS S3) and queried using engines like Snowflake, BigQuery, Athena, Spark, DuckDB, etc.

Polymarket runs on Polygon (Matic), so all Polymarket datasets live under the matic/ prefix.

Which Polymarket data source should I use?​

NeedUse
Last ~7 days, ad-hoc queries and aggregationsPolymarket API (GraphQL, dataset: realtime)
Live trades, whale alerts, odds as they changeGraphQL subscriptions or Kafka streams
History since September 2025, backtests, model training, warehouse joinsParquet exports on this page

Polymarket moved to new CTF Exchange contracts and pUSD collateral in April 2026. Each row carries Trade_Prediction_Marketplace_SmartContract and Trade_Prediction_CollateralToken_*, so you can separate trades before and after the migration.

Available Polymarket Topics​

For Polymarket, Bitquery currently provides the following datasets:

  • Prediction Trades – Outcome-token trades with market question, outcome label, price, and collateral amounts

  • Prediction Settlements – Position splits, merges and payout redemptions

  • DEX Trades – Polymarket trades in the standard EVM DEX trades schema

Sample Polymarket Cloud Dataset​

You can explore schemas and validate your tooling using the public Polymarket sample datasets:

GitHub reference (schemas & examples)
https://github.com/bitquery/blockchain-cloud-data-dump-sample/tree/main/polymarket

Sample Parquet downloads (public S3)

Polymarket Dataset Directory Structure​

bitquery-blockchain-dataset/
└── matic/
├── polymarket/
│ ├── prediction_trades/
│ │ ├── 84735000_84735049.parquet
│ │ ├── 84735050_84735099.parquet
│ │ └── ...
│ └── PredictionSettlements/
│ ├── 85230000_85230049.parquet
│ ├── 85230050_85230099.parquet
│ └── ...
└── dex_trades/
└── polymarket/
├── 83713800_83713849.parquet
├── 83713850_83713899.parquet
└── ...

Block Range Naming Convention​

Each Parquet file name follows this format:

<start_block>_<end_block>.parquet

Example:

84735000_84735049.parquet

Dataset Fields​

Prediction Trades records an outcome-token trade together with the market it belongs to:

  • Block_Number, Block_Time, Transaction_Hash, Transaction_From

  • Trade_OutcomeTrade_* – buyer, seller, order id, amount, collateral amount, price, IsOutcomeBuy, plus USD equivalents

  • Trade_Prediction_Question_* – market question title, id, market id, resolution source, image, creation time

  • Trade_Prediction_Outcome_* – outcome id, index, and label (for example Down)

  • Trade_Prediction_OutcomeToken_* / Trade_Prediction_CollateralToken_* – ERC-1155 outcome token and ERC-20 collateral token (for example USDC) details

  • Trade_Prediction_Marketplace_* – protocol name, family (Gnosis_CTF), version, and contract

Prediction Settlements records position splits, merges and redemptions for a holder:

  • Settlement_EventType (for example Redemption), Settlement_Holder, Settlement_OutcomeTokenIds

  • Settlement_Amounts_* – amount and collateral amount, with USD equivalents

  • Settlement_Prediction_* – same question, outcome, token, and marketplace structure as trades

DEX Trades uses the standard EVM DEX trades schema documented on the EVM Data page.

Get Full Access​

The full dataset is delivered into your own cloud storage (S3, GCS) or warehouse share (Snowflake, BigQuery). To buy or trial it, go to the Bitquery Data Store, fill the API form or contact sales@bitquery.io.

Datasets you can buy on the Data Store:

  • Polymarket: order fills, position splits, merges and payouts, with market titles, outcomes and USD values

Reading Files with DuckDB​

You need no key or client library. Point DuckDB at the public sample directly:

SELECT *
FROM read_parquet('https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/matic/polymarket/prediction_trades/84735000_84735049.parquet')
LIMIT 10;

Example: daily Polymarket volume from the sample file​

DuckDB can aggregate the Parquet file over HTTPS without loading it anywhere first. Swap the single file for a glob over your own bucket to run it across the full history.

SELECT
Trade_Prediction_Question_Title AS market,
Trade_Prediction_Outcome_Label AS outcome,
count(*) AS trades,
sum(CAST(Trade_OutcomeTrade_CollateralAmountInUSD AS DOUBLE)) AS volume_usd,
avg(CAST(Trade_OutcomeTrade_Price AS DOUBLE)) AS avg_price
FROM read_parquet('https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/matic/polymarket/prediction_trades/84735000_84735049.parquet')
GROUP BY 1, 2
ORDER BY volume_usd DESC
LIMIT 20;

Reading Files in Python​

import pandas as pd

df = pd.read_parquet("https://bitquery-blockchain-dataset.s3.us-east-1.amazonaws.com/matic/polymarket/prediction_trades/84735000_84735049.parquet")
print(df.info())
df.head()

Real-Time vs Batch Data Access​

Cloud data dumps are built for batch analytics and historical workloads.

If you require low-latency or streaming Polymarket data, Bitquery also provides:

See also Polymarket API vs Bitquery Polymarket API for how this compares with Polymarket's own Data API.

Build with Bitquery

Ready to run this in production?

Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.