{"slug":"where-to-get-historical-implied-volatility-data","qid":"iv_by_dte","label":"One name, one month: implied volatility by time to expiry (AAPL, June 2026)","post_title":"Where to Get Historical Implied Volatility Data","post_url":"/blog/where-to-get-historical-implied-volatility-data#q-iv_by_dte","columns":["dte_band","iv_p25_pct","iv_median_pct","iv_p75_pct","contract_day_count"],"rows":[{"dte_band":"01-07d","iv_p25_pct":24.9,"iv_median_pct":29.6,"iv_p75_pct":35.8,"contract_day_count":1376},{"dte_band":"08-21d","iv_p25_pct":22.8,"iv_median_pct":25.8,"iv_p75_pct":28.6,"contract_day_count":1773},{"dte_band":"22-45d","iv_p25_pct":22.7,"iv_median_pct":24.6,"iv_p75_pct":27,"contract_day_count":909},{"dte_band":"46-90d","iv_p25_pct":25,"iv_median_pct":26.2,"iv_p75_pct":27.7,"contract_day_count":426},{"dte_band":"91-180d","iv_p25_pct":25.6,"iv_median_pct":26.7,"iv_p75_pct":27.8,"contract_day_count":757},{"dte_band":"181d+","iv_p25_pct":27,"iv_median_pct":28.1,"iv_p75_pct":29,"contract_day_count":1459}],"shape":"table","sql":"SELECT\n    dte_band,\n    round(100 * quantileDeterministic(0.25)(iv, contract_hash), 1) AS iv_p25_pct,\n    round(100 * quantileDeterministic(0.50)(iv, contract_hash), 1) AS iv_median_pct,\n    round(100 * quantileDeterministic(0.75)(iv, contract_hash), 1) AS iv_p75_pct,\n    count()                                                        AS contract_day_count\nFROM\n(\n    SELECT\n        multiIf(days_to_expiry <=   7, '01-07d',\n                days_to_expiry <=  21, '08-21d',\n                days_to_expiry <=  45, '22-45d',\n                days_to_expiry <=  90, '46-90d',\n                days_to_expiry <= 180, '91-180d',\n                                       '181d+')  AS dte_band,\n        toFloat64(implied_volatility)             AS iv,\n        cityHash64(ticker)                        AS contract_hash,\n        days_to_expiry                            AS dte\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'AAPL'\n      AND date >= '2026-06-01'\n      AND date <  '2026-07-01'\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry > 0\n      AND underlying_close > 0\n      AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05\n)\nGROUP BY dte_band\nORDER BY min(dte)","computed_at":"2026-08-15T16:05:46.497909+00:00","elapsed":0.003143419}