S&P 500 History

Explore annual S&P 500 returns going back to 1871, arranged decade by decade so long stretches of market history are visible at once. The figures are total returns, including reinvested dividend income, calculated from Robert Shiller's monthly dataset. Summary statistics show how often years were positive, the median return, and the best and worst single years on record.

Loading Shiller data…
How these returns are calculated
Data source
Robert Shiller's monthly S&P 500 dataset — shillerdata.com
Columns used
SpPrice — monthly average nominal closing price of the S&P Composite index
Dividend — trailing 12-month total dividends, annualized — must divide by 12 to get one month's income
Step 1 — Monthly returnstored as NominalTotalReturn column in the DB
Each month's return has two parts: how much the price moved + dividend income earned that month.
NominalTotalReturn = (Pt / Pt−1 − 1) + (Dividend / 12) / Pt−1
Example — Feb 2024  |  price: $4,846 → $4,959  |  annual dividend: $68.00
Price return   = (4,959 / 4,846) − 1          = +2.33%
Monthly div   = (68.00 / 12) / 4,846         = +0.12%
Total          = +2.45%  ← stored in NominalTotalReturn
Jan 1871 has no prior month, so NominalTotalReturn = NULL for that row only. All subsequent months are computed and stored.
Step 2 — Annual returnwhat each heatmap cell shows
Multiply all 12 monthly return factors together, then subtract 1. This is proper compounding — a +5% month followed by a −5% month is not zero.
(1 + rJan) × (1 + rFeb) × … × (1 + rDec) − 1
Years with fewer than 12 monthly rows are excluded (first partial year 1871, last partial year if data is mid-year).
Assumptions
Nominal only — not inflation-adjusted. The Cpi column exists in the table but is not used here.
Dividend timing — Shiller's Dividend column is a trailing 12-month annualized estimate, not actual ex-dividend dates. Monthly income is approximated as 1⁄12 of that annual figure.
Price is a monthly averageSpPrice is Shiller's average of daily closes for the month, not end-of-month price.