Lehman 2008 Collapse: Di Full Tape, Replayed
Septemba fifteen, 2008: Lehman file and SPY close on di low. Di eighteen-month death spiral, di whipsaw week, and how far di 2008 crash run, panel by panel.
For September 15, 2008 morning, Lehman Brothers file di biggest bankruptcy wey US don ever see, and di S&P 500 open into am. Dis page dey replay di whole event from stored market data: wetin bring di firm down, di eighteen-month death spiral of Lehman own stock, di minute tape of di Monday itself, di whipsaw week wey follow, and how far di 2008 crash finally run. Every number na stored query over di tape; expand any panel for di SQL.
Wetin bring Lehman down
Lehman na one securities firm wey don dey for 158 years, and e be the fourth biggest US investment bank when e collapse, and the way e fall no get any kain mystery. Through the middle of the 2000s housing boom, dem pack their balance sheet full of mortgage-linked assets — subprime and Alt-A loans, commercial real estate, and the securitized bundles dem take build from all of dem — while dem dey run leverage of something like thirty dollars of assets for every one dollar of shareholder equity. Wetin dat ratio mean na say, if asset values drop small-small, the equity go clean disappear. When US house prices start to fall for 2006 and 2007, the market value of all those holdings drop, write-downs keep dey rise quarter after quarter, and trading counterparties dey demand more and more collateral before dem go agree to still face the firm.
The final part compress enter just ten days. The talk-talk to sell part of the company to the state-owned Korea Development Bank end without deal for early September. One multi-billion-dollar third-quarter loss dem announce ahead of time on September 10. Over the final weekend, Bank of America buy Merrill Lynch instead; Barclays no fit get the UK regulatory sign-off dem need before Monday market open; and the US government — wey don backstop the Bear Stearns rescue for March — refuse to guarantee Lehman book. With no buyers again and collateral don finish, the firm file for Chapter 11 for the early hours of Monday, September 15, holding something like $600 billion in assets.
Eighteen months to zero: Lehman's own tape
The filing no be surprise for the stock market. Lehman's own ticker don dey die for everybody eye for one year and six months, and the monthly closes still dey show the whole way wey e fall:
The exact SQL behind every number
WITH monthly AS (
SELECT
formatDateTime(month_start, '%Y-%m') AS month,
round(argMax(day_close, et_date), 2) AS month_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York'))) AS month_start,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS day_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'LEH'
AND window_start >= toDateTime('2007-01-01 00:00:00') AND window_start < toDateTime('2008-09-18 00:00:00')
GROUP BY et_date, month_start
)
GROUP BY month_start
)
SELECT
month,
month_close,
round((month_close / max(month_close) OVER () - 1) * 100, 1) AS vs_best_month_close_pct
FROM monthly
ORDER BY monthThe best month-end close for the whole time na the first row: $82.17 for 2007-01. By 2008-03 — the same month wey Bear Stearns fail and dem carry am come rescue — LEH close at $37.48, -54.4% below that peak. August 2008 end at $15.85. Then the last row: $0.14, -99.8% from the top — the last level wey the warehouse get before the ticker go dark on September 17. One big financial stock no go just jump from $80s reach pennies inside one weekend; the bankruptcy na the final step of one decline wey the tape don re-price month after month.
Di day, for one row
Here na di filing day itself, squeeze to one receipt row — every claim wey follow dey read from am:
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('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-15 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('2008-09-15 04:00:00') AND window_start < toDateTime('2008-09-15 23:59:00')From Friday $125.75 close, SPY open at $121.81 — one -3.1% gap down, severe but e never reach panic level. Di panic take all day to show: di low of $120.14 print at 15:59 ET — di final minute of di session. SPY close at $120.34, -4.3% for di day, on 465.5 million shares. One crash wey close on im exact low na one specific and bad shape: no dip-buyers step in front of di bell.
How the session take shape
Half-hour buckets show where inside the day the damage really happen:
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('2008-09-15 04:00:00') AND window_start < toDateTime('2008-09-15 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_timeMorning actually stabilize, e dey drift near $123.88 through late morning. Afternoon buckets tell the real story: midday bounce stall for $123.13 inside the 12:30 bucket, and from 14:00 go down every half-hour close below the one wey come before — $122.4, $121.78, $120.81, $120.34 at the final print. Na so one systemic-fear session go look inside buckets — no be one waterfall, na market wey keep dey ask the same question and e dey get worse answer.
Di week wey nobody fit remember well
Memory dey talk say Lehman week na straight collapse. But di tape no gree:
The exact SQL behind every number
SELECT
toString(et_date) AS session,
close_usd,
round(if(prev_close = 0, NULL, (close_usd / prev_close - 1) * 100), 1) AS change_pct,
shares_m,
tbill_3m_pct,
y10_pct
FROM (
SELECT et_date, close_usd, shares_m,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
round(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959), 2) AS close_usd,
round(toFloat64(sum(volume)) / 1e6, 1) AS shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-19 23:59:00')
GROUP BY et_date
)
) s
LEFT JOIN (
SELECT date, round(toFloat64(yield_3_month), 2) AS tbill_3m_pct, round(toFloat64(yield_10_year), 2) AS y10_pct
FROM global_markets.treasury_yields
WHERE date BETWEEN '2008-09-15' AND '2008-09-19'
) t ON s.et_date = t.date
WHERE et_date >= toDate('2008-09-15') AND et_date <= toDate('2008-09-19')
ORDER BY et_dateTuesday close for 1.3%, Wednesday drop -4.6% (di money-market and AIG stress day), den Thursday and Friday rally — 3.7% and 3.7% — end di week for $125.04, near where e start, afta di first announcement of wetin later become TARP program.
Di panel yield columns carry wetin di money market do di same week. Di 3-month Treasury bill — di closest tradable tin to cash — yield 1.02% on Monday and 0.03% on Wednesday, September 17: investors dey accept near-zero return for three months in exchange for certainty of repayment, di day afta di oldest US money-market fund "break di buck" on im Lehman paper. Di 10-year yield hardly move at all, 3.47% to 3.78% across di week — di panic na about di next ninety days, not di next decade. Stocks end di week nearly flat; di bill market end am in outright flight. Di true equity collapse come later — September 29, di day di first TARP vote fail for House, dey rank 6th among every SPY session for dis warehouse, dey show for di ranking table below — and di overnight gap carry di first shock while di sessions after carry di verdict.
Di oda dominoes
Lehman no fall alone. Di closes for dat same week re-price every institution wey hold similar assets, name by name:
The exact SQL behind every number
WITH daily AS (
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AIG', 'MS', 'GS', 'WM', 'C', 'SPY')
AND window_start >= toDateTime('2008-09-12 00:00:00') AND window_start < toDateTime('2008-09-20 00:00:00')
GROUP BY ticker, et_date
)
SELECT
ticker,
round(maxIf(close_usd, et_date = toDate('2008-09-12')), 2) AS fri_close,
round(maxIf(close_usd, et_date = toDate('2008-09-15')), 2) AS mon_close,
round((maxIf(close_usd, et_date = toDate('2008-09-15')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS mon_pct,
round(minIf(close_usd, et_date >= toDate('2008-09-15')), 2) AS week_low_close,
round((minIf(close_usd, et_date >= toDate('2008-09-15')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS low_close_vs_fri_pct,
round(maxIf(close_usd, et_date = toDate('2008-09-19')), 2) AS fri19_close,
round((maxIf(close_usd, et_date = toDate('2008-09-19')) / maxIf(close_usd, et_date = toDate('2008-09-12')) - 1) * 100, 1) AS week_pct
FROM daily
GROUP BY ticker
ORDER BY low_close_vs_fri_pct ASCAIG, wey dey carry insurance-firm size book of credit protection wey dem write on top di same mortgage securities, fall -58.3% for Monday alone — $12.2 to $5.09** — and close as low as $2.06, -83.1% below Friday, before di Federal Reserve extend emergency credit line for dem on Tuesday night. Morgan Stanley lowest close for di week sit -43% below Friday and Goldman Sachs own na -30.1% — di last two independent investment banks wey dey trade like say na dem be di next for di queue. Washington Mutual, di country biggest thrift, don already enter di week at $2.76 and regulators seize am ten days later (for September 2008 di symbol WM belong to the thrift; e dey trade Waste Management today). Den Friday: after SEC ban short sales for hundreds of financial names before di open, WM end di week up 34.8%, Citigroup up 12.8%, while SPY finish -0.6% below im prior Friday close. One week wey cut three of di six names by thirty percent or more for dia lows end with two of dem green — policy whipsaw, printed on top di tape.
Where Lehman Monday dey rank for real
If you ask person make dem name the worst market day of the crisis, most people go point to the day wey Lehman file. But the ranking table no gree:
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2003-09-10 00:00:00') AND window_start < toDateTime('2026-01-01 00:00:00')
GROUP BY et_date
),
changes AS (
SELECT et_date, close_usd,
lagInFrame(close_usd) OVER (ORDER BY et_date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close
FROM daily
),
ranked AS (
SELECT
row_number() OVER (ORDER BY (close_usd / prev_close - 1) ASC, et_date ASC) AS rank,
toString(et_date) AS session,
round((close_usd / prev_close - 1) * 100, 1) AS change_pct
FROM changes
WHERE prev_close > 0 AND isFinite(close_usd / prev_close)
),
(SELECT any(rank) FROM ranked WHERE session = '2008-09-29') AS tarp_rank_s,
(SELECT countIf(rank <= 10 AND session BETWEEN '2008-09-16' AND '2008-12-31') FROM ranked) AS post_lehman_s
SELECT
session,
rank,
change_pct,
tarp_rank_s AS tarp_vote_rank,
post_lehman_s AS post_lehman_2008_top10
FROM ranked
WHERE rank <= 10 OR session = '2008-09-15'
ORDER BY rankLehman Monday dey rank 34th among every SPY session from late 2003 go reach the end of 2025, at -4.3%. The top one belong to the COVID crash — -11.6% for 2020-03-16 na the single worst one — and e still belong to the autumn of 2008 itself: 6 of the ten worst sessions land between late September and the start of December 2008, every single one of dem after the filing. The TARP-vote failure for 2008-09-29 dey at rank 6, -7%. One famous crash no dey inside by design: Black Monday 1987 pass before this warehouse own minute data, wey start for 2003, so e no fit show for the table. The pattern wey data show sharp well-well: the day the news break no be the day the tape break — na the weeks after the filing take reprice the whole system.
How big di whole crash be?
How big di whole 2008 crash be, and how long e take for things to come back? One receipt row dey answer both:
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2007-01-01 00:00:00') AND window_start < toDateTime('2014-01-01 00:00:00')
GROUP BY et_date
),
(SELECT argMax(et_date, (close_usd, et_date)) FROM daily WHERE et_date < toDate('2008-09-15')) AS peak_d,
(SELECT argMin(et_date, (close_usd, et_date)) FROM daily WHERE et_date < toDate('2010-01-01')) AS trough_d,
(SELECT max(close_usd) FROM daily WHERE et_date = toDate('2008-09-12')) AS lehman_eve_close,
(SELECT min(et_date) FROM daily WHERE et_date > toDate('2008-09-15') AND close_usd >= lehman_eve_close) AS reclaim_d
SELECT
toString(peak_d) AS peak_date,
round(maxIf(close_usd, et_date = peak_d), 2) AS peak_close,
toString(trough_d) AS trough_date,
round(maxIf(close_usd, et_date = trough_d), 2) AS trough_close,
round((maxIf(close_usd, et_date = trough_d) / maxIf(close_usd, et_date = peak_d) - 1) * 100, 1) AS peak_to_trough_pct,
countIf(et_date > peak_d AND et_date <= trough_d) AS sessions_peak_to_trough,
round(maxIf(close_usd, et_date = toDate('2008-09-15')), 2) AS lehman_monday_close,
round((maxIf(close_usd, et_date = toDate('2008-09-15')) / maxIf(close_usd, et_date = peak_d) - 1) * 100, 1) AS peak_to_lehman_pct,
round((maxIf(close_usd, et_date = trough_d) / maxIf(close_usd, et_date = toDate('2008-09-15')) - 1) * 100, 1) AS trough_vs_lehman_pct,
toString(reclaim_d) AS lehman_eve_reclaim_date,
countIf(et_date > toDate('2008-09-15') AND et_date < reclaim_d) AS sessions_until_reclaim
FROM dailyFrom im pre-crisis peak close of $156.41 on 2007-10-09, SPY fall reach $68.07 on 2009-03-09 — -56.5% across 355 trading sessions. Lehman Monday dey middle of that slope, no be for im edge: by that close SPY stand -23.1% below di peak, and di trough print another -43.4% below di Lehman-Monday close, five months and three weeks later — di March 2009 bottom carry that day's full tape. Di road back run pass di fall: SPY no close above im pre-Lehman Friday level again until 2010-12-22, with 572 trading sessions in between. Dis na price returns; dem pay dividends along di way, so di real recovery short small.
Data notes
- Official closes na ET-regular-session closes — di last minute-bar close inside di 9:30-16:00 ET window, on di ET clock. If you no filter am, di last print go catch after-hours trades.
- WM identity na window-specific. For September 2008 di symbol WM dey trade Washington Mutual (single-digit dollars for di tape); di symbol belong to Waste Management today. Dem no attribute any post-2008 data to di thrift.
- LEH tape stop September 17, 2008 — di last prints dem store before dem comot di listing, na why di dominoes panel exclude am.
- SPY na di measuring stick. ETF closes differ small from S&P 500 index closes; ranks and percentages here na SPY own.
- Di worst-days ranking don pin to 2003 through 2025, so dis historical page no go drift as new sessions show.
- Treasury yields na di stored daily par-yield marks; price returns throughout exclude dividends.
Lehman crash FAQ
How much the market fall when Lehman collapse?
On the filing day — September 15, 2008 — SPY close -4.3% down, finish on im exact low for that session. The full bear market measure -56.5% from the October 2007 peak close reach the March 2009 trough close.
Wetin cause Lehman Brothers to collapse?
Concentrated mortgage exposure wey dem carry on roughly thirty-to-one leverage, write-downs wey chop the firm equity throughout 2008, and one final ten days wia every exit close: the Korea Development Bank talk end, Barclays no fit get regulatory sign-off sharp sharp, and the US government decline backstop. With no buyer and no guarantee, Lehman file Chapter 11 on September 15, 2008.
Did the market crash immediately when market open?
E gap -3.1% down when market open, then e hold surprisingly stable throughout the morning. The selling accelerate for afternoon and e never stop — the day low print for the last minute of trading.
Was Lehman the bottom of the 2008 crash?
Not at all. SPY fall for another five-plus months; the bottom print on 2009-03-09 at $68.07 — -43.4% below the Lehman-Monday close. The March 2009 bottom hold that day tape.
How 2008 crash take compare with COVID crash of 2020?
2020 faster; 2008 go deeper and e last far longer. March 2020 own the single worst SPY session inside this data (-11.6% on 2020-03-16), but the 2008 decline run 355 trading sessions from peak reach trough — about seventeen months — versus matter of weeks inside March 2020.
Every panel wey dey up there na one stored, versioned query over the historical tape — expand the SQL make you see each measurement. You wan feel this day instead of reading am? E dey among the playable scenarios inside the Strasmore Labs trading simulator.