Obscura

Cboe Indices

Daily history of Cboe's volatility indices, including VIX, sourced directly from Cboe.

cboe_indices — the dataset name to pass to the Obscura API.

Category Markets Columns 6 Refresh Every weekday Entity key symbol Point-in-time available_date

What one row means

One trading day's index level for one CBOE-published index symbol: full OHLC (open/high/low/close) for indices CBOE publishes as a 4-column series (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX), or a single published value stored in `close` for indices CBOE publishes as a single daily figure (VVIX, SKEW).

One row per (symbol, available_date).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For cboe_indices: published: available_date is the trading day itself, parsed from the CSV's DATE column; CBOE appends each day's settle to the full-history CSV shortly after the ~4:00-4:15pm ET close and the collector's cron waits until 6:30pm ET to pull it, so the trading day and its public-availability day are the same day by construction.

Refresh cadence

Obscura refreshes cboe_indices every weekday — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 6 columns

The full public column list for cboe_indices, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/cboe_indices.

ColumnTypeDescription
symboltext · not nullCBOE index ticker (VIX, VIX9D, VIX3M, VIX6M, VVIX, SKEW, VXN, RVX per schedules/prod/cboe.yaml's `symbols` kwarg); also the {SYMBOL} slug in the source URL cdn.cboe.com/api/global/us_indices/daily_prices/{SYMBOL}_History.csv. Part of the composite primary key with available_date.
available_datedate · not nullThe trading day this index level belongs to, parsed from the CSV's leading DATE column (parse_date() tries MM/DD/YYYY then YYYY-MM-DD). Doubles as the public-availability date: the collector runs post-close same day, so the trading day and the day the value first became public are identical, so no separate event_date column exists on this table. Composite primary key with symbol; the upsert conflict target.
opendouble precisionIndex opening level for the trading day, from the CSV's OPEN column. NULL for single-value indices (VVIX, SKEW), which CBOE publishes with only one daily figure — parse_index_csv detects this by header width (<5 columns) and leaves open/high/low unset, storing the lone value in close.
highdouble precisionIntraday high index level for the trading day, from the CSV's HIGH column. NULL for single-value indices (VVIX, SKEW) for the same reason as open.
lowdouble precisionIntraday low index level for the trading day, from the CSV's LOW column. NULL for single-value indices (VVIX, SKEW) for the same reason as open.
closedouble precisionClosing index level for the trading day for OHLC indices (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX). For single-value indices (VVIX, SKEW), this is instead the single daily figure CBOE publishes for that index — the only populated measure column on those rows.

Access cboe_indices

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="cboe_indices",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the cboe_indices dataset?

Daily history of Cboe's volatility indices, including VIX, sourced directly from Cboe. One trading day's index level for one CBOE-published index symbol: full OHLC (open/high/low/close) for indices CBOE publishes as a 4-column series (VIX, VIX9D, VIX3M, VIX6M, VXN, RVX), or a single published value stored in `close` for indices CBOE publishes as a single daily figure (VVIX, SKEW).

How do I avoid look-ahead bias with cboe_indices?

Filter on cboe_indices.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date is the trading day itself, parsed from the CSV's DATE column; CBOE appends each day's settle to the full-history CSV shortly after the ~4:00-4:15pm ET close and the collector's cron waits until 6:30pm ET to pull it, so the trading day and its public-availability day are the same day by construction. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get cboe_indices?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="cboe_indices". The column schema is public at https://api.obscura.trade/v1/catalog/cboe_indices.

Can I filter cboe_indices by company or symbol?

Yes. cboe_indices carries symbol, the column the API's symbols filter resolves against.

How often is cboe_indices updated?

Obscura refreshes cboe_indices on a every weekday schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Crypto MarketsPer-coin market data from CoinGecko: price, market cap and volume across thousands of cryptocurrencies. DeFiLlama ProtocolsTotal value locked in each DeFi protocol, tracked by DeFiLlama. DeFiLlama StablecoinsCirculating supply of each stablecoin over time, from DeFiLlama. DeFiLlama TVLTotal value locked on each blockchain, from DeFiLlama. Flow MetricsTrade-flow metrics per symbol in fixed time windows: taker (aggressor) buy versus sell volume and trade counts, broken o… Forex OrderbookOANDA's order book and position book by currency pair: where retail traders' open orders and positions sit relative to p… Forex PositionsRetail forex positioning by pair (share of traders long versus short), collected from several broker sentiment feeds. Forex Positions AggregateA consensus long/short reading per currency pair, blending the individual broker sentiment feeds.