Skip to main content
Kuru publishes daily L2 order book snapshots for all markets as Parquet files on S3. These files are publicly accessible and can be used for backtesting, research, and analysis.

Bucket

s3://kuru-l2-snapshots/l2-snapshots/
Files are also accessible over HTTPS:
https://kuru-l2-snapshots.s3.amazonaws.com/l2-snapshots/

File Layout

Files are partitioned by market address and date:
l2-snapshots/{market}/{market}_{YYYY-MM-DD}.parquet
Example:
l2-snapshots/0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3/0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3_2025-11-24.parquet

Schema

Each row in the Parquet file represents a single L2 snapshot:
ColumnTypeDescription
idstringUnique snapshot identifier
marketstringMarket contract address (lowercase)
blockNumberint64Block number at snapshot time
timestampint64Block timestamp (Unix epoch seconds, UTC)
bidsstringJSON array of bid price levels
asksstringJSON array of ask price levels
bidCountint32Number of bid levels in the snapshot
askCountint32Number of ask levels in the snapshot

Reading with Python

import pandas as pd

df = pd.read_parquet(
    "https://kuru-l2-snapshots.s3.amazonaws.com/l2-snapshots/"
    "0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3/"
    "0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3_2025-11-24.parquet"
)
print(df.head())
Or with pyarrow directly:
import pyarrow.parquet as pq
import pyarrow.fs as pafs

s3 = pafs.S3FileSystem(region="us-east-1", anonymous=True)
table = pq.read_table(
    "kuru-l2-snapshots/l2-snapshots/"
    "0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3/"
    "0xf39c4fd5465ea2dd7b0756cebc48a258b34febf3_2025-11-24.parquet",
    filesystem=s3,
)