Aperiodic
DataFactors
Catalog
Pricing
Get Started

Data Catalog

Browse our curated market data catalog across exchanges and asset types, and the raw trades, quotes and derivatives data behind it.

Preview data — no subscription. Try it free with DEMO-KEY↓
6 raw · 19 datasets

Raw data

The ticks the metrics are built from, as Parquet filesHow raw data works →

Raw L2 order books aren't offered yet. Ask us.

Trades

Derivatives

Market Data

L1 (Top of Book)

L2 (Order Book)

Preview Data

No account needed

A fixed slice of every dataset is free to download: the shared key DEMO-KEY over cURL, --preview in the CLI or preview=True in Python. Pick one for a command you can paste and run. A subscription unlocks full history and every exchange, symbol, interval and parameter; extended trials are available on request.

Raw data

The 2025-06 file of each venue's BTC perpetual, for every dataset the venue serves.

DatasetBinanceperpetual-BTC-USDT:USDTOKXperpetual-BTC-USDT:USDTHyperliquidperpetual-BTC-USDC:USDC
trades
quotes
mark_price
index_price
funding_rate
open_interest

Metrics

Every metric, over one slice: binance-futures · perpetual-BTC-USDT:USDT · 5m · exchange timestamps · 2025-05-01 → 2025-05-31

Trades

Derivatives

Market Data

L1 (Top of Book)

L2 (Order Book)

trades · binance-futures · perpetual-BTC-USDT:USDT · 2025-06

Open dataset
terminal
# Install the Aperiodic CLI into ~/.local/bin
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/aperiodic-io/cli/main/install.sh | INSTALL_DIR="$HOME/.local/bin" bash
export PATH="$HOME/.local/bin:$PATH"

# Download the 2025-06 trades file into ./raw — no API key needed
aperiodic raw trades --preview \
  --exchange binance-futures \
  --symbol perpetual-BTC-USDT:USDT \
  --output-dir ./raw && echo "Saved to $PWD/raw"
Trades

Trades

Prime + Raw

Every trade printed on the venue, with its trade id, taker side, price and size.

/api/v1/data/raw/trades

Schema

exchange_timestamptimestampWhen the venue says the event happened (UTC, µs). Exact.
local_timestamptimestampWhen the event reached the capture machine (UTC, µs). Measured by our capture, or modelled as exchange_timestamp plus a latency drawn from our measured distribution; see local_timestamp_kind.
local_timestamp_kindstring"measured" or "modelled". Don't use modelled rows for latency research.
idstringVenue trade id
sidestringTaker side: "buy", "sell" or "unknown"
pricefloat64Trade price
amountfloat64Trade size. Base asset on Binance USDⓈ-M and Hyperliquid, contracts on OKX

Coverage per venue

Live coverage is unavailable right now; every symbol's coverage is at /api/v1/metadata/raw.

File layout

One file per calendar month before 2026-08-01, one per day from then on, in the aperiodic-raw-trades bucket. Example key:

v1/trades/exchange=binance-futures/symbol=perpetual-BTC-USDT:USDT/year=2025/month=06/data.parquet

Try it

The shared DEMO-KEY gets the 2025-06 file of each venue's BTC perpetual. No account needed.

terminal
# Install the Aperiodic CLI into ~/.local/bin
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/aperiodic-io/cli/main/install.sh | INSTALL_DIR="$HOME/.local/bin" bash
export PATH="$HOME/.local/bin:$PATH"

# Download the 2025-06 trades file into ./raw — no API key needed
aperiodic raw trades --preview \
  --exchange binance-futures \
  --symbol perpetual-BTC-USDT:USDT \
  --output-dir ./raw && echo "Saved to $PWD/raw"

Code

pip install "aperiodic[polars]"
pypi ↗
example.py
from datetime import date
import aperiodic as ap

# Into one DataFrame (monthly files are trimmed to your range)
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, 30))
print(df.head())

# Or stream the files to disk, skipping ones you already have
ap.download_raw(api_key="YOUR_KEY", dataset="trades",
                exchange="binance-futures", symbol="perpetual-BTC-USDT:USDT",
                start_date=date(2025, 1, 1), end_date=date(2025, 12, 31),
                output_dir="raw")

Read the folder back one dataset at a time, with a glob:

terminal
# 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"
example.py
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())

Notes

  • exchange_timestamp is the venue's own time. local_timestamp is measured on days we captured ourselves and modelled from our measured latency before that; local_timestamp_kind says which. Don't use modelled days for latency research.
  • Sizes are in the venue’s own units: base asset on Binance USDⓈ-M and Hyperliquid, contracts on OKX.

