OptionSpace.ai
Data catalog

Dataset catalog

← Back to the data overview

Fields, conventions and coverage, organized by dataset

Schemas, coverage, and delivery for each product. Column names below are the column names you get. Where a field carries raw exchange data or an event-stripped variant, it is marked, because those two decide what you are licensed to do with it.

The archive extends by one session every trading day. Figures below are floors, not a snapshot of a measurement date. Request current coverage for your evaluation.

141 symbols ◆ 2017 to present ◆ 386 snapshots per session, 09:32–15:57 ET ◆ over 166 billion rows
01–06

The datasets

Historical tables are populated across these six dataset families. Coverage and access vary by dataset and instrument. Event-cleaned table fields remain in development; the research tools shown on this site have their own supported outputs.

01

Vol Fits

dataproduct.vol_fits Available

Per option contract · per minute · 33 columns

A fitted volatility and a theoretical price for every listed contract, at every minute of the session, with the full greek set beside it, from delta through vanna and volga.

The forward is solved from put–call parity with discrete dividends, an SPX-implied rate, and an implied borrow, so calls and puts land on one curve instead of two. American contracts are priced with an American pricing engine that respects the early-exercise boundary. The wings are Lee-bounded, so an extrapolated quote is arbitrage-free by construction rather than by inspection, and is_wing_extrapolated tells you which rows those are.

Schema: 33 columns

Swipe tables to see all columns.

Keys
data_dateDATESession date
snapshot_timeVARCHARHH:MM, 09:32 to 15:57
symbolVARCHARUnderlying root
expirationDATEContract expiry
strikeDOUBLEStrike, as listed: fractional strikes kept verbatim
put_callVARCHARcall or put
Security reference
company_nameVARCHAR
sectorVARCHAR
security_typeVARCHARetf, stock or index
Contract and underlier
dteINTEGERCalendar days to expiry
spotDOUBLEUnderlying price at the snapshot
forwardDOUBLEParity-implied forward, discrete dividends and borrow included
qDOUBLEImplied borrow / carry
rDOUBLERisk-free rate at this expiry: the same curve as product 02
T_volDOUBLEYear fraction used for vol, settlement lag included
zDOUBLENormalized log-moneyness
Fitted outputs
fitted_volDOUBLEAnnualized, decimal
fitted_priceDOUBLETheoretical price off the fitted vol
Greeks
deltaDOUBLE
gammaDOUBLE
vegaDOUBLE
thetaDOUBLEPer calendar day. Fits before methodology v3.1
theta_1dDOUBLEValue change to the same time next trading day. v3.1 fits
theta_next_openDOUBLEValue change to the next 09:30 ET open. v3.1 fits
rhoDOUBLE
vannaDOUBLE
volgaDOUBLE
Flags
is_wing_extrapolatedBOOLEANTrue where the Lee wing carries the vol rather than the quoted core
Raw market quotes
bidDOUBLEGated
askDOUBLEGated
bid_sizeINTEGERGated
ask_sizeINTEGERGated
iv_bidDOUBLEInverted from the bid Gated
iv_askDOUBLEInverted from the ask Gated
iv_midDOUBLEExact mid-price inversion Gated

Primary key is the six key columns. Products 06a and 03–04 share or derive from this grain, so they join without a reconciliation step.

02

Implied Rates

dataproduct.rates Available

Daily · per SPX/SPXW expiry · symbol-agnostic · 4 columns

The risk-free term structure the options market actually discounts at, solved out of SPX and SPXW put–call parity for every listed expiry and smoothed across the curve.

A flat SOFR or Treasury rate is the single most common source of a wrong forward, and a wrong forward puts calls and puts on different curves at every tenor. Every row carries rate_se (a delta-method standard error on the raw per-expiry parity rate), so a thin expiry announces itself instead of quietly moving your surface. One curve per day, shared by every symbol, which is what makes product 01 internally consistent.

Schema: 4 columns

Swipe tables to see all columns.

data_dateDATESession date
expirationDATESPX/SPXW listed expiry
rateDOUBLESmoothed parity-implied rate from SPX options, annualized
rate_seDOUBLEDelta-method standard error of the raw per-expiry rate

Every session from 2017-01-03 to the most recent completed session, across roughly 2,000 distinct expiries. No nulls in rate_se.

03

Surface Tenors

