The Storm Events Database documents storms and other weather phenomena having sufficient intensity to cause loss of life, injuries, property damage, and/or disruption to commerce across the United States. Records date from 1950 up to the current year. Created by the National Weather Service and the National Centers for Environmental Information, the dataset is presented here by The Internet of Water Coalition, The Commons, and Earth Genome.
The Storm Events Database is a publicly accessible source of National Weather Service (NWS) Storm Data, a collection of significant weather phenomena that have sufficient intensity to cause loss of life, injuries, significant property damage, and/or disruption to commerce across the United States.
About Us
The Internet of Water Coalition (IoW), The Commons, and Earth Genome maintain this repository as part of a collaborative effort to enhance access to NOAA's storm events data and unlock its potential for insights. This project exists downstream from the official NOAA dataset and is not directly affiliated with NWS, NOAA, or NCEI. The dataset presented here powers IoW's Storm Events Database Explorer.
Temporal Coverage
Records date from 1950 through approximately 3-4 months before the current date. Our goal is to update the data here on a monthly basis, pending the availability of new data from NOAA/NCEI. Historical coverage varies by event type. Between 1950 and 1954, tornadoes were the only event type recorded. Between 1955 and 1995, tornado, thunderstorm wind, and hail events were captured. From 1996 to present, all 55 event types are covered. NCEI explains that evolution here.
Event Types
Officially, the dataset has 55 event types representing various weather phenomena that NWS captures in the Storm Events Database. In addition, we created 7 unofficial high-level categories to group those event types. Each category groups events by their main cause or impact. In the data schema presented here, each event has an event_type (the official type assigned by NWS) and an event_type_family (the high-level category).
Categorization
Air Quality & Visibility
Hazards that make it hard to see or breathe, like fog, smoke, or ash.
Location data varies by event type. Some event types such as thunderstorm-wind and tornado have point coordinates, and there is variability in whether those events have a single point location or multiple points. Other event types like drought and winter-storm have no point coordinates and are instead represented spatially by NWS using the county or forecast zone where the event occurred. To simplify visualization in the tool, we have chosen to assign a single Point geometry to every event regardless of event type. For events with one or more points in the official data, we use the event's first Point ("location_index": 1). For events represented by a county or forecast zone, we use the centroid of that boundary. Around 1% of events have a null geometry because their FIPS code could not be matched to an appropriate boundary.
Formats and Schema
For ease of access, the data is provided in both CSV and GeoParquet formats. The CSV zip files are organized by year, whereas the GeoParquet combines all 2 million+ events into a single file using the best practices found in geoparquet-io. The schema has the following columns:
Column
Type
Description
Formats
event_id
INTEGER
Unique event identifier
GeoParquet, CSV
event_type
VARCHAR
Event type (e.g., "tornado", "flash-flood")
GeoParquet, CSV
event_type_family
VARCHAR
Event family (e.g., "storm", "flooding")
GeoParquet, CSV
event_narrative
VARCHAR
Event narrative description
GeoParquet, CSV
episode_id
INTEGER
Episode identifier (groups related events)
GeoParquet, CSV
episode_narrative
VARCHAR
Episode narrative description
GeoParquet, CSV
begin_ts
TIMESTAMP
Event start timestamp
GeoParquet, CSV
Using the Data
The GeoParquet format is particularly helpful for users who don't want to download individual CSVs. DuckDB provides excellent support for accessing GeoParquet files with both tabular and spatial queries. To use the examples below, start by installing a DuckDB client: https://duckdb.org/install/
Setup
Basic Queries
Filter by Event Type
Filter by Time Range
Spatial Queries
The GeoParquet file includes per-row bounding boxes for efficient spatial filtering:
Filter by Episode
Casualty and Damage Analysis
Export Results
Data Quality Considerations
Although this project applies data cleaning procedures to improve accuracy, limitations in the source data remain. In some rare cases, event records may contain inconsistencies such as a storm being assigned to a specific state or county FIPS code while its recorded latitude and longitude fall outside the corresponding boundary. These discrepancies arise from the underlying official data. For transparency and verification, users may access and download the original data directly from the National Centers for Environmental Information (NCEI) at https://www.ncei.noaa.gov/access/storm-events-database, which serves as the authoritative source of truth for this project's data.
end_ts
TIMESTAMP
Event end timestamp
GeoParquet, CSV
year
INTEGER
Event year
GeoParquet, CSV
injuries_direct
INTEGER
Direct injuries
GeoParquet, CSV
injuries_indirect
INTEGER
Indirect injuries
GeoParquet, CSV
deaths_direct
INTEGER
Direct deaths
GeoParquet, CSV
deaths_indirect
INTEGER
Indirect deaths
GeoParquet, CSV
damage_property
BIGINT
Property damage in dollars
GeoParquet, CSV
damage_crops
BIGINT
Crop damage in dollars
GeoParquet, CSV
state
VARCHAR
State name
GeoParquet, CSV
state_fips
VARCHAR
State FIPS code
GeoParquet, CSV
cz_fips
VARCHAR
County/Zone FIPS code
GeoParquet, CSV
cz_type
VARCHAR
County/Zone type (C=County, Z=Zone, M=Marine)
GeoParquet, CSV
cz_name
VARCHAR
County/Zone name
GeoParquet, CSV
wfo
VARCHAR
Weather Forecast Office
GeoParquet, CSV
data_source
VARCHAR
Data source
GeoParquet, CSV
magnitude
FLOAT
Event magnitude (varies by type)
GeoParquet, CSV
magnitude_type
VARCHAR
Magnitude type
GeoParquet, CSV
flood_cause
VARCHAR
Flood cause (for flood events)
GeoParquet, CSV
category
VARCHAR
Hurricane category
GeoParquet, CSV
tor_f_scale
VARCHAR
Tornado F-scale rating
GeoParquet, CSV
tor_length
FLOAT
Tornado path length (miles)
GeoParquet, CSV
tor_width
FLOAT
Tornado path width (yards)
GeoParquet, CSV
locations
VARCHAR
JSON array of location details
GeoParquet
fatalities
VARCHAR
JSON array of fatality details
GeoParquet
derived_lon
FLOAT
Event longitude
CSV
derived_lat
FLOAT
Event latitude
CSV
geometry
GEOMETRY
Event geometry (Point)
GeoParquet
bbox.*
struct
Per-row bounding box (xmin, ymin, xmax, ymax)
GeoParquet
1-- Install and load the spatial extension
2INSTALL spatial; LOAD spatial;
1-- Install and load the spatial extension
2INSTALL spatial; LOAD spatial;
1-- Preview the data
2SELECT * FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet' LIMIT 10;
3
4-- Count total events
5SELECT COUNT(*) as total_events FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet';
6
7-- View available columns
8DESCRIBE SELECT * FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet';
1-- Preview the data
2SELECT * FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet' LIMIT 10;
3
4-- Count total events
5SELECT COUNT(*) as total_events FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet';
6
7-- View available columns
8DESCRIBE SELECT * FROM 's3://us-west-2.opendata.source.coop/earthgenome/storm-events-db/events.parquet';
1-- Find recent tornadoes
2SELECT
3 event_id,
4 begin_ts,
5 state,
6 tor_f_scale,
7 tor_length,
8 tor_width,
9 (deaths_direct + deaths_indirect) as deaths,
10 (injuries_direct + injuries_indirect) as injuries,