The 2010 Flash Crash, Minute by Minute
May 6, 2010: about a trillion dollars of market value vanished and mostly returned inside 36 minutes. The minute tape of the flash crash, receipted.
On May 6, 2010, the US stock market fell roughly nine percent in minutes and recovered most of it almost as fast — the Flash Crash, the strangest half hour in modern market-structure history. It remains the canonical demonstration of what happens when liquidity — not value — disappears. The minute tape preserves all of it. Every number is a stored query; expand any panel for the SQL.
The day, on one row
The exact SQL behind every number
WITH
(
SELECT argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-05 00:00:00') AND window_start < toDateTime('2010-05-06 04:00:00')
) AS prior_rth_close
SELECT
round(prior_rth_close, 2) AS prior_close,
round(toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_open,
round((toFloat64(argMinIf(open, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS gap_pct,
round(minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_low,
formatDateTime(toTimeZone(argMinIf(window_start, (toFloat64(low), toInt64(toUnixTimestamp(window_start))), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 'America/New_York'), '%H:%i') AS low_et,
round(maxIf(toFloat64(high), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS rth_high,
round(toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)), 2) AS rth_close,
round((toFloat64(argMaxIf(close, window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)) / prior_rth_close - 1) * 100, 1) AS day_change_pct,
round((minIf(toFloat64(low), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / prior_rth_close - 1) * 100, 1) AS low_vs_prior_pct,
round(toFloat64(sum(volume)) / 1e6, 1) AS day_shares_m,
countIf((toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS rth_minute_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')The day was already nervous — a Greek-debt headline tape all morning — and SPY drifted lower from its $116.26 open. Then, in the mid-afternoon, the floor vanished: the day's low of $105 printed at 14:45 ET, -10.1% below the prior close. By the bell SPY had clawed back to $112.88 — -3.4% on the day, an enormous fall by any standard, and yet far above the bottom of the air pocket. Volume: 639.9 million shares, one of the heaviest SPY sessions of its era.
Thirty-six minutes, half-hour by half-hour
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(window_start, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(toFloat64(argMax(close, window_start)), 2) AS bucket_close,
round(min(toFloat64(low)), 2) AS bucket_low,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 04:00:00') AND window_start < toDateTime('2010-05-06 23:59:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY et_time
ORDER BY et_timeThe 14:30 bucket carries the crash: its low of $105 sits far below its close of $111.79 — the market went down and came back inside a single half-hour bucket. During those minutes, quotes in individual stocks went absurd: household names printed at a penny and at $100,000 as market-maker placeholder quotes ("stub quotes") became the only bids and offers left. Those prints were later canceled by the exchanges; the index tape above survived as the honest record.
Where the selling was sharpest
The exact SQL behind every number
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
round(toFloat64(open), 2) AS minute_open,
round(toFloat64(low), 2) AS minute_low,
round(toFloat64(open) - toFloat64(low), 2) AS drop_within_minute_usd,
round(toFloat64(volume) / 1e6, 2) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2010-05-06 18:00:00') AND window_start < toDateTime('2010-05-06 19:30:00')
ORDER BY drop_within_minute_usd DESC
LIMIT 5The single worst minute dropped $5.72 from its open to its low — at 14:49 ET, on 4.98 million shares in sixty seconds. The regulatory post-mortem attributed the cascade to a large automated sell program interacting with fleeing high-frequency liquidity; what the tape itself shows is simpler and more durable: prices need standing buyers, and for half an hour there weren't any. This is the strongest argument ever recorded for understanding what a market order does — every stop-loss that triggered in that window became a market order hunting for bids that did not exist. The NBBO is a market's heartbeat, and that afternoon it flatlined.
What it felt like at the retail screen
For anyone watching a brokerage screen that afternoon, the numbers stopped making sense: blue-chip stocks flashing prices down eighty and ninety percent, ETFs quoted at pennies, then everything snapping back before a coffee cooled. Orders placed into the chaos filled at those absurd prints — the exchanges later canceled trades more than 60% away from pre-crash prices, an arbitrary line that made whole only the most extreme victims. Anyone whose stop-loss sold at 30% below value kept their fill. That asymmetry — canceled at 61%, honored at 59% — did more to teach retail traders about order types than any pamphlet ever printed.
What changed afterward
The flash crash produced the modern circuit-breaker regime: single-stock Limit Up/Limit Down bands and revised market-wide halts, machinery visible in later crises (March 2020's halts are its direct descendants). Stub quotes were banned; clearly-erroneous-trade rules were formalized. The market structure you trade today was substantially drafted in the aftermath of those thirty-six minutes.
Flash crash FAQ
What caused the 2010 flash crash?
The official SEC/CFTC report described a large automated E-mini sell program executing into thin liquidity, with high-frequency intermediaries first amplifying volume and then withdrawing. The tape's version: liquidity evaporated, and prices fell to wherever the next resting bid happened to be — sometimes a penny.
How far did the market fall in the flash crash?
SPY's low printed -10.1% below the prior close at 14:45 ET, and the index recovered most of that within the following half hour, closing -3.4% down.
Could a flash crash happen again?
Smaller versions have — individual symbols hit LULD halts routinely, and mini flash events recur. The 2010-scale market-wide version has so far been contained by the halt machinery it inspired. The honest answer is that the structural ingredient — liquidity that can withdraw in milliseconds — is permanent.
Every panel above is a stored, versioned query over the historical tape — expand the SQL to see each measurement. Want to feel this day instead of reading it? It is one of the playable scenarios in the Strasmore Labs trading simulator.