dataproduct.surface_tenors Base metrics available

Per symbol · per snapshot · tenors 30, 60, 90, 180, 360 days · 14 columns

The shape of the surface at constant maturities: at-the-forward vol, 25-delta skew, curvature, and the straddle, strangle and risk-reversal premiums as a percentage of spot.

Listed expiries roll, so a series keyed on them is not a time series. These are interpolated onto fixed tenors off the same fits as product 01. Base metrics are populated. The clean at-the-forward vol, its error bar, the clean straddle and event_dates are filled from 14 October 2026; earlier history is being backfilled. Skew, curvature, strangle and risk reversal have no clean variant.

Schema: 14 columns

Swipe tables to see all columns.

Keys
data_dateDATE
snapshot_timeVARCHAR
symbolVARCHAR
tenor_daysINTEGER30, 60, 90, 180 or 360
Dirty: the default tier
atf_ivDOUBLEAt-the-forward IV, annualized
skew_25dDOUBLE25Δ put less 25Δ call
curvature_25dDOUBLEMean 25Δ wing less the at-the-money vol
straddle_pctDOUBLEAt-the-forward straddle, % of spot
strangle_25d_pctDOUBLE25Δ strangle, % of spot
rr_25d_pctDOUBLE25Δ risk reversal, % of spot
Clean add-on: event-stripped
atf_iv_cleanDOUBLEAt-the-forward IV with scheduled events removed Clean
atf_iv_clean_seDOUBLEStandard error of the removal; empty where it cannot be vouched for Clean
straddle_pct_cleanDOUBLEStraddle repriced at the clean vol, % of spot Clean
event_datesDATE[]The events removed for this tenor Clean
04

IV vs RV and VRP

dataproduct.iv_rv Historical tables populated

Per symbol · per snapshot · tenors 1 to 30 days · 10 columns

Implied and realized volatility at matched tenors, and the difference between them, across nine short horizons from one day to thirty.

The comparison is only meaningful if both sides are measured over the same window, which is why the tenors are matched rather than assembled from a 30-day IV and whatever realized series was to hand. Realized vol is computed from 1-minute bars, not daily closes. The implied side also comes clean, with its error bar and the removed events listed, filled from 14 October 2026 while earlier history is backfilled. Realized vol and the premium have no clean variant.

Schema: 10 columns

Swipe tables to see all columns.

Keys
data_dateDATE
snapshot_timeVARCHAR
symbolVARCHAR
tenor_daysINTEGER1, 2, 3, 5, 7, 10, 14, 20 or 30
Dirty: the default tier
atf_ivDOUBLEAt-the-forward IV at the tenor, annualized
rvDOUBLERealized vol at the tenor, from 1-minute bars
vrpDOUBLEVariance risk premium, atf_iv − rv
Clean add-on: event-stripped
atf_iv_cleanDOUBLEAt-the-forward IV with scheduled events removed Clean
atf_iv_clean_seDOUBLEStandard error of the removal; empty where it cannot be vouched for Clean
event_datesDATE[]The events removed Clean
05

Event Vols

dataproduct.event_runup · event_outcomes Historical tables populated

Two tables · run-up by trading session, and one row per event · 8 + 14 columns

What the market paid for an event on each session leading into it, and what the event actually did. Earnings, FOMC, CPI and NFP.

The run-up table is a trajectory, not a single number: the implied move on every session of the window, so you can see the shape of the bid rather than its endpoint. Outcomes give the realized move with its sign and split it into overnight and intraday (for a BMO or AMC print those are different questions) and carry the IV crush and the straddle result. Implied moves carry a standard error. The implied move is the average move priced, about 0.80 times the event's volatility. It is empty, never zero, where the options priced no measurable move.

Schema: 8 + 14 columns

Swipe tables to see all columns.

