Historical Stock, ETF & Futures Data in Parquet
Split/dividend-adjusted OHLCV bars, 1-minute to daily, US stocks & ETFs from 2000 and futures from 2007, survivorship-bias-free with delisted tickers, updated after market close -- one Parquet file per trading day, loads straight into pandas/Polars/DuckDB.
We wanted reliable split-adjusted OHLCV parquet data for backtesting. Couldn't find it. Everything was either scattered across unreliable sources, unadjusted prices, or only available as CSVs. So we built MarketParquet.
[ Pricing ]
Buy the archive once -- no subscription. See pricing.
| Feature | Free sample | Complete Archive ($79) |
|---|---|---|
| Daily (EOD) data | Last 1 year | Full history |
| Intraday (1min-1hour) | -- | Full history |
| Asset types | Stock, ETF, Futures | Stock, ETF, Futures |
| Downloads | Unlimited | Unlimited |
| API access | 60 req/min | 600 req/min |
* Optional add-on: Keep Current -- $15/mo rolls your archive forward each trading day. Cancel anytime.
[ MCP Server ]
MarketParquet speaks MCP. Your coding agent answers market questions with server-side DuckDB SQL over 26 years of data — and bulk-downloads any range to run full backtests locally. Included with Keep Current ($15/mo); any free API key can connect.
> Claude Code
claude mcp add --transport http marketparquet \
https://marketparquet.com/labs/mcp \
--header "Authorization: Bearer bt_YOUR_KEY"
> Codex CLI (~/.codex/config.toml)
[mcp_servers.marketparquet]
url = "https://marketparquet.com/labs/mcp"
http_headers = { Authorization = "Bearer bt_YOUR_KEY" }
> Cursor (.cursor/mcp.json)
{
"mcpServers": {
"marketparquet": {
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> opencode (opencode.json)
{
"mcp": {
"marketparquet": {
"type": "remote",
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> Kimi CLI (~/.kimi/mcp.json)
{
"mcpServers": {
"marketparquet": {
"url": "https://marketparquet.com/labs/mcp",
"headers": { "Authorization": "Bearer bt_YOUR_KEY" }
}
}
}
> Any MCP client
endpoint: https://marketparquet.com/labs/mcp (MCP Streamable HTTP) header: Authorization: Bearer bt_YOUR_KEY
[ Data Inventory ]
STOCK
| Timeframe | Files | Date Range | Total Size |
|---|---|---|---|
| 1-Min | 6,766 | 2000-01-03 .. 2026-07-24 | 89.9 GB |
| 5-Min | 6,766 | 2000-01-03 .. 2026-07-24 | 31.9 GB |
| 30-Min | 6,766 | 2000-01-03 .. 2026-07-24 | 9.4 GB |
| 1-Hour | 6,766 | 2000-01-03 .. 2026-07-24 | 6.1 GB |
| Daily | 6,794 | 2000-01-03 .. 2026-07-24 | 1.2 GB |
ETF
| Timeframe | Files | Date Range | Total Size |
|---|---|---|---|
| 1-Min | 6,680 | 2000-01-03 .. 2026-07-24 | 15.2 GB |
| 5-Min | 6,680 | 2000-01-03 .. 2026-07-24 | 6.6 GB |
| 30-Min | 6,680 | 2000-01-03 .. 2026-07-24 | 2.3 GB |
| 1-Hour | 6,680 | 2000-01-03 .. 2026-07-24 | 1.5 GB |
| Daily | 6,680 | 2000-01-03 .. 2026-07-24 | 341 MB |
FUTURES
[ Schema ]
path: by_date/{asset}_{timeframe}/YYYY-MM-DD.parquet
compression: snappy
assets: stock, etf, futures
timeframes: 1min, 5min, 30min, 1hour, daily
columns:
timestamp TIMESTAMP[us] -- bar open time (US/Eastern)
symbol STRING -- ticker symbol
asset_type STRING -- "Stock", "ETF", or contract code
open FLOAT64 -- open price
high FLOAT64 -- high price
low FLOAT64 -- low price
close FLOAT64 -- close price
volume FLOAT64 -- bar volume
[ Quick Start ]
# Python
import pandas as pd
df = pd.read_parquet("stock_1min_2024-01-15.parquet")
spy = df[df.symbol == "SPY"]
# API -- list available assets (any tier)
curl -H "Authorization: Bearer bt_YOUR_KEY" \
https://marketparquet.com/api/v1/assets
# API -- list dates
curl -H "Authorization: Bearer bt_YOUR_KEY" \
https://marketparquet.com/api/v1/dates/stock_1min
# API -- get download URL
curl -H "Authorization: Bearer bt_YOUR_KEY" \
https://marketparquet.com/api/v1/download/stock_1min/2024-01-15