Opening soon.Get an email at launch

Stock data documentation

File formats, columns, timestamps, adjustments and loading examples.

File formats

Parquet

Typed columns you can read selectively with pandas, Polars or DuckDB. Timestamps are integer nanoseconds in UTC.

CSV

Plain text. Check the types your loader infers, especially for timestamps and identifiers.

Column order

Bars hold prices, volume and trade count for each interval. Trades are single executions. Quotes are bid and ask updates.

1-minute bars

Columns in 1-minute bars
DatasetColumns, in file order
minute
symboltimestampopenhighlowclosevolumetrade_count

Daily bars

Columns in Daily bars
DatasetColumns, in file order
day
symboltimestampopenhighlowclosevolumetrade_count

Trades (tick data)

Columns in Trades (tick data)
DatasetColumns, in file order
trades
symbolts_eventts_sippricesizeexchangesequence_numbertrade_idconditionscorrectiontapetrf_idts_trf

Quotes (tick data)

Columns in Quotes (tick data)
DatasetColumns, in file order
quotes
symbolts_eventts_sipbid_priceask_pricebid_sizeask_sizebid_exchangeask_exchangesequence_numberconditionsindicatorstapets_trf

Timestamps and trading hours

Parquet timestamps are integer nanoseconds since the Unix epoch, in UTC. Convert them explicitly. Sample tables on this site show Eastern Time.

A bar’s timestamp marks the start of its interval. 1-minute bars cover pre-market, regular session and after-hours. Convert with America/New_York so daylight saving is handled.

Bars come in 1-minute, 2-minute, 5-minute, 1-hour and daily timeframes. The 2-minute, 5-minute and 1-hour bars are built from the 1-minute bars. Each starts on a round clock time, Eastern, such as 10:00, 10:05 and 10:10. It takes the first open, the last close, the highest high and the lowest low, and adds up volume and trade count. A stretch with no trades has no bar.

Tick rows carry two timestamps. ts_event comes from the exchange and ts_sip from the SIP. They can differ.

Price adjustments

Prices come unadjusted and adjusted for splits and dividends. Pick one series and stay with it.

The split and dividend files are included. Check them, and ticker changes, when comparing prices across years.

Loading examples

Replace SYMBOL_minute.parquet or SYMBOL_minute.csv with your file path. pandas needs a Parquet engine such as pyarrow.

pandas

pandas / Parquet
import pandas as pd

bars = pd.read_parquet("SYMBOL_minute.parquet")
bars["timestamp"] = pd.to_datetime(
    bars["timestamp"], unit="ns", utc=True
)
print(bars.head())
pandas / CSV
import pandas as pd

bars = pd.read_csv("SYMBOL_minute.csv")
print(bars.dtypes)
print(bars.head())

Polars

Polars / Parquet
import polars as pl

bars = pl.scan_parquet("SYMBOL_minute.parquet")
print(
    bars.select("symbol", "timestamp", "close")
        .head(5).collect()
)
Polars / CSV
import polars as pl

bars = pl.scan_csv("SYMBOL_minute.csv")
print(bars.head(5).collect())

DuckDB

DuckDB / Parquet
SELECT
    symbol,
    make_timestamp_ns("timestamp") AS bar_start_utc,
    open, high, low, close, volume, trade_count
FROM read_parquet('SYMBOL_minute.parquet')
ORDER BY "timestamp"
LIMIT 5;
DuckDB / CSV
SELECT *
FROM read_csv_auto('SYMBOL_minute.csv')
LIMIT 5;

Trades and quotes load the same way. Convert ts_event and ts_sip from UTC nanoseconds.

Delisted and reused symbols

Delisted stocks are filed under the symbol that traded on each date. Symbols get reused, so one symbol can cover more than one company.