Historical OHLCV Data: 26 Years of US Market Data in Parquet
Historical OHLCV data (open, high, low, close, volume) for US stocks, ETFs and futures, one-minute through daily, as Parquet files. 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-10-23.parquet
| date | symbol | open | high | low | close | volume |
|---|---|---|---|---|---|---|
| 2026-10-23 | AAPL | 349.115 | 351.73 | 345.75 | 347.725 | 39539690.0 |
| 2026-10-23 | MSFT | 517.745 | 525.77 | 515.7 | 524.51 | 13681067.0 |
| 2026-10-23 | NVDA | 210.99 | 213.85 | 210.18 | 210.96 | 80189765.0 |
| 2026-10-23 | AMZN | 248.85 | 250.01 | 246.4516 | 248.0 | 25569043.0 |
| 2026-10-23 | GOOGL | 321.145 | 324.5307 | 320.18 | 320.21 | 17569640.0 |
real rows from this file ·
updated every trading day · stocks & ETFs current through 2026-10-23 · futures through 2026-10-23
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 (16,000+ cumulative stocks, 8,500 of them delisted, and 5,000+ 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,743 | 2000-01-03 .. 2026-10-23 | 89.4 GB |
| stock_daily | 6,743 | 2000-01-03 .. 2026-10-23 | 1.2 GB |
| etf_1min | 6,743 | 2000-01-03 .. 2026-10-23 | 15.3 GB |
| etf_daily | 6,743 | 2000-01-03 .. 2026-10-23 | 352 MB |
| futures_1min | 5,886 | 2007-12-31 .. 2026-10-23 | 3.3 GB |
| futures_daily | 4,896 | 2007-12-31 .. 2026-10-23 | 45 MB |
...plus 5-min, 30-min, and hourly for every asset class -- 15 datasets, 95,870 files total.
one-time purchase, no subscription · free account for delivery (~30s) · no credit card for the sample · secure checkout via Stripe
What OHLCV data is
OHLCV data is the standard shape of historical market data: for each instrument and each bar interval, the open, high, low and close price plus the volume traded. Every file in this archive is OHLCV data, whether the bar is one minute or one day.
| Field | Meaning in these files |
|---|---|
| timestamp / date | Bar open time, US/Eastern, tz-naive. Daily files carry a date column instead. |
| open | First traded price in the bar. Stocks and ETFs are split-adjusted, so pre-split bars sit on today's share basis; dividends are not embedded. |
| high | Highest traded price in the bar. |
| low | Lowest traded price in the bar. |
| close | Last traded price in the bar. Futures are continuous contracts, ratio-adjusted at each roll. |
| volume | Shares (stocks, ETFs) or contracts (futures) traded in the bar. Zero-volume bars are kept, not dropped. |
The same AAPL session as above, as its one daily bar and its first two one-minute bars. Intraday files include pre-market from 4:00 AM ET and after-hours to 8:00 PM ET where trades occurred, which is why the first minutes of the day are thin:
by_date/stock_daily/2024/2024-01-03.parquet date symbol open high low close volume 2024-01-03 AAPL 184.22 185.88 183.43 184.25 58414500 by_date/stock_1min/2024/2024-01-03.parquet timestamp symbol open high low close volume 2024-01-03 04:00:00 AAPL 185.00 185.00 185.00 185.00 791 2024-01-03 04:01:00 AAPL 184.90 184.90 184.90 184.90 1278
Session rules, the adjustment math and the QA gates are on the data quality page; per-ticker coverage is on the symbol pages.
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) | sample pack (1 week, 30 symbols) | 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