S&P 500 History

← Home
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.
Loading Shiller data…