event_runup: one row per symbol, event, session
symbolVARCHAR
event_typeVARCHARearnings, fomc, cpi or nfp
event_dateDATE
data_dateDATEThe session
sessions_to_eventINTEGERTrading sessions before the announcement; 0 is the last close before it. Window is 90 calendar days for earnings, 30 for FOMC, 15 for CPI and NFP
implied_move_pctDOUBLEAverage move priced, %; null where none is measurable
implied_move_seDOUBLEDelta-method SE; null with the move
atm_volDOUBLE30-day at-the-money IV at that point
event_outcomes: one row per event
symbolVARCHAR
event_typeVARCHAR
event_dateDATE
timingVARCHARBMO, AMC or INTRADAY (FOMC)
implied_move_pctDOUBLEAs priced at the last close before the announcement
implied_move_seDOUBLE
actual_returnDOUBLERealized move with its sign, close to close, %
actual_absDOUBLERealized absolute move, %
actual_overnightDOUBLEOvernight portion, %
actual_intradayDOUBLEIntraday portion, %
iv_beforeDOUBLE30-day ATM vol before
iv_afterDOUBLE30-day ATM vol after
crush_pctDOUBLEDrop from before to after, % of before
straddle_pnlDOUBLERealized move less the implied move
06

Volume and Open Interest

option_volume_oi · option_daily_volume_oi · symbol_daily_aggregates Historical tables populated

Per option and minute, per option and day, and per symbol and day · Raw fields subject to access permissions

Cumulative intraday contract volume and prior-close open interest, daily contract totals, and daily symbol aggregates with put/call ratios.

Because the per-option table shares product 01's six-column key, this is an add-on rather than a second dataset to align , flow sits next to the fitted vol on the same row. Every column here is raw exchange data, so the whole product is gated.

Schema: intraday contracts, daily contracts and daily symbol aggregates +

Swipe tables to see all columns.

option_volume_oi: the vol-fits grain
data_dateDATE
snapshot_timeVARCHAR
symbolVARCHAR
expirationDATE
strikeDOUBLE
put_callVARCHAR
volumeINTEGERGated
open_interestINTEGEREnd of day only Gated
symbol_daily_aggregates: per symbol, per session
data_dateDATE
symbolVARCHAR
total_volumeBIGINTOfficial EOD count Gated
call_volumeBIGINTGated
put_volumeBIGINTGated
total_oiBIGINTPrior close Gated
call_oiBIGINTGated
put_oiBIGINTGated
pc_vol_ratioDOUBLEPut over call Gated
pc_oi_ratioDOUBLEPut over call Gated
option_daily_volume_oi: per contract and day

Daily tape volume and official end-of-day volume are separate fields. Open interest is the prior-close observation.

ColumnTypeMeaning
data_dateDATESession date
symbolSTRINGOption root
expirationDATEListed expiry
strikeDOUBLEContract strike
put_callSTRINGCall or put
open_interestINTEGERPrior-close OI
volume_tapeINTEGERFinal cumulative tape volume
volume_officialINTEGEROfficial end-of-day volume
07

Coverage

141 symbols, from 2017-01-03 to the most recent completed session. Not every symbol runs the full span, and the reason is listing age rather than a gap in the backfill: 77 symbols carry history from the first session, 64 begin when they began trading, and 3 are discontinued tickers kept for continuity. The per-symbol start dates are below, so you can check the names you care about before you ask us anything.

Per-symbol coverage: 141 symbols

Swipe tables to see all columns.

