Raw data · Prime + Raw
Six raw datasets, counted separately from the 19 metric datasets. Every file starts with exchange_timestamp, local_timestamp and local_timestamp_kind, then the columns below; exchange and symbol come from the path. Hyperliquid's derivative feed carries no exchange time, so in its mark price, index price, funding and open interest files exchange_timestamp is modelled, and an exchange_timestamp_kind column says so.
Every print, with the venue’s trade id and taker side.
Every trade printed on the venue, with its trade id, taker side, price and size.
Every change at the top of the book.
Top-of-book updates: best bid and best ask with their sizes, one row per change.
Mark and index price, funding and open interest, one row per change.
The venue’s mark price, one row each time it changes.
The venue’s index price for the contract’s underlying, one row each time it changes.
The current funding rate and the next funding time, one row each time either changes.
Open interest as the venue reports it, one row each time it changes.
| Dataset | Binance USDⓈ-M | OKX | Hyperliquid |
|---|---|---|---|
| trades | Jan 2020 | Sep 2019 | Jan 2025 |
| quotes | Jan 2020 | Sep 2019 | Jan 2025 |
| mark_price | Mar 2020 | Oct 2019 | Mar 2025 |
| index_price | Mar 2020 | Oct 2019 | Mar 2025 |
| funding_rate | Jan 2020 | Sep 2019 | Feb 2025 |
| open_interest | Feb 2020 | Nov 2019 | Feb 2025 |
First month across all symbols of a venue; the raw catalog and /api/v1/metadata/raw list every symbol with its own coverage. Perpetuals only.
The shared key DEMO-KEY gets the 2025-06 file of each venue’s BTC perpetual, for every dataset, with no account and no API key of your own.
# Save the 2025-06 trades file in this folder — no account needed
file=binance-futures_trades_perpetual-BTC-USDT-USDT_2025-06.parquet
curl -fLG -H "X-API-KEY: DEMO-KEY" \
"https://aperiodic.io/api/v1/data/raw/preview/trades" \
-d exchange=binance-futures \
-d symbol=perpetual-BTC-USDT:USDT \
-d download=true \
-o "$file" && echo "Saved to $PWD/$file"Every dataset and venue, with its command, is in the catalog’s preview data.
One request per dataset, symbol and date range (up to 366 days), with your usual X-API-KEY.
The response lists every Parquet file that overlaps the range, each with a download URL valid for one hour.
The Python client and the CLI download them into the same folder layout, skipping files you already have.
Install the Python client, then load a range into a DataFrame or sync it to a folder.
pip install "aperiodic[polars]"Into a DataFrame
from datetime import date
import aperiodic as ap
df = ap.get_raw(
api_key="YOUR_KEY",
dataset="trades",
exchange="binance-futures",
symbol="perpetual-BTC-USDT:USDT",
start_date=date(2025, 6, 1),
end_date=date(2025, 6, 3),
)
print(df.head())Sync a folder
from datetime import date
import aperiodic as ap
# Skips files already in ./raw, so running it again resumes
ap.download_raw(
api_key="YOUR_KEY",
dataset="trades",
exchange="okx-perps",
symbol="perpetual-BTC-USDT:USDT",
start_date=date(2025, 1, 1),
end_date=date(2025, 12, 31),
output_dir="raw",
)Monthly and daily files sit at different depths, so read a folder with a glob and filter on exchange_timestamp.
raw/trades/exchange=binance-futures/symbol=perpetual-BTC-USDT:USDT/ year=2025/month=06/data.parquet one file per month before 2026-08-01 year=2026/month=08/day=10/data.parquet one file per day from 2026-08-01
# DuckDB, from the folder that holds ./raw
duckdb -c "SELECT * FROM read_parquet('raw/trades/**/data.parquet')
WHERE exchange_timestamp >= '2025-06-01' LIMIT 10"from datetime import datetime, timezone
import polars as pl
df = (
pl.scan_parquet("raw/trades/**/data.parquet")
.filter(pl.col("exchange_timestamp") >= datetime(2025, 6, 1, tzinfo=timezone.utc))
.collect()
)
print(df.head())exchange_timestamp is the venue's own time for the event, exactly as it published it.local_timestamp is when the event reached the capture machine. For days we captured ourselves it is measured. For days before that it is modelled: exchange_timestamp plus a latency drawn from the distribution we measure on our own capture, per venue and dataset.local_timestamp_kind says measured or modelled on every row. Don't use modelled days for latency research.$1,579 month to month. Institutional plans include raw data.