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_date | DATE | Session date |
| snapshot_time | VARCHAR | HH:MM, 09:32 to 15:57 |
| symbol | VARCHAR | Underlying root |
| expiration | DATE | Contract expiry |
| strike | DOUBLE | Strike, as listed: fractional strikes kept verbatim |
| put_call | VARCHAR | call or put |
Security reference
| company_name | VARCHAR | |
| sector | VARCHAR | |
| security_type | VARCHAR | etf, stock or index |
Contract and underlier
| dte | INTEGER | Calendar days to expiry |
| spot | DOUBLE | Underlying price at the snapshot |
| forward | DOUBLE | Parity-implied forward, discrete dividends and borrow included |
| q | DOUBLE | Implied borrow / carry |
| r | DOUBLE | Risk-free rate at this expiry: the same curve as product 02 |
| T_vol | DOUBLE | Year fraction used for vol, settlement lag included |
| z | DOUBLE | Normalized log-moneyness |
Fitted outputs
| fitted_vol | DOUBLE | Annualized, decimal |
| fitted_price | DOUBLE | Theoretical price off the fitted vol |
Greeks
| delta | DOUBLE | |
| gamma | DOUBLE | |
| vega | DOUBLE | |
| theta | DOUBLE | Per calendar day. Fits before methodology v3.1 |
| theta_1d | DOUBLE | Value change to the same time next trading day. v3.1 fits |
| theta_next_open | DOUBLE | Value change to the next 09:30 ET open. v3.1 fits |
| rho | DOUBLE | |
| vanna | DOUBLE | |
| volga | DOUBLE | |
Flags
| is_wing_extrapolated | BOOLEAN | True where the Lee wing carries the vol rather than the quoted core |
Raw market quotes
| bid | DOUBLE | Gated |
| ask | DOUBLE | Gated |
| bid_size | INTEGER | Gated |
| ask_size | INTEGER | Gated |
| iv_bid | DOUBLE | Inverted from the bid Gated |
| iv_ask | DOUBLE | Inverted from the ask Gated |
| iv_mid | DOUBLE | Exact mid-price inversion Gated |
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_date | DATE | Session date |
| expiration | DATE | SPX/SPXW listed expiry |
| rate | DOUBLE | Smoothed parity-implied rate from SPX options, annualized |
| rate_se | DOUBLE | Delta-method standard error of the raw per-expiry rate |
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_date | DATE | |
| snapshot_time | VARCHAR | |
| symbol | VARCHAR | |
| tenor_days | INTEGER | 30, 60, 90, 180 or 360 |
Dirty: the default tier
| atf_iv | DOUBLE | At-the-forward IV, annualized |
| skew_25d | DOUBLE | 25Δ put less 25Δ call |
| curvature_25d | DOUBLE | Mean 25Δ wing less the at-the-money vol |
| straddle_pct | DOUBLE | At-the-forward straddle, % of spot |
| strangle_25d_pct | DOUBLE | 25Δ strangle, % of spot |
| rr_25d_pct | DOUBLE | 25Δ risk reversal, % of spot |
Clean add-on: event-stripped
| atf_iv_clean | DOUBLE | At-the-forward IV with scheduled events removed Clean |
| atf_iv_clean_se | DOUBLE | Standard error of the removal; empty where it cannot be vouched for Clean |
| straddle_pct_clean | DOUBLE | Straddle repriced at the clean vol, % of spot Clean |
| event_dates | DATE[] | 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_date | DATE | |
| snapshot_time | VARCHAR | |
| symbol | VARCHAR | |
| tenor_days | INTEGER | 1, 2, 3, 5, 7, 10, 14, 20 or 30 |
Dirty: the default tier
| atf_iv | DOUBLE | At-the-forward IV at the tenor, annualized |
| rv | DOUBLE | Realized vol at the tenor, from 1-minute bars |
| vrp | DOUBLE | Variance risk premium, atf_iv − rv |
Clean add-on: event-stripped
| atf_iv_clean | DOUBLE | At-the-forward IV with scheduled events removed Clean |
| atf_iv_clean_se | DOUBLE | Standard error of the removal; empty where it cannot be vouched for Clean |
| event_dates | DATE[] | 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
| symbol | VARCHAR | |
| event_type | VARCHAR | earnings, fomc, cpi or nfp |
| event_date | DATE | |
| data_date | DATE | The session |
| sessions_to_event | INTEGER | Trading 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_pct | DOUBLE | Average move priced, %; null where none is measurable |
| implied_move_se | DOUBLE | Delta-method SE; null with the move |
| atm_vol | DOUBLE | 30-day at-the-money IV at that point |
event_outcomes: one row per event
| symbol | VARCHAR | |
| event_type | VARCHAR | |
| event_date | DATE | |
| timing | VARCHAR | BMO, AMC or INTRADAY (FOMC) |
| implied_move_pct | DOUBLE | As priced at the last close before the announcement |
| implied_move_se | DOUBLE | |
| actual_return | DOUBLE | Realized move with its sign, close to close, % |
| actual_abs | DOUBLE | Realized absolute move, % |
| actual_overnight | DOUBLE | Overnight portion, % |
| actual_intraday | DOUBLE | Intraday portion, % |
| iv_before | DOUBLE | 30-day ATM vol before |
| iv_after | DOUBLE | 30-day ATM vol after |
| crush_pct | DOUBLE | Drop from before to after, % of before |
| straddle_pnl | DOUBLE | Realized 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_date | DATE | |
| snapshot_time | VARCHAR | |
| symbol | VARCHAR | |
| expiration | DATE | |
| strike | DOUBLE | |
| put_call | VARCHAR | |
| volume | INTEGER | Gated |
| open_interest | INTEGER | End of day only Gated |
symbol_daily_aggregates: per symbol, per session
| data_date | DATE | |
| symbol | VARCHAR | |
| total_volume | BIGINT | Official EOD count Gated |
| call_volume | BIGINT | Gated |
| put_volume | BIGINT | Gated |
| total_oi | BIGINT | Prior close Gated |
| call_oi | BIGINT | Gated |
| put_oi | BIGINT | Gated |
| pc_vol_ratio | DOUBLE | Put over call Gated |
| pc_oi_ratio | DOUBLE | Put 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.
| Column | Type | Meaning |
|---|
| data_date | DATE | Session date |
| symbol | STRING | Option root |
| expiration | DATE | Listed expiry |
| strike | DOUBLE | Contract strike |
| put_call | STRING | Call or put |
| open_interest | INTEGER | Prior-close OI |
| volume_tape | INTEGER | Final cumulative tape volume |
| volume_official | INTEGER | Official end-of-day volume |