Edition 1.0. Source acquisition: September 5, 2026. Analysis: January 1, 2011–December 31, 2025, 15 complete years. This is a GeographyPin analysis of NOAA/SPC reports, not an official NOAA map.
Historical reported severe hail—not a forecast, storm-footprint map or property-level roof-damage assessment.
1955-2025_hail.csv.f511540a2c1454c863fc1604cf5b2d33bb3e6bfe531079f3a61d53b5d7fe70f8.de60e469aed220210dde5aec8d6fb744c32a09623943169d032f6b5a9117ea87.c9db0e395c11a1f94a8017fde4f4c7cbee1dca6eb37ba8f1ccaab927df70885f.The source is SPC’s historical Severe Weather Database compiled from NWS Storm Data. On the acquisition date, the annual 2025 hail CSV was marked “Updated: 23 Apr 2026.” No preliminary current-year daily reports were added. A finalized historical edition can still receive later corrections: retain this snapshot and checksum when citing edition 1.0.
The boundary source is the U.S. Census Bureau’s 2024 Cartographic Boundary File for states, scale 1:5,000,000, in NAD83. These are generalized jurisdiction footprints, including mapped water. State and regional weights are not land-only exposure measures.
yr values 2011 through 2025 inclusive. Check that all 15 years are present and that year, month and day fields agree with date.st postal code. Exclude Alaska, Hawaii and territories.mag at least 1 inch (25.4 mm). Significant-hail layer: mag at least 2 inches (50.8 mm). Exactly 1-inch and exactly 2-inch observations are included in their respective layers.date. All 147,594 source records in the selected period have tz=3, which the SPC specification defines as Central Standard Time, UTC−06:00. A counted day is midnight–midnight in this fixed source convention. It is not necessarily the observation’s local civil date and is not a 12Z-to-12Z convective day.The original source has 414,481 records. The selected period contains 147,594. Scope filtering removes 73 records; coordinate checks remove none. A further 33,226 records are below 1 inch, leaving 114,295 main-threshold reports. Of those, 12,273 report hail at least 2 inches. These are input report counts, not the map’s metric and not a ranking of states.
Project observations into NAD83 / Conus Albers, EPSG:5070. Each center is x=i×80,000 m, y=j×80,000 m, where i and j are integers. This origin remains fixed for later editions. A center represents an 80 km square extending 40 km in each axis direction. Export all squares with positive intersection area with the 49-jurisdiction cartographic footprint: 1,378 squares in edition 1.0.
At every center, select observations at a projected Euclidean distance no greater than 40,233.6 m, equivalent to 25 miles. EPSG:5070 preserves area rather than exact distance; the fixed projected radius approximates ground distance. The method does not claim address-level precision.
Count each distinct qualifying calendar date once at the center, regardless of how many reports occurred on that date. Divide the 15-year count by 15 for days per year. Repeat independently for hail at least 2 inches. Monthly values use the same unique dates grouped by month, then divided by 15. A 1-inch-only date is excluded from the 2-inch count; a date with any 2-inch report in the neighborhood counts once in both layers.
One date can contain more than one storm, and a storm can span more than one date. “Reported hail days” is consequently more exact than “unique storms.” Nearby circles can overlap, and circular neighborhoods on an 80 km lattice do not cover every point between their centers. Do not sum grid counts to produce a national storm or report total.
Apply a two-dimensional isotropic Gaussian with standard deviation 120 km, equivalent to 1.5 grid intervals. Truncate at four standard deviations, giving a 480 km kernel radius. Use constant zero padding outside the array and pad the grid rectangle by more than the kernel radius to prevent array-edge effects.
Smoothing is normalized by the fraction of each square covered by the U.S. cartographic footprint:
smoothed = Gaussian(raw × footprint_fraction) / Gaussian(footprint_fraction).
This normalization prevents outside-domain cells from being treated as observed zero-hail areas. Display the result clipped to the U.S. footprint. It does not recover missing observations or reports from Canada or Mexico. The renderer fills nonfinite outside-mask display cells from their nearest valid neighbor and uses bilinear interpolation for a continuous display, then clips the graphic to the Census union. This interpolation adds no new observations. Preserve raw and smoothed values separately in the data download. Main state statistics use raw values.
The maps use the colorblind-safe cividis sequential color scale with a continuous linear range. The severe layer spans 0–8 days per year, with fixed numeric legend marks at 0, 0.5, 1, 2, 3, 4, 6 and 8. The significant layer spans 0–1.5 days per year, with marks at 0, 0.25, 0.5, 1 and 1.5. The seasonality scale spans 0–50% of annual reported severe-hail days. Preserve these ranges and marks on annual refreshes unless a documented new display edition is necessary.
Intersect each 80 km square with every state polygon in EPSG:5070. Weight each raw neighborhood mean by its square/state intersection area. The state mean is the weighted sum divided by the summed intersection area. The significant-hail mean uses the same weights. The highest local grid value is the largest raw severe-hail mean among squares with positive intersection area, even when a square center lies across the state boundary.
This is an area average of sampled neighborhood report-day frequencies. It is not the number of hailstorm days occurring anywhere in the state. A day affecting two neighborhoods can contribute to both local frequencies; a source report outside a state can contribute within a 25-mile neighborhood of a cell representing part of that state.
Washington, DC, intersects only one square; Rhode Island intersects three. Other small, coastal and border states also require care. A square’s center and observation circle may lie partly or entirely across a jurisdiction boundary. DC is included for geographic completeness, but it is not a state and its coarse value should not be interpreted as a DC-specific hail measurement.
Peak months maximize the area-weighted raw monthly means before rounding. Preserve every tied peak; the numeric tolerance for weighted arithmetic is 1×10⁻¹². If a grid point has no observed qualifying days, its peak is None observed. Rounded equal displayed values do not establish a statistical tie.
The seasonality heatmap uses these disjoint editorial groupings; each included jurisdiction appears once:
| Region | State postal codes |
|---|---|
| Traditional-core states | CO, NE, WY |
| Northern Plains | MT, ND, SD, MN |
| Central Plains | IA, KS, MO |
| Southern Plains | OK, TX |
| Southeast | AL, AR, FL, GA, KY, LA, MS, NC, SC, TN |
| Great Lakes | IL, IN, MI, OH, WI |
| Northeast and Mid-Atlantic | CT, DC, DE, ME, MD, MA, NH, NJ, NY, PA, RI, VT, VA, WV |
| Southwest | AZ, NM |
| Pacific and interior West | CA, ID, NV, OR, UT, WA |
“Traditional-core states” aggregates entire states for reproducibility; it does not define the Hail Alley boundary or isolate the Front Range. A regional monthly mean uses the combined square/state intersection weights. Its percentage share divides that monthly mean by the sum of all 12 monthly means. Percentages describe the seasonal distribution of reported severe-hail days, not a probability that a storm will strike in a particular month. A zero in this sample is not a guarantee that hail cannot occur.
Consulted official 1986–2015 reference products:
The NetCDF metadata explicitly describe mean days per year within 25 miles, using the two respective thresholds. For a reproducible broad-pattern check, project their coordinate locations into EPSG:5070, linearly interpolate onto the edition-1.0 centers and calculate spatial Spearman correlations with the new smoothed grids. Correlations are 0.9582 for the 1-inch layer and 0.9742 for the 2-inch layer across 1,378 shared centers. These statistics support broad geographic similarity, not exact agreement, causal inference or validation of an individual cell. Periods, map projections, grids and processing differ. The older maps are reference climatologies, not data substituted into the 2011–2025 analysis.
All CSVs are UTF-8, comma separated, with one header row and decimal points. Month lists use semicolons inside a field. Geographic coordinates in downloadable Point GeoJSON are longitude then latitude, WGS84, following RFC 7946. Derived floating-point CSV values are stored to eight decimal places for reproducibility; this does not imply that the underlying observations have that precision.
| Field | Meaning |
|---|---|
grid_id | Stable signed column and row integers on the EPSG:5070 lattice. |
center_lat, center_lon | Center coordinates in decimal degrees. |
center_x_m, center_y_m | Center coordinates in EPSG:5070 meters. |
period_start, period_end, years | Inclusive source years and divisor, 15. |
radius_miles, grid_spacing_km | Fixed 25-mile projected neighborhood and 80-km lattice. |
severe_hail_days | Distinct source dates with one or more reports at least 1 inch within the neighborhood. |
severe_hail_days_per_year | Severe date count divided by 15. |
smoothed_severe_days_per_year | Normalized Gaussian display value for the severe layer. |
significant_hail_days | Distinct source dates with one or more reports at least 2 inches. |
significant_hail_days_per_year | Significant date count divided by 15. |
smoothed_significant_days_per_year | Normalized Gaussian display value for the significant layer. |
peak_months | Full English month names tied for maximum raw severe count, or None observed. |
report_count | Number of qualifying at-least-1-inch input reports in the neighborhood before same-day deduplication. |
conus_cell_area_fraction | Fraction of the square inside the cartographic jurisdiction footprint, from greater than 0 through 1. |
center_in_conus | Whether the center is inside or on the footprint boundary. |
severe_days_jan through severe_days_dec | Integer severe date counts by month over all 15 years. |
significant_days_jan through significant_days_dec | Integer significant date counts by month over all 15 years. |
source_version, source_download_date | Source/edition identifiers and original source acquisition date. |
| Field | Meaning |
|---|---|
state, state_code | Jurisdiction name and postal code, including District of Columbia. |
area_weighted_mean_severe_hail_days_per_year | Intersection-area-weighted mean of raw 1-inch neighborhood frequencies. |
highest_local_grid_severe_days_per_year | Highest raw severe value among intersecting squares. |
area_weighted_mean_significant_hail_days_per_year | Corresponding weighted 2-inch mean. |
peak_months | Unrounded weighted monthly maximum, including tied peaks. |
cartographic_area_km2 | Area of the generalized state footprint in EPSG:5070, including mapped water. |
intersecting_grid_cells | Count of positive-area intersecting squares. |
max_grid_ids | Grid IDs tied for highest local severe value. |
period_start, period_end, source_version, source_download_date | Source window and provenance. |
month 1–12, month_name, area_weighted_severe_hail_days_per_year_for_month, share_of_annual_severe_days_percent, and is_peak_month.region, semicolon-separated state_codes and peak_months.state_code, grid_id, intersection_area_km2 and normalized weight_within_state; the weights within each jurisdiction sum to 1 before export rounding.metadata.json: source checksums, settings, assumptions, filters, region definitions, processing environment, broad reference comparison and invariant-check results.grid_arrays.npz: NumPy rendering arrays. x and y are one-dimensional meter-coordinate arrays; data arrays are rows by y, columns by x. Monthly arrays add a final 12-month dimension. land_fraction is a legacy internal field name for the cartographic footprint fraction, including mapped water; it must not be interpreted as land-only area.states-wgs84.geojson: generalized state boundaries in geographic coordinates for rendering/reproduction.states-5070.geojson: internal projected rendering geometry with an explicit EPSG:5070 CRS member; it is not RFC 7946 Point GeoJSON and should not be confused with the main downloadable grid.Report networks are uneven. Population, roads, trained observers and storm-chasing activity affect where reports appear; rural and nighttime hail can be missed. Reported diameters often cluster at familiar-object sizes and warning thresholds. A point coordinate is an observation, not the full hail swath. Missing reports do not establish that no hail occurred.
Grid spacing, neighborhood radius, projected distance approximation, generalized boundaries, area weighting and smoothing affect the result. Border neighborhoods lack Canadian and Mexican reports in this dataset. The product maps at-least-1-inch reported hail, not every small hail occurrence, and it is a 15-year historical analysis rather than a 30-year climate normal.
Hail-day frequency is not claims frequency, repair cost, expected financial loss or the probability of roof damage. No monetary-loss fields were used. Roof outcomes depend on the storm, impacts and building. This product does not provide a live forecast or resolve addresses, ZIP codes, properties or individual roofs. Rising report totals alone do not establish a climate-change trend.
Place analyze_hail.py beside the saved source ZIPs, then run it using a Python environment containing NumPy, pandas, SciPy, Shapely, PyProj and pyshp. The script caches source files, verifies the edition hashes and writes derived data to a child outputs directory. If an official source has changed, it stops on the checksum mismatch instead of silently labeling new data edition 1.0. The optional rendering script creates the map and heatmap from the derived arrays and boundaries.
The script checks full year coverage, timestamp fields, threshold nesting, count/report inequalities, monthly-to-annual sums, area conservation and state mean/max consistency. It independently recomputes four radius/date neighborhoods by brute force, including the highest raw cell. All these checks passed for edition 1.0.
Refresh after SPC publishes its finalized previous-year data. Roll the window forward to retain 15 complete years. Preserve the grid origin, thresholds, radius, smoothing settings and published numeric legend breaks unless a documented new methodology edition is necessary. Archive previous files and checksums, record the new acquisition date and append the version history. Do not combine preliminary current-year reports with the finalized historical window.
GeographyPin’s derived maps and data are offered under Creative Commons Attribution 4.0 International: https://creativecommons.org/licenses/by/4.0/ . Editorial, educational and other reuse is allowed under that license. Keep visible attribution such as “GeographyPin analysis of NOAA/SPC reports” and link to https://geographypin.com/hail-alley-map/ where practical. Identify modifications and retain the historical-data caveat. NOAA/SPC and Census source material retains its original status. Attribution must not imply government or GeographyPin endorsement.