County Climate-Risk Index
Coming SoonNOAA Storms + FEMA Flood Claims + USDA Crop Indemnity + CDC Climate Deaths — Joined by County / Year
An analyst studying county climate exposure currently licenses four separate federal datasets, then spends days reconciling FIPS codes, units, and grains. We did it once. This dataset joins NOAA Storm Events, FEMA NFIP claims, USDA RMA crop indemnities, and CDC WONDER mortality into a single table — one row per county per year with summed property, flood, and crop losses, storm and climate-attributable deaths, and a normalised 0–100 climate-loss score. Scores are per-capita, so every county is directly comparable. The only pre-built dataset of its kind.
Why not build this yourself from NOAA + FEMA + USDA + CDC?
Technically possible — here's what it takes:
- ✓ 4 separate federal datasets downloaded and parsed — NOAA Storm Events, FEMA NFIP redacted claims, USDA RMA cause-of-loss, and CDC WONDER mortality each require their own pipeline
- ✓ FIPS reconciliation across 4 schemas — NOAA stores state + county zone codes, FEMA uses 5-digit county codes, USDA uses split state/county codes, CDC uses 5-digit FIPS; we normalise all four to a consistent county key
- ✓ NOAA zone-vs-county handling — ~30–40% of storm events are logged by NWS forecast zone rather than county; we isolate county-coded events so damage isn't mis-attributed
- ✓ Per-capita normalisation — raw dollar losses are wildly skewed by one hurricane and by county size; we rank losses per-capita so a rural county and a metro are comparable
- ✓ Climate-attributable deaths isolated — we extract ICD-10 X30–X39 (heat, cold, storm, flood, forces of nature) from CDC cause-of-death data
- ✓ Parquet output — the raw sources are CSV/fixed-width; columnar Parquet is far faster across the full county-year panel
⏱ Skip 4 dataset pipelines, FIPS reconciliation, zone handling, and per-capita scoring. County risk ready in seconds.
~3,140
US Counties
2000–2023
Years Covered
4
Federal Sources Joined
0–100
Risk Score Range
Use Cases
A ready 0–100 target (climate_loss_index) and two decades of county-level property, flood, crop, and mortality losses — drop straight into a county-level cat model without licensing and reconciling four agencies first.
Score any county's historical climate-loss burden before writing property or flood risk. Per-capita normalisation means a rural county and a major metro are directly comparable, unlike raw dollar totals.
Treaty and cat-bond analysts need consistent county exposure histories across perils. This combines storm, flood, and crop losses into one frequency-and-severity panel keyed by FIPS.
Screen issuers, portfolios, or markets for climate-loss concentration by county. Identify jurisdictions with rising per-capita losses or elevated climate-attributable mortality.
Two decades of standardized, source-cited county climate-loss data with documented provenance — suited to academic research and EU-AI-Act-style auditable analysis pipelines.
Use economic loss, event frequency, and climate-attributable death rates as pre-joined, per-capita features for risk scoring, pricing, or vulnerability models. Normalized and ready for feature engineering.
Schema
One pre-joined table delivered as CSV + Parquet. Grain: (county_fips, year).
Table — county_climate_risk
One row per (county, year). ~3,140 counties × ~24 years.
| Field | Type | Description |
|---|---|---|
| county_fips | string | 5-digit county FIPS code (primary join key) |
| county_name | string | County name (from CDC WONDER) |
| state_name | string | State name |
| year | int | Calendar year |
| population | int | County population — the per-capita denominator (CDC) |
| storm_event_count | int | NOAA county-coded storm events that year |
| storm_deaths | int | Direct + indirect storm deaths (NOAA) |
| storm_injuries | int | Direct + indirect storm injuries (NOAA) |
| storm_property_damage_usd | float | Summed NOAA property damage |
| storm_crop_damage_usd | float | Summed NOAA crop damage (informational) |
| top_event_type | string | Event type with the most property damage that year |
| flood_claim_count | int | FEMA NFIP paid flood claims |
| flood_paid_usd | float | Total NFIP dollars paid |
| flood_avg_claim | float | Mean NFIP payment per claim |
| crop_indemnity_usd | float | USDA RMA crop indemnity paid |
| crop_weather_indemnity_usd | float | Indemnity from weather-coded loss causes |
| top_cause_of_loss | string | Dominant USDA crop loss cause (null if none) |
| all_cause_deaths | int | Total deaths (CDC) |
| climate_attributable_deaths | int | Deaths from ICD-10 X30–X39 (heat/cold/storm/flood) |
| total_economic_loss_usd | float | property + flood paid + crop indemnity |
| loss_per_capita | float | total_economic_loss_usd ÷ population |
| climate_loss_index | int | 0–100 risk score (per-capita percentile blend) |
| risk_tier | string | Low / Moderate / Elevated / High / Severe (quintiles) |
Quick Start
import pandas as pd
risk = pd.read_parquet("county_climate_risk.parquet")
# Look up a specific county-year
harris_2017 = risk[
(risk["county_fips"] == "48201") &
(risk["year"] == 2017)
]
print(harris_2017[[
"climate_loss_index", "risk_tier", "total_economic_loss_usd",
"storm_deaths", "flood_paid_usd", "top_event_type"
]])
# Highest-risk county-years overall
print(risk.nlargest(20, "climate_loss_index")[[
"county_fips", "county_name", "state_name", "year",
"climate_loss_index", "risk_tier", "total_economic_loss_usd"
]])
# Counties with the worst per-capita losses
print(risk.nlargest(20, "loss_per_capita")[[
"county_name", "state_name", "year", "loss_per_capita"
]])
# Trend: a county's climate loss over time
fips = "12086" # Miami-Dade
trend = risk[risk["county_fips"] == fips].sort_values("year")
print(trend[["year", "climate_loss_index", "total_economic_loss_usd",
"climate_attributable_deaths"]])
# State-level rollup of economic loss
state_loss = (
risk.groupby("state_name")["total_economic_loss_usd"].sum()
.sort_values(ascending=False).head(15)
)
print(state_loss)Pairs Well With
Need crop-by-crop or cause-by-cause detail? Use the raw USDA indemnity dataset for granular agricultural loss analysis beyond the county aggregates in this index.
Need claim-level flood detail, flood zones, or ZIP-level risk scores? The raw FEMA NFIP dataset drills below the county-year aggregates used here.
Pricing
Launching soon. Request access below and we'll notify you the moment it goes live.
$149
Full dataset — ~3,140 counties × ~24 years, CSV + Parquet, data card
Commercial License
Request Access$399/yr
Full dataset + annual refresh when CDC WONDER releases new mortality data
Commercial License
Request AccessData Provenance
Source datasets: (1) NOAA NCEI Storm Events Database — severe weather events, deaths, and property/crop damage; (2) FEMA NFIP Redacted Claims — flood insurance claim counts and dollars paid; (3) USDA RMA Cause-of-Loss / Indemnity — crop insurance payouts and loss causes; (4) CDC WONDER Compressed Mortality — population and cause-of-death.
Join methodology: Each source is aggregated to (county_fips, year) and outer-joined on that key. NOAA county FIPS is composed fromSTATE_FIPS + CZ_FIPS for county-coded events (zone-coded events are excluded in v1). Missing loss values are treated as zero; population missing leaves the per-capita components blank.
Scoring: climate_loss_index blends three percentile-ranked components — economic loss per-capita (40%), human loss per-capita (35%), and event frequency (25%) — into a 0–100 score, bucketed into quintile risk tiers. Percentile ranking is used because raw dollar losses are extremely right-skewed.
Coverage: ~3,140 US counties. The clean four-way overlap spans approximately 2000–2023. Updated annually following the slowest upstream release (CDC WONDER).
License: All source data is published by the US federal government and is in the public domain. Paid tiers are licensed under the ClarityStorm Commercial Data License covering our cross-source join, FIPS reconciliation, per-capita scoring, and enrichment work.
Want early access, a specific state subset, or custom scoring weights?
Contact Sales