Back to home
Orderbook Snapshots

Tick-level historical order books
for Polymarket & Kalshi

Replay every state of any order book and join it with trades and markets — query in ClickHouse SQL or export Parquet, with no ingestion pipeline to build.

Get Started

143B+

Snapshots stored

3.5B+

Snapshots per day

On change

Book capture

Parquet

Export format

Granularity

Granular data, queryable without ETL

Use ClickHouse when you need fast exploration, and Parquet exports when you need offline research.

Access model comparison
ProviderUpdates / DayResolutionHistoryFormat
ProbalyticsBest3.5B+Every state changeNov 2025+ClickHouse SQL + Parquet
File vendorsVariesTick / snapshotVendor-specificCSV / Parquet files
Native APIsLive onlySource-dependentSelf-managedPer-platform JSON

We store every book state, not a periodic snapshot — several distinct states can share one millisecond. Source timestamps are millisecond-resolution; hash and path_index separate and order states within a tick.

Data Schema

Full orderbook depth in ClickHouse

Each snapshot captures the complete bid and ask sides of the orderbook for a given market outcome. Query the data directly, join it with trades and markets, then export only the slice you need.

  • Python SDK — market.orderbook_snapshots() straight into a dataframe
  • Query orderbook_snapshots directly via ClickHouse SQL
  • Join orderbook depth with markets, trades, and platform metadata
  • Download Parquet files via REST API when you need offline analysis
  • Every book carries state and continuity — gaps are labelled, not hidden
SQL Console
ClickHouse
SELECT
  market_id,
  outcome,
  bids,
  asks,
  timestamp
FROM orderbook_snapshots
WHERE market_id = '...'
  AND timestamp BETWEEN
    '2026-03-01' AND '2026-03-02'
ORDER BY timestamp
LIMIT 100
100 rows · 45ms Run Query
Python SDK

Pull the book straight into a dataframe

The probalytics package queries ClickHouse for you and hands back a Polars or pandas dataframe — no HTTP plumbing, no Parquet staging, no schema mapping. Parquet downloads via the REST API are still there when you want files on disk.

replay_book.py
# pip install probalytics
from probalytics import ProbalyticsClient

client = ProbalyticsClient.from_env()

market = client.markets(
    market_platform_id='KXBTC-26JUN-T50000',
    platform='KALSHI',
)[0]

# Full-depth book, every state change, as a Polars dataframe
book = market.orderbook_snapshots(
    start_time='2026-03-15T00:00:00Z',
    end_time='2026-03-15T00:01:00Z',
)

print(book.select('timestamp', 'bids', 'asks'))
Polars by default · pandas with frame="pandas" SDK on GitHub →

Use Cases

What you can do with granular orderbook data

Backtesting

Replay exact orderbook state at any millisecond to backtest strategies with realistic slippage and fill simulation.

Market Microstructure

Study bid-ask spread dynamics, liquidity depth, and order flow patterns across prediction markets.

Liquidity Analysis

Track how liquidity evolves around events, news, and market resolutions at every book state.

ML Feature Engineering

Build rich feature sets from orderbook depth, imbalance ratios, and spread dynamics for predictive models.

Coverage

Platform availability

Polymarket

Live

High quality from Feb 2026+

Nov 2025

Polymarket Perpetuals

Live

Every state change

Jul 2026

Kalshi

Live

Full resolution

May 2026

Kalshi Perpetuals

Live

Every state change

Jun 2026

Figures as of August 2026.

Orderbook Data

Ready to query orderbook data?

Query Polymarket and Kalshi orderbook history in SQL, or export the slices you need as Parquet.

Start free trial

Also explore: Market data·Trade data