IV Crush: How to Track and Profit from Earnings Volatility Collapse
IV crush is the sharp drop in implied volatility after an earnings announcement. Learn how it works, see real examples with data, and build an IV crush tracker in Python using the FlashAlpha API.
What Is IV Crush
Implied volatility reflects the market's expectation of future price movement. Before an earnings announcement, that uncertainty is at its peak — nobody knows the numbers, nobody knows guidance, and the stock could gap in either direction. Options market makers price this uncertainty in by inflating IV.
The moment the earnings call ends, that uncertainty is resolved. Even if the numbers are surprising, the unknown has become known. IV drops sharply — often 20-60% in a single session. This mechanical, repeatable phenomenon is IV crush.
It's not a theory or an edge case. It happens on virtually every earnings announcement, every quarter. The magnitude varies, but the direction doesn't — IV goes up into earnings, IV comes down after. If you're trading options around earnings and you don't account for this, you're flying blind.
IV crush means you can be right on direction and still lose money on a long options position. The stock moves 3% in your favor, but IV drops 40%, and your option is worth less than you paid for it. Understanding this is the difference between profitable and losing earnings trades.
Visualizing IV Crush — Real Example
Pull historical volatility data around an earnings date to see the spike-and-collapse pattern. Here's how to visualize it using the Volatility Analysis endpoint:
from flashalpha import FlashAlphaClient
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime, timedelta
import numpy as np
client = FlashAlphaClient(api_key="your_api_key")
# Pull current vol data for NVDA
vol = client.get_volatility("NVDA")
print(f"NVDA ATM IV: {vol['atm_iv']}%")
print(f"NVDA RV (20d): {vol['realized_vol']['rv_20d']}%")
print(f"IV-RV Spread: {vol['iv_rv_spreads']['vrp_20d']}%")
print(f"Assessment: {vol['iv_rv_spreads']['assessment']}")
print(f"\nTerm Structure: {vol['term_structure']['state']}")
# Check skew for nearest expiry
if vol.get("skew_profiles"):
nearest = vol["skew_profiles"][0]
print(f"\nNearest Expiry Skew:")
print(f" 25d Risk Reversal: {nearest.get('rr_25d', 'N/A')}")
print(f" Smile Ratio: {nearest.get('smile_ratio', 'N/A')}")
Before earnings, you'll typically see ATM IV significantly elevated above realized vol — the VRP widens as the market prices in the earnings event. After earnings, ATM IV collapses back toward realized vol levels.
The pattern is consistent: a gradual ramp in the 2-3 weeks before earnings, a sharp spike in the final 2-3 days, and then an overnight collapse of 30-50%.
How Much Does IV Typically Drop After Earnings?
The magnitude of IV crush varies by sector and individual stock volatility profile:
| Sector | Typical IV Drop | Examples |
|---|---|---|
| Mega-cap tech | 30-50% | AAPL, MSFT, GOOGL, AMZN |
| High-beta tech | 35-55% | TSLA, NVDA, AMD, NFLX |
| Biotech | 40-70% | MRNA, BIIB, REGN |
| Financials | 20-35% | JPM, GS, BAC, WFC |
| Consumer staples | 15-30% | COST, WMT, PG, KO |
| Utilities | 15-25% | NEE, DUK, SO |
Biotech names see the largest crush because binary outcomes (FDA approvals, trial results) create extreme pre-event uncertainty. Utilities see the smallest because their earnings are predictable and low-vol by nature.
These are averages — individual stocks vary quarter to quarter. The only way to know the actual IV premium going into a specific earnings event is to measure it. That's what the tracker below does.
Build an IV Crush Tracker
This script identifies which stocks have the highest IV premium going into earnings — the ones most likely to experience significant crush:
from flashalpha import FlashAlphaClient
import pandas as pd
client = FlashAlphaClient(api_key="your_api_key")
# Stocks with upcoming earnings (manually maintained or from external source)
earnings_watchlist = [
"NVDA", "TSLA", "AAPL", "MSFT", "AMZN", "GOOGL", "META", "NFLX",
"AMD", "CRM", "ORCL", "MU", "AVGO", "COIN", "PLTR", "NKE",
"JPM", "GS", "BAC", "UNH", "JNJ", "LLY", "PFE", "COST"
]
results = []
for ticker in earnings_watchlist:
try:
vol = client.get_volatility(ticker)
rv_20 = vol["realized_vol"]["rv_20d"]
atm = vol["atm_iv"]
vrp = vol["iv_rv_spreads"]["vrp_20d"]
# IV premium ratio: how much IV exceeds RV
iv_premium_pct = ((atm - rv_20) / rv_20 * 100) if rv_20 > 0 else 0
results.append({
"ticker": ticker,
"atm_iv": atm,
"rv_20d": rv_20,
"vrp": vrp,
"iv_premium_%": round(iv_premium_pct, 1),
"assessment": vol["iv_rv_spreads"]["assessment"],
"term_state": vol.get("term_structure", {}).get("state", "unknown")
})
except Exception:
continue
df = pd.DataFrame(results)
df = df.sort_values("iv_premium_%", ascending=False)
print("\n=== Earnings IV Crush Candidates ===")
print("Sorted by IV premium over realized vol\n")
print(df.head(15).to_string(index=False))
Sample output:
=== Earnings IV Crush Candidates ===
Sorted by IV premium over realized vol
ticker atm_iv rv_20d vrp iv_premium_% assessment term_state
COIN 48.70 31.20 7.50 56.1 moderate_premium backwardation
TSLA 52.30 35.80 6.50 46.1 moderate_premium backwardation
PLTR 45.20 31.40 6.30 43.9 moderate_premium backwardation
MU 34.50 24.80 4.70 39.1 fair_premium contango
AMD 39.50 28.90 4.30 36.7 fair_premium backwardation
NFLX 32.40 24.10 4.50 34.4 fair_premium contango
NVDA 42.80 32.60 3.70 31.3 fair_premium backwardation
COIN 30.50 23.50 4.70 29.8 fair_premium contango
NKE 31.80 25.20 5.40 26.2 fair_premium contango
The iv_premium_% column shows how much IV exceeds realized vol as a percentage. COIN at 56% means IV is pricing in 56% more movement than the stock has actually been making. That premium has to go somewhere after earnings — and most of it gets crushed.
Also note the term_state column: backwardation (near-term IV higher than far-term) is the classic earnings setup, confirming that the front expiration is inflated by the event.
Strategies That Exploit IV Crush
Short Straddle / Short Strangle
Sell an ATM straddle or OTM strangle 1-2 days before earnings. You collect premium inflated by the IV spike. If the stock stays within the expected move, you profit from the vol collapse.
This is the most direct IV crush play, but also the highest risk. An ATM straddle has unlimited loss potential in both directions. A strangle gives you a wider breakeven range but still has undefined risk. Position size conservatively — this is not a strategy for overleveraging.
Iron Condor
The defined-risk version: sell an OTM call spread + OTM put spread, creating a range where you profit. Your maximum loss is capped at the spread width minus premium received. The expected move (priced into the straddle) gives you a natural reference for where to set your short strikes.
Iron condors work best when IV crush is large enough that the premium received is meaningful relative to risk. Stocks with 40%+ IV premium are ideal candidates.
Calendar Spread
The purest IV crush play: sell the front-month option (earnings expiry) and buy the back-month option at the same strike. Front IV collapses after earnings while back-month IV holds relatively steady. You profit from the IV differential.
Calendars have limited risk (you can't lose more than the debit paid) and directly isolate the crush effect. The tradeoff is that a large gap in the underlying can overwhelm the vol benefit.
The Trap: When IV Crush Isn't Enough
IV crush is not free money. The expected move is priced in for a reason. If TSLA's straddle prices in a $15 move and the stock gaps $40, the crush on your short straddle saved you $5 but the directional loss destroyed you by $25.
Earnings surprises that exceed the expected move are not rare — they happen ~30% of the time across the market. When they do, IV crush on a short vol position is a rounding error compared to the directional loss.
Risk management for IV crush strategies:
- Use defined-risk structures (iron condors, credit spreads) unless your account can absorb a 3-sigma gap
- Position size to the worst case, not the expected case — if the spread can lose $500, that's your risk, not the "expected" $50 profit
- Diversify across multiple earnings — don't put 20% of your account on a single TSLA earnings straddle
- Know the stock — some names (TSLA, COIN) gap through expected moves regularly; others (AAPL, MSFT) rarely do
Track IV Crush with FlashAlpha
The Volatility Analysis endpoint gives you everything needed to assess IV crush risk:
- ATM IV vs realized vol — the premium you're selling
- Term structure state — backwardation confirms event premium in front expirations
- Skew profiles — how the crush affects different strikes differently
- VRP assessment — whether the premium is historically rich, fair, or cheap
Monitor Earnings IV in Real-Time
Know when premium is rich, when it's fair, and when to stay away.
Get API Key → Try the PlaygroundRelated Reading
- Implied Volatility API — pull real-time per-strike IV data
- IV Rank Scanner — find the highest IV stocks daily
- IV Rank vs IV Percentile — context for IV levels
- Volatility Surface API — see how crush reshapes the entire surface