Now in Public Beta

Historical Financial Data for AI Research

Production-grade orderbooks, trades, funding rates, and more — delivered as Parquet files via API.

quickstart.py
from pragma_glacier import GlacierClient

client = GlacierClient()

# List available datasets
datasets = client.list_datasets()

# Download order book data
df = client.to_polars(
    dataset="orderbooks",
    start="2026-03-01",
    end="2026-03-15",
    source="HYPERLIQUID",
    pair="BTC_USD"
)

print(df.head())

Six Datasets, One API

Comprehensive market data covering every dimension of crypto markets.

📈

Prices

Aggregated price data from multiple sources with volume.

Free
📚

Order Books

L2 order book snapshots with full bid/ask depth.

Pro
💱

Trades

Individual trade executions with price, size, and side.

Pro
📉

Funding Rates

Perpetual futures funding rate snapshots.

Pro
📊

Open Interest

Open interest data across exchanges.

Pro
📦

Volumes

Trading volume data across exchanges.

Free

How It Works

From sign-up to analysis in under 5 minutes.

1

Get API Key

Sign up for free and get your API key instantly. No credit card required.

2

Query Data

Use the REST API, Python SDK, or CLI to browse datasets and list files.

3

Download & Analyze

Download Parquet files and load them directly into Polars or Pandas.

Simple, Transparent Pricing

Start free, scale when you need more.

Free

$0/month
  • 2 datasets — prices, volumes
  • 30 days history
  • HYPERLIQUID source only
  • 60 requests/min
  • 5 GB/day download
  • SDK & CLI access
Get Started

Enterprise

Custom
  • All 6 datasets
  • Full history archive
  • All sources
  • 6,000 requests/min
  • Unlimited download
  • SDK & CLI access
  • Dedicated support & SLA
  • Custom delivery options
Contact Us

Built for Developers

First-class Python SDK with Polars and Pandas support.

backtest.py
from pragma_glacier import GlacierClient
import polars as pl

client = GlacierClient()

# Download a month of trade data
df = client.to_polars(
    dataset="trades",
    start="2026-02-01",
    end="2026-02-28",
    source="HYPERLIQUID",
    pair="ETH_USD"
)

# Resample to 1-minute bars
bars = df.sort("timestamp_ms").with_columns(
    (pl.col("timestamp_ms") // 60_000).alias("minute")
).group_by("minute").agg(
    pl.col("price").last().alias("close"),
    pl.col("size").sum().alias("volume"),
).sort("minute")

# Compute moving averages
bars = bars.with_columns(
    pl.col("close").rolling_mean(window_size=20).alias("sma_20"),
    pl.col("close").rolling_mean(window_size=50).alias("sma_50"),
)

print(f"Loaded {len(bars)} bars")
print(bars.head(10))