Symbol · first session
AAL2017-01-03
AAPL2017-01-03
ADBE2017-01-03
AMC2017-01-03
AMD2017-01-03
AMZN2017-01-03
APLD2023-05-25
ARKK2018-03-09
ARM2023-09-18
ASML2017-01-03
ASTS2021-04-09
AVGO2017-01-03
BA2017-01-03
BABA2017-01-03
BAC2017-01-03
BB2017-10-16
BBAI2021-12-10
BE2018-08-27
BMNR2025-07-23
CIFR2021-08-30
CLF2017-01-03
CLSK2020-08-12
COHR2022-09-08
COIN2021-04-20
CORZ2022-01-20
CORZQ2023-01-06
CRCL2025-06-09
CRM2017-01-03
CRWD2019-06-18
CRWV2025-04-01
CSCO2017-01-03
DELL2019-01-04
DRAM2026-04-07
EEM2017-01-03
EFA2017-01-03
ETHA2025-04-11
EWY2017-01-03
EWZ2017-01-03
F2017-01-03
FB2022-01-31
FCX2017-01-03
FIG2025-08-04
FRMI2025-10-06
FXI2017-01-03
GDX2017-01-03
GLD2017-01-03
GLW2017-01-03
GME2017-01-03
GOOG2017-01-03
GOOGL2017-01-03
HIMS2021-01-25
HOOD2021-08-04
HPE2017-01-03
HYG2017-01-03
IBIT2024-11-19
IBM2017-01-03
IGV2017-01-03
INTC2017-01-03
IONQ2021-10-04
IREN2023-07-11
IWM2017-01-03
KO2017-01-03
KRE2017-01-03
KWEB2017-01-03
LCID2021-07-26
LITE2024-01-02
LQD2017-01-03
MARA2021-01-04
META2021-07-08
MRVL2017-01-03
MSFT2017-01-03
MSTR2017-01-03
MU2017-01-03
NBIS2024-10-29
NDX2026-05-08
NFLX2017-01-03
NIO2018-09-19
NKE2017-01-03
NOK2017-01-03
NOW2017-01-03
NU2021-12-15
NVDA2017-01-03
OKLO2024-05-13
ONDS2021-07-14
OPEN2020-12-23
ORCL2017-01-03
PATH2021-04-27
PDD2018-08-10
PFE2017-01-03
PLTR2020-10-06
PLUG2017-01-03
PYPL2017-01-03
QBTS2022-08-16
QCOM2017-01-03
QQQ2017-01-03
RGTI2022-03-04
RIOT2017-12-07
RIVN2021-11-16
RKLB2021-08-27
RUT2018-12-03
SHOP2017-01-03
SKHY2026-07-14
SLV2017-01-03
SMCI2023-04-03
SMH2017-01-03
SNAP2017-03-10
SNDK2025-03-03
SNOW2020-09-22
SOFI2021-06-03
SOUN2022-05-25
SOXL2017-01-03
SOXS2017-01-03
SOXX2017-01-03
SPCE2019-10-30
SPCX2026-06-17
SPX2017-01-03
SPXW2017-01-03
SPY2017-01-03
SQQQ2017-01-03
T2017-01-03
TLT2017-01-03
TQQQ2017-01-03
TSLA2017-01-03
TSLL2022-08-11
TSM2017-01-03
TTD2017-04-19
UBER2019-05-16
UNH2017-01-03
USO2017-01-03
VIX2017-01-03
VRT2020-03-25
VXX2017-01-03
VXXB2019-01-28
VZ2017-01-03
WBD2022-04-11
WMT2017-01-03
WULF2023-04-19
XLE2017-01-03
XLF2017-01-03
XOM2017-01-03
XSP2017-01-03

Measured 3 September 2026. CORZQ, FB and VXXB are discontinued roots retained so a series does not silently break at a ticker change. A rename and a successor listing are different events and we keep them distinguishable.

08

How it is delivered

Delivery splits by granularity, and access is metered by usage rather than licensed per seat.

Per-minute data: API

Minute-grain data is served over the API and is not shipped as bulk files. It is the largest and the most sensitive tier, and it is queried in slices rather than downloaded whole. One versioned namespace, /api/v1/data, with a Python client over it.

Access is metered per key for requests, rows and concurrency, with pooled sub-keys for organisations, so a desk gets its own attribution without a separate contract. We do not count seats.

End-of-day data: files or API

Daily data goes to institutional clients as Parquet with ZSTD compression, sorted for compression on the same key the tables are ordered by, and is queryable over the same API if you would rather not hold it.

Files carry evaluated grids, per-strike fits and tenor metrics. They do not carry curve coefficients: you get the surface, not the machine that made it.

Gated Raw exchange data, including quotes, sizes, volume and open interest, plus the implied vols that can be inverted back to a quote. Every account receives these for past sessions, with no separate entitlement, once the next session has opened. They are never served for the current trading day. Everything not marked is derived output and carries no such restriction.

Clean An event-stripped variant of a column, shipped alongside the unadjusted one rather than in place of it. The default tier is dirty. Whenever a clean series is present so is event_dates, listing what was removed. For a stock, only the next scheduled earnings report is removed (when it falls within 90 days), because the earnings calendar lists one date ahead; later reports inside a 180- or 360-day tenor stay in the clean value. For an index or ETF, FOMC decisions within 30 days and CPI and payrolls releases within 15 days are removed. Where the removal cannot be vouched for, the clean value repeats the unadjusted one and its error bar is empty.

Grain Historical, next day. Volatilities are annualized decimals; premiums are a percentage of spot. Every table keys on a subset of the same six columns, which is what lets them join without a reconciliation step.

See the data before you buy

Contact us to request a sample