26 Years of US Market Data in Parquet
One-minute through daily OHLCV for stocks, ETFs, and futures. Split-adjusted, survivorship-bias-free, delisted tickers included. Download a free daily sample or get the complete archive for $79 once -- no subscription.
> try it — free, no signup:
curl -LO https://marketparquet.com/api/data/download/stock_daily/2026-09-09.parquet
2026-09-09 close · 6,518 US stocks · download
| date | symbol | open | high | low | close | volume |
|---|---|---|---|---|---|---|
| 2026-09-09 | AAPL | 315.485 | 319.15 | 309.9 | 315.34 | 65639962.0 |
| 2026-09-09 | MSFT | 493.07 | 494.39 | 489.8 | 491.65 | 12889572.0 |
| 2026-09-09 | NVDA | 225.275 | 226.18 | 223.46 | 223.67 | 82955478.0 |
| 2026-09-09 | AMZN | 253.12 | 254.69 | 250.65 | 252.4 | 33055487.0 |
| 2026-09-09 | GOOGL | 331.65 | 331.85 | 327.9 | 330.65 | 33151627.0 |
real rows from this file · see all 50 rows →
updated every trading day · stocks & ETFs current through 2026-09-09 · futures through 2026-09-09
What's inside
- Stocks and ETFs from 2000; futures from December 2007 (~130 of the most active contracts, continuous ratio-adjusted)
- One-minute, five-minute, 30-minute, hourly, and daily bars
- Delisted symbols included -- survivorship-bias-free (23,000+ cumulative stocks, 9,500+ ETFs; Enron, Lehman, and every other blow-up your backtest should have seen)
- Apache Parquet, ready for pandas, Polars, and DuckDB -- no CSV parsing, no database load step
- New bars published the same night, typically by midnight ET
Adjustment policy, exactly: prices are split-adjusted; dividends are not embedded in prices. Futures are continuous, back-adjusted by ratio. Zero-volume bars are preserved, not deleted. Full details on the methodology & data quality page.
An actual file, opened
One file per trading day, every symbol in it -- a full-day cross-section in a single read. This is a real query against a real file, output included:
$ python
>>> import duckdb
>>> duckdb.sql("""
... SELECT timestamp, open, high, low, close, volume
... FROM 'by_date/stock_1min/2024/2024-01-03.parquet'
... WHERE symbol = 'AAPL' ORDER BY timestamp
... """).fetchdf()
# 741 rows in ~6 ms. First bars of the premarket:
# timestamp open high low close volume
# 0 2024-01-03 04:00:00 185.00 185.00 185.00 185.00 791.0
# 1 2024-01-03 04:01:00 184.90 184.90 184.90 184.90 1278.0
File layout and schema:
by_date/{asset}_{timeframe}/YYYY/YYYY-MM-DD.parquet
e.g. by_date/stock_1min/2024/2024-03-15.parquet
~22 MB, ~1.28M rows, ~7,180 symbols
columns (intraday):
timestamp TIMESTAMP[us] -- bar OPEN time, US/Eastern, tz-naive
symbol VARCHAR -- 'AAPL'; delisted end in '-DELISTED'
asset_type VARCHAR
open/high/low/close DOUBLE -- split-adjusted
volume DOUBLE
columns (daily): same, with a DATE column named 'date'
| Dataset | Files | Date range | Size |
|---|---|---|---|
| stock_1min | 6,798 | 2000-01-03 .. 2026-09-09 | 88.9 GB |
| stock_daily | 6,826 | 2000-01-03 .. 2026-09-09 | 1.2 GB |
| etf_1min | 6,712 | 2000-01-03 .. 2026-09-09 | 15.5 GB |
| etf_daily | 6,712 | 2000-01-03 .. 2026-09-09 | 346 MB |
| futures_1min | 5,848 | 2007-12-31 .. 2026-09-09 | 3.3 GB |
| futures_daily | 4,864 | 2007-12-31 .. 2026-09-09 | 44 MB |
...plus 5-min, 30-min, and hourly for every asset class -- 15 datasets, 95,834 files total.
one-time purchase, no subscription · free account for delivery (~30s) · no credit card for the sample · secure checkout via Stripe
Five lines to a backtest-ready DataFrame
pandas, one day:
import pandas as pd
bars = pd.read_parquet("2024-03-15.parquet")
aapl = bars[bars.symbol == "AAPL"].set_index("timestamp")
print(aapl[["open", "high", "low", "close", "volume"]].head())
DuckDB, a whole year of files in one glob:
import duckdb
df = duckdb.sql("""
SELECT symbol, date, close, volume
FROM 'by_date/stock_daily/2024/*.parquet'
WHERE symbol = 'AAPL' ORDER BY date
""").df()
Worked examples with real outputs: DuckDB guide · Polars guide · build a local data lake
Why not just use free data?
Free sources give you today's survivors: tickers that went to zero
simply vanish, which quietly inflates every backtest. They also
rewrite history silently, throttle unpredictably, and rarely offer
intraday depth. This archive keeps the losers (suffixed
-DELISTED), states its adjustment policy precisely, and
ships as files you own and version yourself. The longer write-up:
what breaks when you
backtest on yfinance.
Free sample vs. archive vs. Keep Current
| Feature | Free sample $0 |
Complete Archive $79 once |
+ Keep Current $15/mo |
|---|---|---|---|
| Daily (EOD) bars | Last 1 year | Full history (2000+) | Full history, rolling forward |
| Intraday (1min-1hour) | -- | Full history | Full history, rolling forward |
| Delisted / survivorship-bias-free | sample | yes | yes |
| New bars each trading day | -- | -- | yes, live before the next open |
| API rate limit | 60 req/min | 600 req/min | 600 req/min |
The archive is a one-time purchase -- perpetual access to everything dated up to it. Keep Current is optional and cancelable anytime. Full details on pricing.
one-time purchase, no subscription · free account for delivery (~30s) · no credit card for the sample · secure checkout via Stripe
How the data is built
Sourced from a commercial vendor, validated and normalized by an automated pipeline: schema and timezone checks, split-adjustment verification, cross-timeframe consistency checks, and a checkpointed merge ledger so partial updates can never corrupt published files. Delisted-ticker history is merged weekly. The complete methodology -- including known limitations, honestly stated -- is on the data quality page.
Not included (so there's no surprise after purchase): real-time or streaming data, tick data, options, fundamentals, and corporate-action event files. This is historical OHLCV, done carefully.
Common questions
Are prices adjusted for splits and dividends?
Split-adjusted, yes; dividends are not embedded in prices. Futures are continuous, ratio back-adjusted. Zero-volume bars are preserved.
Is this a subscription?
No. $79 buys the archive once, with perpetual access to everything dated up to your purchase. Keep Current ($15/mo) is optional and cancelable anytime.
How is the data delivered?
Parquet files over HTTPS -- browser or API. One file per trading day per dataset; grab one day or script the whole archive.
Do you offer refunds?
All sales are final (instant digital delivery), so evaluate with the free sample first -- it's the identical format and quality. Billing errors are always made right: refund policy.
Before you buy: data license · refund policy · terms · privacy · more in the full FAQ
one-time purchase, no subscription · free account for delivery (~30s) · no credit card for the sample · secure checkout via Stripe