Data / Open datasets / Storm Blackout and Restoration
Storm Blackout and Restoration
County night-light readings after FEMA-declared U.S. storms, with reported utility outages from EAGLE-I where they exist: 686 storms (672 in release 1.2), 2012 to 17 October 2026.
Published now: Version 1.0: Kaggle. Version 1.1: Kaggle (31 storms with county results in version 1.1). Version 1.2: Zenodo, Kaggle, Hugging Face (672 storms in version 1.2).
- Status
- Released
- Version / DOI
- Published 2026-10-10. Version 1.2, DOI 10.5281/zenodo.23010005.
- Coverage
- 672 FEMA-declared storms in the states, Puerto Rico, the U.S. Virgin Islands and tribal areas: hurricanes, tropical storms, typhoons, winter and severe storms and floods.
- Period
- Landfall or incident dates from 2012-01-14 to 2026-08-11
- Resolution
- County (or county-equivalent) by day, from satellite light readings at about 500 m
- Newer storms
- 14 storms in the live list are newer than version 1.2 and not part of it. Newest storm: Champi (17 October 2026). The published version 1.2 runs through 11 August 2026. Storms after that date are not in it. The live feed is newer data from the API. It can change and is not part of the cited version.
- Storm reports
- Paid products are free to every account through December 31, 2026 (midnight US Eastern). From January 1, 2027, paid plans apply only to accounts that choose one, and the free API key and free tier continue. Storm reports for storms already in the published tables, and the extras listed for those tables, are free with a free account. Licensed products are by quote.
- Formats
- CSV and Parquet tables
- Access
- Free and paid
- License
- CC BY 4.0, with upstream attribution below
- API and MCP
- Access with a free key
Download the data Create a free account
Sample rows
county | state | peak_customers_out | peak_share_out | hours_to_50pct_restored |
|---|---|---|---|---|
Hillsborough | FL | 520308 | 0.7155 | 76.75 |
Pinellas | FL | 449310 | 0.7740 | 62.25 |
Lee | FL | 273470 | 0.5307 | 36.25 |
Sarasota | FL | 255131 | 0.8214 | 42.50 |
Manatee | FL | 220455 | 0.8411 | 48.75 |
Polk | FL | 209976 | 0.5197 | 33.25 |
Volusia | FL | 177834 | 0.5512 | 33.25 |
Pasco | FL | 174494 | 0.5489 | 45.50 |
Orange | FL | 158190 | 0.2352 | 28.25 |
Collier | FL | 138155 | 0.5013 | 29.50 |
Brevard | FL | 119276 | 0.3473 | 9.50 |
Lake | FL | 98541 | 0.4486 | 33.25 |
Charlotte | FL | 97120 | 0.6862 | 26.75 |
Seminole | FL | 90312 | 0.3985 | 19.00 |
Palm Beach | FL | 78946 | 0.0976 | 2.50 |
Rows from the published Storm Blackout and Restoration 1.2 table (county_summary.csv). Estimates from public records and satellite night light. Not for real-time emergency response or for any decision about one address or property.
Lights-out video
Try it
Milton (AL142024) on 2024-10-10. The highest peak customers out in this sample is Hillsborough County, Florida, 520308.
| Storm | County | State | Peak customers out | Peak share |
|---|---|---|---|---|
Milton | Hillsborough | FL | 520308 | 0.7155 |
Milton | Pinellas | FL | 449310 | 0.7740 |
Milton | Lee | FL | 273470 | 0.5307 |
Milton | Sarasota | FL | 255131 | 0.8214 |
Milton | Manatee | FL | 220455 | 0.8411 |
Create a free account for the full result, videos and your AI assistant.
Download the data
-
In the download
14 tables, each as CSV and Parquet:
storms.csv,county_summary.csv,county_daily.csv,utility_by_county.csv,declared_unmatched.csv,tribal_area_summary.csv,tribal_area_daily.csv,tribal_area_counties.csv,tribal_context_county_summary.csv,tribal_context_county_daily.csv,tribal_context_utility_by_county.csv,validation.csv,validation_pooled.csvandvalidation_holdout.csv, with the citation and the data dictionary. The Kaggle copy also has the notebook. Sample videos are on the storms page. -
With a free API key
GET /v1/storms/{event_id}/media,GET /v1/storms/{event_id}/track,GET /v1/storms/{event_id}/forecasts, andGET /v1/tracks. MCP tools:get_storm_media,get_storm_track,get_storm_forecasts,find_storm_track,find_storms_near.
Not in this download, free through the API: lights-out videos for most storms, storm-path videos for hurricanes and tropical storms, forecast maps and satellite loops. Get a free key.
-
Storm Blackout and Restoration
County power outages and restoration from utility records and satellite night light. Version 1.2, 672 storms.
Citable copy (Zenodo) · Dataset (Kaggle) · Run the notebook (Kaggle) · Discussion (Kaggle) · Load in Python (Hugging Face)
What the data shows
5 findings from the published version.
-
Irma has the largest sum of county outage peaks among these 672 storm events: 8.9 million.
Among these 672 storm events, Irma (AL112017) has the largest sum of county peak customers out: 8,867,374 across 329 counties with a numeric peak. Each county contributes its own peak. Those peaks are not one simultaneous count of customers out.
Breakdown
Summing numeric peak_customers_out for event_id AL112017 gives 8,867,374 across 329 counties. That sum is the largest among the 672 storm events. Each county contributes its own peak. Those peaks are not one simultaneous count of customers out. The next sums are Helene 5,911,300, DR-4586 5,214,663, Ian 3,981,026, and Milton 3,736,269.
-
Milton's sum of county outage peaks ranks fifth: 3.7 million.
Milton (AL142024) sums to 3,736,269 peak customers across 51 counties (5th largest sum). Each county contributes its own peak.
Breakdown
For AL142024, the sum of numeric peak_customers_out is 3,736,269 across 51 counties. That ranks 5th, behind Irma, Helene, DR-4586, and Ian. Each county contributes its own peak. Those peaks are not one simultaneous count of customers out.
-
After Maria, night-light brightness took 121 days to return to the usual range in the typical county.
For Maria (AL152017), the median of days_to_normal is 121 days across 46 counties with a value. This column is satellite night-light brightness.
Breakdown
In the county summary table for AL152017, the median of days_to_normal is 121 across 46 counties with a value. days_to_normal counts days of satellite night-light brightness. It is separate from utility hours_to_90pct_restored.
-
After Irma, the typical county reached 90% of customers restored in 53 hours.
For Irma, the median county hours to 90 percent restored is 52.9 hours (280 counties with a numeric value).
Breakdown
For AL112017, the median of numeric hours_to_90pct_restored is 52.9 hours across 280 counties. Blank and non-numeric cells are left out. A row with reporting_drop true stays in the median when the hour cell is numeric.
-
44 of 672 storm events are tropical cyclones or typhoons.
These 672 storm events include 36 with kind tropical and 8 with kind typhoon (44 together). Kind tropical includes hurricanes. Other counts: severe storms 347, floods 186, tornadoes 24, ice storms 21, winter storms 21, snowstorms 20, straight-line wind 6, coastal storms 3.
Breakdown
Counting kind on storms.csv yields the mix above. The three largest summed county peaks are Irma, Helene, and DR-4586. Kind tropical includes hurricanes.
What it is for
- Intended use
- Research on how county night light changed after U.S. storms, read next to the reported utility outages, for resilience, insurance and emergency-management studies.
- Not intended for
- Judging a single address or neighborhood, or real-time response. Night light is related to electricity service. It does not show when power went off or came back. See the limits below.
Every storm in the release
Counts and headline numbers use the counties FEMA declared for each storm; the files also include the other counties in the same states, marked as not declared, for comparison. 14 storms in the live list are newer than version 1.2 and not part of it. Newest storm: Champi (17 October 2026). The published version 1.2 runs through 11 August 2026. Storms after that date are not in it.
| Storm | Dates | Location | States | Counties | Status | Type | Year | Access | Scope | Ends | What the data shows | Details | Get it |
|---|
Status: what the published table holds for each storm. Night light and outage run: night-light numbers and a county outage run from utility records. Night light only: night-light numbers and no outage run. Storm row only: a row in storms.csv with a reason code and no numbers. Every row is free to download.
Columns in each table
These are some of the columns. datapackage.json in the download lists every table and column.
| Field | Table | Type | Unit | Description |
|---|---|---|---|---|
event_id | county_daily | string | none | NHC storm identifier (for example AL092022) or FEMA disaster number (DR-4901) |
geoid | county_daily | string | none | County FIPS code, 5 digits. Read as text to keep the leading zero |
date | county_daily | date | none | Night of observation (the UTC date of the product file) |
days_from_landfall | county_daily | integer | days | Days since storms.landfall (negative before). Stored nights reach back about 400 days where a prior-year baseline was read |
radiance_nw_cm2_sr | county_daily | number | nW/cm²/sr | Mean radiance over the valid pixels that night: the sum of radiance over valid pixels divided by their number |
valid_pixel_share | county_daily | number | none | valid_pixels as a share of all pixels in the area |
light_ratio | county_daily | number | none | radiance_nw_cm2_sr divided by baseline_radiance of the summary row |
declared | county_summary | boolean | none | True when FEMA declared the county for this storm |
baseline_nights | county_summary | integer | none | Clear nights in the baseline |
baseline_source | county_summary | string | none | event_window: baseline nights before the storm. prior_year: the same season a year earlier, used when the nights before the storm were too few. insufficient: no baseline |
status | county_summary | string | none | What the night-light series did. It is not a detected power outage. light_drop: smoothed light fell below the county's normal range soon after impact. no_measurable_outage: observed, no such fall (the name keeps an old use of the word outage for a night-light state). cloud_obscured: not observed until late and normal by then. low_signal: too noisy to judge. insufficient_data: too few nights |
days_to_50 | county_summary | integer | days | Days from impact until smoothed light was back at or above 50% of baseline |
days_to_normal | county_summary | integer | days | Days from impact until smoothed light was back in the county's normal range |
peak_customers_out | county_summary | number | none | Peak customers out reported in EAGLE-I, taken after readings that hold more than one collection snapshot are replaced (see flagged_readings). A replaced reading is an interpolated value that was not measured |
hours_to_90pct_restored | county_summary | number | hours | Hours from the peak until customers out stayed at or below 10% of the peak for 6 hours |
Ten real rows
event_id |
geoid |
county |
state |
baseline_nights |
post_obs_nights |
status |
outage_min_ratio |
days_to_50 (days) |
days_to_normal (days) |
|---|---|---|---|---|---|---|---|---|---|
AL152017 | 72001 | Adjuntas | PR | 18 | 150 | low_signal | none | none | none |
AL152017 | 72003 | Aguada | PR | 19 | 138 | light_drop | 0.302 | 63 | 126 |
AL152017 | 72005 | Aguadilla | PR | 17 | 141 | light_drop | 0.329 | 62 | 120 |
AL152017 | 72007 | Aguas Buenas | PR | 19 | 146 | light_drop | 0.076 | 126 | none |
AL152017 | 72009 | Aibonito | PR | 17 | 143 | no_measurable_outage | 0.191 | none | none |
AL152017 | 72011 | Añasco | PR | 19 | 145 | light_drop | 0.050 | 63 | 94 |
AL152017 | 72013 | Arecibo | PR | 16 | 148 | light_drop | 0.115 | 63 | 126 |
AL152017 | 72015 | Arroyo | PR | 18 | 149 | light_drop | 0.112 | 94 | none |
AL152017 | 72017 | Barceloneta | PR | 16 | 142 | light_drop | 0.245 | 63 | none |
AL152017 | 72019 | Barranquitas | PR | 18 | 145 | light_drop | 0.063 | 121 | 179 |
Rows from the published Storm Blackout and Restoration 1.2 table (county_summary.csv). Numbers rounded to three decimals for display; the files carry full precision. none means the value is empty.
Example calls
Each call returns real rows. A free account gives you the key; the same key works in AI assistants through the MCP server.
-
List every storm in the catalog
curl https://api.heimdallresearch.com/v1/storms \ -H "Authorization: Bearer $HEIMDALL_API_KEY" -
One storm, with every county's summary
curl https://api.heimdallresearch.com/v1/storms/AL152017 \ -H "Authorization: Bearer $HEIMDALL_API_KEY" -
One county after one storm
curl https://api.heimdallresearch.com/v1/storms/AL152017/counties/72001 \ -H "Authorization: Bearer $HEIMDALL_API_KEY"Response, trimmed
{ "dataset_version": "1.2", "doi": "10.5281/zenodo.23010005", "event_id": "AL152017", "county": { "geoid": "72001", "county": "Adjuntas", "state": "PR", "baseline_nights": 18, "post_obs_nights": 150, "status": "low_signal", "outage_min_ratio": null, "days_to_50": null, "days_to_normal": null } } -
Ask an AI assistant
Ask: “Show the county night-light reading for Adjuntas, Puerto Rico after Hurricane Maria (AL152017).” The assistant calls
get_storm.
Sources and required attribution
| Input | Role | License or terms | Attribution |
|---|---|---|---|
| NASA Black Marble daily nighttime lights, VIIRS on Suomi NPP (VNP46A2, version 2) | Measured, 2012 to 2 November 2026 | NASA open data; acknowledge and cite | Product citation with DOI 10.5067/VIIRS/VNP46A2.002 |
| NASA Black Marble daily nighttime lights, VIIRS on NOAA-20 (VJ146A2, version 2) | Measured, 2018 onward. Used for current readings since Suomi NPP deliveries ended on 2 November 2026 | NASA open data; acknowledge and cite | Product citation with DOI |
| NOAA National Hurricane Center best tracks (HURDAT2), operational tracks and wind radii | Storm timing, landfall and wind extent | Public domain | National Hurricane Center |
| FEMA disaster declarations (OpenFEMA) | Which storms, counties and tribal areas are included, incident begin dates, and the declaration type | Public domain | FEMA |
| U.S. Census Bureau county housing unit estimates | Splits state customer counts across counties | Public domain | U.S. Census Bureau |
| U.S. Census Bureau cartographic boundary files | County boundaries | Public domain | U.S. Census Bureau |
| EAGLE-I county outage records (Oak Ridge National Laboratory) | Reported utility outages by county, where records exist; validation | CC BY 4.0 | Cited in the release |
| EIA-861 utility customer counts | Customers per county | Public domain | U.S. Energy Information Administration |
How values are produced
For each storm, every county in the affected states is compared night by night with its own normal light. The baseline is the median of clear, snow-free nights before the storm, leaving out nights affected by any earlier storm; if too few remain, the same weeks one year earlier are used, and the row says so. After landfall, each clear night is compared with that baseline. days_to_50 counts days from impact until smoothed light was back at or above 50 percent of baseline. days_to_normal counts days until smoothed light was back in the county's normal range. window_end_reason records why each county's window ended. Pixels flagged for cloud, poor quality, or snow are excluded, and the count of usable nights travels with every value. Each storm is measured with one satellite product, named in the product column. Radiance from different products should not be compared between storms; this release gives no conversion between them.
How it is checked
- Outage records
- Night light was compared with EAGLE-I outage records. County mean darkness (dark_county_mean) does not separate counties with large outages from counties with small ones: pooled AUC 0.515 over 418 storms and 5,841 counties, 95% interval 0.482 to 0.547 from resampling storms. The interval includes 0.5, which is chance. Lit-pixel radiance drop (dark_lit_ratio) separates counties with large outages from counties with small ones: pooled AUC 0.559 over 287 storms and 3,611 counties, 95% interval 0.511 to 0.605 from resampling storms. Change in the share of unlit lit-mask pixels (dark_lit_share) separates counties with large outages from counties with small ones: pooled AUC 0.566 over 287 storms and 3,611 counties, 95% interval 0.513 to 0.615 from resampling storms. An AUC of 0.5 is a coin flip.
- Recomputed values
- Night light for 20 storms was derived again from the night-light table, and the outage columns of 5 counties were computed again from the published EAGLE-I file. Both equal the published tables.
- Known limits
- Clouds and snow hide the ground, moonlight and seasonal lighting shift readings, and some light returns before power does (generators) or stays low after it returns (damaged buildings, displacement). Every value carries its observation count, and results are by county or by tribal area.
How it compares with existing products
NASA publishes before-and-after light maps for single disasters. This dataset puts county night-light readings and EAGLE-I outage records for U.S. storms in one set of tables, with the method and limits published next to them.
Free and paid access
- Free
- The published package is on Zenodo, Hugging Face and Kaggle, with no sign-up, and the API and MCP server with a free key.
- Paid
- Reports for one storm and one area. Paid products are free to every account through December 31, 2026 (midnight US Eastern). From January 1, 2027, paid plans apply only to accounts that choose one, and the free API key and free tier continue. See plans and prices.
How to cite
Heimdall Research (2026). Storm Blackout and Restoration (Version 1.2) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.23010005 Concept DOI https://doi.org/10.5281/zenodo.23010004.
Please also cite the NASA Black Marble products.
- Versions and corrections
- Version 1.0 is on Kaggle and has no Zenodo DOI. Version 1.1 (31 storms with county results) is on Kaggle and has no Zenodo DOI. Version 1.2 (672 storms) has DOI https://doi.org/10.5281/zenodo.23010005 and began the Zenodo and Hugging Face copies. DOI https://doi.org/10.5281/zenodo.23010004 covers all versions. The changelog in the download records changes. Report problems through the collaboration form.
- Download
- Zenodo (CSV and Parquet, DOI) · Hugging Face (same files; loads with the
datasetslibrary) · Kaggle (notebook, discussion) · API and MCP with a free account. Downloads need no account. - Use notice
- Estimates from public records and satellite night light. Not for real-time emergency response or for any decision about one address or property.