Data Lab / Storm Nights, Counted
Storm Nights, Counted
The mean says the sky reaches geomagnetic storm level — the threshold aurora alerts fire on — 59 nights a year. The mean describes almost no actual year: the spread runs from 3 nights to 141, April doubles December, storms echo 27 nights later — and 2024, the year everyone finally saw the aurora, was a below-average storm year with an exceptional tail.
Abstract
We count, over the complete 3-hourly planetary Kp record — 274,672 measured readings across 34,334 days in 94 complete years, 1932–2025, with no gaps — the days per year whose peak Kp reaches each NOAA G-scale threshold. The mean is 59.0 days per year at G1 or stronger (Kp ≥ 5), but the spread runs from 3 (twice: 2009 and 2020) to 141 (1951), a factor of 47, and the 2010s averaged 26.8 against the 1950s' 91.3 — the quietest decade in the record against the loudest. The famous aurora year 2024 ranks 71st of 94 by storm days yet 7th by days at G4 or stronger, with 13 days at G3+ and the record's first Kp = 9 in 21 years: its fame rests on a handful of extreme nights, not on frequency. Only 27 days in 94 years reached Kp = 9, and their roster is the familiar catalogue of historic storms. Two regularities survive at every threshold. The equinox months March–April and September–October carry a 20.8% per-day storm probability against 11.8% for the solstice months, April (21.5%) running 2.3× December (9.4%); and storm days cluster: the day after a storm day reaches storm level 46.2% of the time against a 16.1% base rate, with a clear echo at one solar rotation (30.1% at lag 27 days, against 20–21% at lags 20 and 34). Every figure is a count over measured readings; nothing is fitted, forecast, or interpolated.
1. The question
The one question an aurora chaser actually has — how many nights a year is it worth going out? — is usually answered with folklore: solar maximum is good, equinoxes are good, last year was amazing. Each of these is checkable against a single, remarkably complete instrument record, and this paper simply performs the check.
The planetary Kp index has been derived by the same published procedure since Bartels introduced it, from the measured traces of a fixed network of subauroral magnetometer observatories, homogenised back to 1932 by GFZ Potsdam. It is the quantity aurora alerting is built on: NOAA's G storm scale is defined directly on Kp thresholds (G1 = Kp 5 through G5 = Kp 9). Counting days over G thresholds is not a proxy analysis — it counts the exact quantity the alerts the reader subscribes to are thresholded on.
2. Data
The TerraPulse kp_index dex holds one slot per calendar year of the GFZ planetary Kp
record: 95 slots, 1932 through the present, each carrying the year's complete 3-hourly
series (8 readings per day) of Kp and its linear companion ap. This analysis uses the 94
complete years 1932–2025: 34,334 days, 274,672 readings. Coverage was verified
exhaustively: every day carries all 8 readings, and no reading is null. The partial
year 2026 is excluded from all statistics.
Kp is a derived index, not a model product: each 3-hour value condenses measured ground-magnetometer deviations through a fixed, published standardisation. No forecast, reanalysis, or interpolated value enters the dex or this paper.
3. Method
Storm days. A day counts at level Gn when its maximum 3-hourly Kp is ≥ the integer threshold (5.0 for G1 through 9.0 for G5). GFZ reports Kp in thirds; the integer rule is conservative by one third against counting the minus bin (a day peaking at Kp 5− = 4.667 does not count as G1). The choice matters for levels, not shapes: under the minus-bin rule the G1+ mean rises from 59.0 to 78.6 days per year, while rankings, seasonality and clustering are unchanged. Headline figures use the integer rule.
Days, not nights. Kp days are UTC days. A storm peaking during an observer's daylight yields no aurora, and cloud, moonlight, and summer twilight at high latitudes thin the usable subset further. Counts here are an upper bound on viewable nights at any single site. The regularities — spread, seasonality, clustering — are properties of the storms, not of any site's weather.
Everything is a count. Per-year threshold counts, monthly frequencies, conditional frequencies at day lags, and gap lengths. No trend is fitted; nothing beyond binomial intervals is needed.
4. Results
The mean describes no year. The sky reached G1 on average 59.0 days a year — max 141 (1951), min 3, reached twice, in 2009 and 2020, the two most recent solar minima. The record's longest wait between consecutive G1+ days is 334 days, 2019-10-25 to 2020-09-24. The decade contrast is starker: the 1950s averaged 91.3 G1+ days per year with 14.2 at G3+; the 2010s averaged 26.8 and 1.8. A photographer who took up the hobby in the 2010s learned the sky in the quietest decade of the entire record.
2024, the year of few but great storms. 2024 had 36 G1+ days — 71st of 94, well below average — yet ranks 7th by G4+ days (6), had 13 G3+ days, and produced the record's first Kp = 9.0 in 21 years (May 11; May 10 peaked at 8.667). No other year combines so few storm days with so many great-storm days. What was extraordinary about 2024 was the tail, not the frequency. 2025, for comparison, has nearly double the storm days (62) but nothing above G4.
Twenty-seven days at the top of the scale. Kp reached 9.0 on 27 days in 94 years — once every 3.5 years on average, but clustered: the four longest droughts between Kp 9 days are 9.9, 11.0, 11.3 and 20.5 years, the last being 2003-10-30 → 2024-05-11. The roster is the standard catalogue of historic storms: 1941 September, the 1957–1960 IGY-era cluster, 1967 May, 1972 August, 1989 March, 2000 July, 2003 October, 2024 May.
The calendar is real. A given day reaches G1+ with probability 21.5% in April and 9.4% in December — a factor of 2.3 — with the equinox months (Mar, Apr, Sep, Oct) at 20.8% against 11.8% for the solstice months. This is the long-documented semiannual variation showing up in raw counts, and it compounds with darkness: the months when storms are most frequent are also months with usable nights.
Storms cluster, and they echo. Given a G1+ day, the next day reaches G1+ with probability 0.462 (2,559/5,544) — 2.9× the 0.161 base rate — decaying to near baseline within four days. The curve rises again to a distinct peak at lag 27: 0.301 (1,669/5,541; binomial 95% CI ±0.012, and — because storm days cluster and are not independent trials — a year-block bootstrap CI of [0.273, 0.328]), against 0.209 and 0.201 at lags 20 and 34. That is one synodic solar rotation: the coronal hole or active region that produced the storm survives a rotation and points at Earth again — the phenomenon Bartels built the index around, visible in nothing more than conditional counting. Actionable form: the best predictor of a storm night, after "last night stormed," is "a storm 27 nights ago."
5. Limits
These are UTC days over a planetary index — an upper bound on any one site's viewable nights before darkness, cloud, and moon. NOAA's per-level visibility descriptions are that agency's published guidance, not derived from this record. The integer threshold rule is conservative; the minus-bin rule raises levels without changing any comparative statement. The station network underlying Kp changed early in the record and was homogenised by GFZ; no trend claim is made across the full span.
6. Conclusion
"How many nights a year" has no single answer — 59 on average, between 3 and 141 in fact — and the useful knowledge is structural: expect several-fold swings with the solar cycle; treat April and October as twice December; after a storm night, go out again the next night and mark the calendar 27 days ahead; and do not calibrate expectations on 2024, which was a below-average storm year carrying an exceptional tail. The folklore was checkable all along, and most of it checks out — except the part where last year was a year of many storms. It was a year of great ones.
Data: GFZ German Research Centre for Geosciences, Kp index (DOI 10.5880/Kp.0001,
CC BY 4.0), via the TerraPulse kp_index dex (95 year-slots, source gfz_kp).
Analysis: scripts/extract.py → analyze.py → visualize.py; every quoted number
re-verified independently by scripts/verify_draft.py (34/34).
Author: TerraPulse Lab
Published: 2026-09-01 · Updated: 2026-09-01