Metrics built from this dataset

  • Candlesticks
  • VWAP / TWAP
  • Basis
  • Derivative Price
  • Flow Metrics
  • Trade Size
  • Impact Metrics
  • Price Range & Distribution
  • Up / Down Tick Metrics
  • Trade Run Structure
  • Returns & Volatility
  • Slippage
Aperiodic

Crypto microstructure, liquidity & flow metrics — built from hundreds of terabytes of raw data, distilled into point-in-time metrics you can pull as parquet files. Plus the raw trades, quotes and derivatives data behind them.

Registered office
Aperiodic Limited
136 Capel StreetDublin, D01 T2C9Ireland
Registered in Ireland · Company No. 815273

© Copyright 2026 Aperiodic. All Rights Reserved.

Product
  • Data Catalog
  • Pricing
  • API Docs
  • Notebooks
  • Find new alpha
  • Roadmap
  • Changelog
  • FAQ
  • For AI Agents
  • Atlas Security Master
Metrics
  • Order Flow
  • L1 — Top of Book
  • L2 — Order Book
  • Market Data
  • Derivatives
  • Raw Data
Channels
  • Blog: Research Insights
  • Microstructure Guide
  • Data vendors compared
  • Aperiodic vs. Tardis
  • Aperiodic vs. CoinGlass
  • Aperiodic vs. Kaiko
  • Aperiodic vs. Amberdata
  • LinkedIn
Company
  • Contact
  • Book a call
  • Terms of Service
  • Privacy Policy
  • LLM? Read this.

Provided for informational purposes only; not investment advice, a recommendation, or an offer to transact. Past performance is not indicative of future results.

Trades

Prime + Raw

Every trade printed on the venue, with its trade id, taker side, price and size.

/api/v1/data/raw/trades

Schema

exchange_timestamptimestampWhen the venue says the event happened (UTC, µs). Exact.
local_timestamptimestampWhen the event reached the capture machine (UTC, µs). Measured by our capture, or modelled as exchange_timestamp plus a latency drawn from our measured distribution; see local_timestamp_kind.
local_timestamp_kindstring"measured" or "modelled". Don't use modelled rows for latency research.
idstringVenue trade id
sidestringTaker side: "buy", "sell" or "unknown"
pricefloat64Trade price
amountfloat64Trade size. Base asset on Binance USDⓈ-M and Hyperliquid, contracts on OKX

Coverage per venue

VenueSymbolsFrom
Binance983Jan 2020
OKX700Sep 2019
Hyperliquid528Jan 2025

File layout

One file per calendar month before 2026-08-01, one per day from then on, in the aperiodic-raw-trades bucket. Example key:

v1/trades/exchange=binance-futures/symbol=perpetual-BTC-USDT:USDT/year=2025/month=06/data.parquet

Try it

The shared DEMO-KEY gets the 2025-06 file of each venue's BTC perpetual. No account needed.

terminal
# Install the Aperiodic CLI into ~/.local/bin
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/aperiodic-io/cli/main/install.sh | INSTALL_DIR="$HOME/.local/bin" bash
export PATH="$HOME/.local/bin:$PATH"

# Download the 2025-06 trades file into ./raw — no API key needed
aperiodic raw trades --preview \
  --exchange binance-futures \
  --symbol perpetual-BTC-USDT:USDT \
  --output-dir ./raw && echo "Saved to $PWD/raw"

Code

pip install "aperiodic[polars]"
pypi ↗
example.py
from datetime import date
import aperiodic as ap

# Into one DataFrame (monthly files are trimmed to your range)
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, 30))
print(df.head())

# Or stream the files to disk, skipping ones you already have
ap.download_raw(api_key="YOUR_KEY", dataset="trades",
                exchange="binance-futures", symbol="perpetual-BTC-USDT:USDT",
                start_date=date(2025, 1, 1), end_date=date(2025, 12, 31),
                output_dir="raw")

Read the folder back one dataset at a time, with a glob:

terminal
# 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"
example.py
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())

Notes

  • exchange_timestamp is the venue's own time. local_timestamp is measured on days we captured ourselves and modelled from our measured latency before that; local_timestamp_kind says which. Don't use modelled days for latency research.
  • Sizes are in the venue’s own units: base asset on Binance USDⓈ-M and Hyperliquid, contracts on OKX.

Metrics built from this dataset

  • Candlesticks
  • VWAP / TWAP
  • Basis
  • Derivative Price
  • Flow Metrics
  • Trade Size
  • Impact Metrics
  • Price Range & Distribution
  • Up / Down Tick Metrics
  • Trade Run Structure
  • Returns & Volatility
  • Slippage