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.

> Get the Full Archive -- $79 > Download Free Daily Sample one-time purchase · free account for delivery · no credit card for the sample

> try it — free, no signup:

curl -LO https://marketparquet.com/api/data/download/stock_daily/2026-10-23.parquet

2026-10-23 close · download

also free, no signup: intraday sample pack · 1 week of 1-min to 1-hour bars, 30 symbols (zip, 3.6 MB)

on a phone? register free and the welcome email carries the download commands for your computer

datesymbolopenhighlowclosevolume
2026-10-23AAPL349.115351.73345.75347.72539539690.0
2026-10-23MSFT517.745525.77515.7524.5113681067.0
2026-10-23NVDA210.99213.85210.18210.9680189765.0
2026-10-23AMZN248.85250.01246.4516248.025569043.0
2026-10-23GOOGL321.145324.5307320.18320.2117569640.0

real rows from this file ·

26 yrs
stocks & ETFs since 2000
9B+
OHLCV bars
21,000+
symbols incl. delisted
5
timeframes, 1-min to daily
168 GB
of Parquet, 95,870 files

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'
DatasetFilesDate rangeSize
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.

FieldMeaning in these files
timestamp / dateBar open time, US/Eastern, tz-naive. Daily files carry a date column instead.
openFirst 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.
highHighest traded price in the bar.
lowLowest traded price in the bar.
closeLast traded price in the bar. Futures are continuous contracts, ratio-adjusted at each roll.
volumeShares (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