The 2011 US Downgrade: Black Monday's Tape
August 8, 2011: the first trading day after S&P stripped the US of its AAA rating. The tape fell all day and closed near the low, with the receipts inside.
After the close on Friday, August 5, 2011, Standard & Poor's downgraded the United States' credit rating from AAA to AA+, the first US credit downgrade in history. Monday, August 8 was the market's first chance to vote on it, at the peak of that summer's European debt crisis. This page replays the vote from the minute tape: what fell, what rose, where the day ranks, and how long the damage took to heal. Every number is a stored query; expand any panel for the SQL.
Why S&P downgraded the US
The downgrade was the final act of the 2011 debt-ceiling standoff. The debt ceiling is a statutory cap on total federal borrowing; once the government hits it, the Treasury cannot issue new debt to pay for spending Congress has already approved. The US reached the $14.3 trillion limit on May 16, 2011, and the Treasury began "extraordinary measures", accounting maneuvers that bought time until August 2, its projected date for running out of cash. Congress passed the Budget Control Act, and the President signed it, on August 2 itself: default avoided with hours to spare.
Three days later, after Friday's close, S&P cut the rating anyway. Its statement made two arguments. First, the process: months of brinkmanship over whether the US would voluntarily miss payments had, in S&P's words, made American policymaking "less stable, less effective, and less predictable." Second, the arithmetic: the act's roughly $2.1 trillion in projected ten-year savings fell short of what S&P judged necessary to stabilize the government's debt trajectory. The Treasury Department publicly disputed the math, identifying a $2 trillion difference in assumptions; S&P revised the figures and kept the new rating. Moody's and Fitch, the other two major agencies, affirmed their AAA ratings that summer, so Monday's open was the market grading one agency's judgment.
The day, on one row
| prior_close | rth_open | gap_pct | rth_low | low_et | rth_high | rth_close | day_change_pct | low_vs_prior_pct | day_shares_m | rth_minute_bars |
|---|---|---|---|---|---|---|---|---|---|---|
| 120.03 | 116.91 | -2.6 | 112.02 | 14:25 | 118.35 | 112.28 | -6.5 | -6.7 | 695.2 | 390 |
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('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-08 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('2011-08-08 04:00:00') AND window_start < toDateTime('2011-08-08 23:59:00')SPY gapped -2.6% down from Friday's $120.03 close and never mounted a real recovery: the low of $112.02 came at 14:25 ET and the close, at $112.28, was -6.5%, among the worst single sessions between the 2008 crisis and 2020, and the ranking panel below puts a precise number on that claim. Volume ran 695.2 million SPY shares, and all 390 regular-session minute bars printed: a full session, no halt, and still that close.
A staircase, not an air pocket
| et_time | bucket_close | bucket_low | shares_m |
|---|---|---|---|
| 09:30 | 117.56 | 116.74 | 62.5 |
| 10:00 | 115.79 | 115.64 | 50.4 |
| 10:30 | 115.81 | 115.27 | 54.5 |
| 11:00 | 116.4 | 115.53 | 42.5 |
| 11:30 | 116.31 | 115.97 | 26 |
| 12:00 | 115.55 | 115.45 | 21.2 |
| 12:30 | 115.61 | 115.39 | 21.2 |
| 13:00 | 115.5 | 115.02 | 25.2 |
| 13:30 | 114.13 | 114.08 | 39.9 |
| 14:00 | 113.19 | 112.02 | 64.3 |
| 14:30 | 113.19 | 112.9 | 45.4 |
| 15:00 | 114.05 | 113.12 | 62.3 |
| 15:30 | 112.28 | 112.25 | 86.4 |
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('2011-08-08 04:00:00') AND window_start < toDateTime('2011-08-08 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_timeContrast the shape with the flash crash fifteen months earlier: no single-bucket air pocket, no snap-back, just thirteen half-hours in which nearly every close is lower than the last, accelerating into the afternoon. That is a conviction decline: liquidity stayed present and prices still fell, session-long. Different mechanics, different meaning, same red number, one reason reading the intraday shape matters as much as the daily change.
What fell hardest, and what rose
A sovereign downgrade does not hit every ticker equally; the tape sorts names by exposure. Here are nine liquid tickers, Friday's official close to Monday's, worst to best:
| ticker | fri_close_usd | mon_close_usd | change_pct |
|---|---|---|---|
| BAC | 8.15 | 6.52 | -20 |
| C | 33.46 | 28.16 | -15.8 |
| XLF | 13.44 | 12.14 | -9.6 |
| SPY | 120.03 | 112.28 | -6.5 |
| GS | 125.23 | 117.97 | -5.8 |
| XLU | 31.91 | 30.23 | -5.3 |
| KO | 66.77 | 65.24 | -2.3 |
| GLD | 161.8 | 167.12 | 3.3 |
| VXX | 30.36 | 34.79 | 14.6 |
The exact SQL behind every number
SELECT
ticker,
round(fri_close, 2) AS fri_close_usd,
round(mon_close, 2) AS mon_close_usd,
round((mon_close / fri_close - 1) * 100, 1) AS change_pct
FROM (
SELECT
ticker,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2011-08-05') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS fri_close,
argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) = toDate('2011-08-08') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) AS mon_close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('VXX', 'BAC', 'C', 'GS', 'XLF', 'SPY', 'KO', 'XLU', 'GLD')
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-09 04:00:00')
GROUP BY ticker
)
ORDER BY mon_close / fri_close ASC, ticker ASCThe selling concentrated in the banks. Bank of America fell -20%, roughly one dollar in every five of its market value, gone in a session, with Citigroup at -15.8% and XLF, the financial-sector fund, at -9.6%, all far past SPY's -6.5%. Consumer-staple Coca-Cola gave up just -2.3%. And two rows finished green: GLD, the gold fund, added 3.3%, and VXX, an exchange-traded note tracking short-term VIX futures, the market's "fear gauge", jumped 14.6%. One tape, three simultaneous stories: a bank rout, an orderly de-risking in the broad index, and a scramble for insurance.
Where August 8 ranks among the worst days
Was the downgrade session historic, or merely bad? One way to answer: compute the close-to-close change for every SPY session from 2003 through 2025 and rank them.
| session | change_pct | downgrade_rank | top10_outside_crises | two_week_slide_pct |
|---|---|---|---|---|
| 2020-03-16 | -11.6 | 9 | 1 | -10.8 |
| 2020-03-12 | -9.6 | 9 | 1 | -10.8 |
| 2008-10-15 | -9.2 | 9 | 1 | -10.8 |
| 2008-12-01 | -8.9 | 9 | 1 | -10.8 |
| 2020-03-09 | -7.7 | 9 | 1 | -10.8 |
| 2008-09-29 | -7 | 9 | 1 | -10.8 |
| 2008-10-09 | -6.8 | 9 | 1 | -10.8 |
| 2008-11-20 | -6.6 | 9 | 1 | -10.8 |
| 2011-08-08 | -6.5 | 9 | 1 | -10.8 |
| 2008-10-07 | -6.1 | 9 | 1 | -10.8 |
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMax(toFloat64(close), window_start) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
AND window_start >= toDateTime('2003-01-01 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 et_date, close_usd,
round((close_usd / prev_close - 1) * 100, 1) AS change_pct,
row_number() OVER (ORDER BY close_usd / prev_close ASC, et_date ASC) AS day_rank
FROM changes
WHERE prev_close > 0
),
enriched AS (
SELECT et_date, change_pct, day_rank,
max(if(et_date = toDate('2011-08-08'), day_rank, 0)) OVER () AS downgrade_rank,
sum(if(day_rank <= 10 AND toYear(et_date) NOT IN (2008, 2020), 1, 0)) OVER () AS top10_outside_crises,
round((max(if(et_date = toDate('2011-08-05'), close_usd, 0)) OVER () / max(if(et_date = toDate('2011-07-22'), close_usd, 0)) OVER () - 1) * 100, 1) AS two_week_slide_pct
FROM ranked
)
SELECT
toString(et_date) AS session,
change_pct,
downgrade_rank,
top10_outside_crises,
two_week_slide_pct
FROM enriched
WHERE day_rank <= 10
ORDER BY day_rankAugust 8, 2011 ranks 9th-worst across those twenty-three years, and it is the only day in the top ten from outside the 2008–09 financial crisis and the March 2020 COVID crash. Context cuts both ways, though: the market was already in retreat before S&P moved. SPY had slid -10.8% over the two weeks through downgrade Friday, while the debt-ceiling standoff ran to the wire and Europe's sovereign crisis spread toward Italy and Spain. Monday measured two things at once, the shock of the AAA loss and a decline already in motion, and no query fully separates them. What the tape can say: the single worst session of that entire correction landed on the first trading day after the downgrade.
The downgraded asset went up
Here is the part every retelling of this episode has to sit with: the security S&P downgraded was US government debt, and it rallied.
| date | yield_3_month | yield_2_year | yield_10_year | yield_30_year |
|---|---|---|---|---|
| 2011-08-01 | 0.1 | 0.38 | 2.77 | 4.07 |
| 2011-08-02 | 0.06 | 0.33 | 2.66 | 3.93 |
| 2011-08-03 | 0.02 | 0.33 | 2.64 | 3.89 |
| 2011-08-04 | 0.02 | 0.27 | 2.47 | 3.7 |
| 2011-08-05 | 0.01 | 0.28 | 2.58 | 3.82 |
| 2011-08-08 | 0.05 | 0.27 | 2.4 | 3.68 |
| 2011-08-09 | 0.03 | 0.19 | 2.2 | 3.56 |
| 2011-08-10 | 0.02 | 0.19 | 2.17 | 3.54 |
| 2011-08-11 | 0.03 | 0.19 | 2.34 | 3.82 |
| 2011-08-12 | 0.02 | 0.2 | 2.24 | 3.72 |
| 2011-08-15 | 0.02 | 0.19 | 2.29 | 3.75 |
The exact SQL behind every number
SELECT
toString(date) AS date,
round(yield_3_month, 2) AS yield_3_month,
round(yield_2_year, 2) AS yield_2_year,
round(yield_10_year, 2) AS yield_10_year,
round(yield_30_year, 2) AS yield_30_year
FROM global_markets.treasury_yields
WHERE date BETWEEN '2011-08-01' AND '2011-08-15'
ORDER BY dateThe 10-year Treasury yield closed downgrade Friday at 2.58%, fell to 2.4% on Black Monday, and touched 2.2% the day after. A bond's yield falls when its price rises, so lower yields mean investors were paying more for the government debt whose rating had just been cut, cheaper borrowing for the downgraded borrower. Demand for safety overwhelmed any doubt about the safe asset itself, with the 2-year finishing that Tuesday at 0.19%, pinned near zero. The 2s10s yield-curve explainer covers these instruments and what the gap between them measures.
The whipsaw week
| session | close_usd | change_pct | shares_m |
|---|---|---|---|
| 2011-08-08 | 112.28 | -6.5 | 695.2 |
| 2011-08-09 | 117.47 | 4.6 | 711.2 |
| 2011-08-10 | 112.25 | -4.4 | 658.8 |
| 2011-08-11 | 117.33 | 4.5 | 482.3 |
| 2011-08-12 | 118.16 | 0.7 | 307.3 |
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
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('2011-08-05 00:00:00') AND window_start < toDateTime('2011-08-12 23:59:00')
GROUP BY et_date
)
)
WHERE et_date >= toDate('2011-08-08') AND et_date <= toDate('2011-08-12')
ORDER BY et_dateWhat followed was one of the most violent weeks on record in both directions: Tuesday +4.6%, Wednesday -4.4%, Thursday +4.5%, Friday +0.7%, four consecutive sessions alternating between crash and rally. Tuesday's rip coincided with the Federal Reserve's August 9 statement, which pledged to hold the federal funds rate near zero "at least through mid-2013", the first time the FOMC tied its guidance to a calendar date rather than the older "extended period" language, a two-year promise of free money delivered into a panicked tape. Whipsaw weeks of that violence are how volatility regimes announce themselves; the direction resolves later.
How long the recovery actually took
"The market recovered within months" is the usual one-line summary of this episode. The stored answer is more precise, and more interesting.
| predowngrade_close | first_reclaim_date | sessions_before_first_reclaim | bottom_date | bottom_close | bottom_vs_predowngrade_pct | bottom_vs_downgrade_monday_pct | last_close_below | total_sessions_below |
|---|---|---|---|---|---|---|---|---|
| 120.03 | 2011-08-15 | 5 | 2011-10-03 | 109.92 | -8.4 | -2.1 | 2011-11-28 | 41 |
The exact SQL behind every number
WITH daily AS (
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS et_date,
argMax(toFloat64(close), window_start) AS close_usd
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
AND window_start >= toDateTime('2011-08-05 00:00:00') AND window_start < toDateTime('2012-07-01 00:00:00')
GROUP BY et_date
),
(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-05')) AS pre_close,
(SELECT close_usd FROM daily WHERE et_date = toDate('2011-08-08')) AS mon_close,
(SELECT min(et_date) FROM daily WHERE et_date > toDate('2011-08-05') AND close_usd >= pre_close) AS reclaim_d
SELECT
round(pre_close, 2) AS predowngrade_close,
toString(reclaim_d) AS first_reclaim_date,
countIf(et_date > toDate('2011-08-05') AND et_date < reclaim_d) AS sessions_before_first_reclaim,
toString(argMinIf(et_date, (close_usd, et_date), et_date > toDate('2011-08-05'))) AS bottom_date,
round(minIf(close_usd, et_date > toDate('2011-08-05')), 2) AS bottom_close,
round((minIf(close_usd, et_date > toDate('2011-08-05')) / pre_close - 1) * 100, 1) AS bottom_vs_predowngrade_pct,
round((minIf(close_usd, et_date > toDate('2011-08-05')) / mon_close - 1) * 100, 1) AS bottom_vs_downgrade_monday_pct,
toString(maxIf(et_date, close_usd < pre_close)) AS last_close_below,
countIf(et_date > toDate('2011-08-05') AND close_usd < pre_close) AS total_sessions_below
FROM dailySPY first closed back above its pre-downgrade level, $120.03, the August 5 close, on 2011-08-15, after only 5 sessions below it. That reclaim did not hold. Europe's crisis deepened through the fall, and the correction's true bottom printed on 2011-10-03 at $109.92, -8.4% below the pre-downgrade close and -2.1% below even Black Monday's close. In all, SPY closed under its August 5 level on 41 sessions, the last of them on 2011-11-28. So the honest timeline is double-edged: the downgrade's own dent was erased within a week, while the correction it landed in ran for almost four more months.
What this day teaches
Two mechanics worth keeping. First, symbolic shocks price fast and retrace fast: the downgrade changed no cash flow anywhere, and the -6.5% repricing was reclaimed within 5 sessions, even as the broader correction around it took months to resolve. Second, the instrument being "damaged" is not always the one that falls: Treasuries rallied through their own downgrade while equities, bank stocks above all, took the hit. When a headline names an asset, watch where the selling actually lands before believing the story writes itself.
US downgrade FAQ
What happened to stocks when the US was downgraded?
The first session after the Friday-night downgrade, Monday, August 8, 2011, SPY fell -6.5%, closing near its low, the 9th-worst SPY session of 2003–2025. A week of alternating multi-percent crashes and rallies followed.
What is the debt ceiling, and what did it have to do with the downgrade?
The debt ceiling is a legal cap on total US federal borrowing; hitting it blocks the Treasury from issuing new debt to pay bills Congress has already approved. The 2011 standoff over raising it ran until hours before the projected default date, and S&P named that brinkmanship as a core reason for stripping the AAA rating three days later.
How big was the volatility spike in August 2011?
VXX, the exchange-traded note tracking short-term VIX futures, jumped 14.6% on August 8 alone, and the week that followed alternated between sessions of +4.6% and -4.4% on the S&P, daily swings of a size otherwise seen in 2008 and 2020.
Has the US been downgraded again since 2011?
Yes. Fitch cut the US to AA+ in August 2023, and Moody's followed to Aa1 in May 2025, the last of the three major agencies to drop its top grade. Neither repeat coincided with a single-day equity move comparable to August 8, 2011; the first downgrade carried the shock of precedent, while the later ones confirmed a trajectory markets already knew.
How does 2011's crash compare to 2008 or 2020?
It was a single-shock repricing inside an existing bull market rather than a systemic credit unwind: severe, fast, and fully retraced within months, where 2008 kept falling for half a year and 2020 compressed a bear market into four weeks.
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.