Technical writing
NFIP Flood Insurance Data: The Federal Program Behind $20 Billion in Flood Claims and the National Flood Hazard Layer
The United States operates the world's largest government-run flood insurance program — roughly five million policies, $1.3 trillion in coverage in force, and a claims history that has at times exceeded $20 billion in a single storm season. The National Flood Insurance Program also sits more than $20 billion in debt to the US Treasury, has undergone its most sweeping pricing overhaul in fifty years, and sits at the intersection of climate risk, mortgage finance, and local land-use decisions in ways that most people who live in flood-prone areas never fully understand. The data is public. Almost nobody uses it systematically.
FEMA publishes the underlying flood zone maps, the individual claims records going back to 1976, the active policy portfolio, and the geospatial flood hazard layer that underpins mandatory purchase requirements on millions of federally backed mortgages. Together these datasets constitute one of the richest windows available into how flood risk is priced, where it concentrates, and how the federal government's exposure is evolving as the climate changes. This article covers the program mechanics, the datasets, how to access them programmatically, and what the data reveals about the program's structural challenges.
Program overview
Congress created the National Flood Insurance Program through the National Flood Insurance Act of 1968, a direct response to the private insurance market's effective withdrawal from flood risk. The withdrawal was not accidental. Flood damage exhibits both the adverse selection and the moral hazard problems that make private insurance economically unworkable without substantial cross-subsidy: the people most likely to buy flood insurance are the people most exposed to floods (adverse selection), and subsidized insurance reduces the incentive to build elsewhere or elevate structures (moral hazard). The private market's rational response was to exit, leaving property owners in flood zones without coverage and Congress facing pressure to provide disaster relief after every major storm.
The NFIP was designed to solve both problems simultaneously. By making flood insurance available at a government-set rate as a condition of community participation in the program, Congress created a cross-subsidized pool large enough to function. By tying participation to the adoption of local floodplain management regulations — building codes, elevation requirements, development restrictions — Congress attempted to address the moral hazard on the supply side. The bargain: communities adopt minimum FEMA floodplain standards, and their residents get access to federal flood insurance. More than 22,000 communities nationwide participate in the program, making NFIP coverage available to residents across virtually every flood-prone jurisdiction in the country.
FEMA administers the program within the Department of Homeland Security. As of 2024, the NFIP carries approximately five million active flood insurance policies covering roughly $1.3 trillion in total insured value. Both figures have declined from their 2009 peak of 5.7 million policies — a trend driven by premium increases, the growth of private flood insurance alternatives, and demographic shifts in flood-prone coastal communities. Annual premium revenue is approximately $3.5 billion, but the program's actuarial adequacy has been a persistent concern since Katrina.
Flood zones and the mandatory purchase requirement
The NFIP's coverage obligations are organized around flood zone designations produced by FEMA through its Flood Insurance Rate Map (FIRM) program. Every property in a participating community sits in a flood zone; the zone determines whether flood insurance is mandatory for federally backed mortgages and what rate structure applies.
Special Flood Hazard Areas
Special Flood Hazard Areas (SFHAs) are zones with a 1% or greater annual chance of flooding — the so-called 100-year flood threshold. The SFHA designation triggers the mandatory purchase requirement: any property in an SFHA with a federally backed mortgage (FHA, VA, USDA-backed loans, or any loan from a federally regulated lender) must carry NFIP flood insurance or an approved private flood policy as a condition of the loan.
The SFHA zone taxonomy is granular:
- Zone A. SFHA subject to inundation by the 1% annual chance flood. No Base Flood Elevation (BFE) determined. Found in areas where detailed hydraulic analysis has not been completed.
- Zone AE. SFHA with BFE determined from detailed hydraulic analysis. The workhorse designation in detailed-study communities; most properties with mandatory purchase requirements fall here.
- Zone AH. SFHA subject to 1% annual chance shallow flooding (ponding) with average depths of 1–3 feet. BFE shown on the FIRM.
- Zone AO. River or stream flood hazard areas with 1% annual chance shallow flooding; average depths of 1–3 feet. Velocity flow may be present. BFEs expressed as depths rather than elevations.
- Zone AR. SFHA that results from the decertification of a previously accredited flood control system — typically a levee under review or restoration. Properties in AR zones face uncertainty about their long-term flood risk profile.
- Zone A99. Areas to be protected from the 1% annual chance flood by a federal flood protection system under construction; no BFE shown. Insurance rates apply as though the protective system does not yet exist.
- Zone V and VE. Coastal SFHA subject to the 1% annual chance flood with additional velocity hazard (wave action). VE zones have BFEs determined; V zones do not. The coastal wave velocity component makes V/VE properties significantly more expensive to insure than equivalent Zone A properties, and structural requirements — open foundations, no enclosures below BFE — are more stringent.
Outside the SFHA, FEMA designates Zone X for areas of moderate flood hazard (between the 0.2% and 1% annual chance flood — the 500-year and 100-year floodplains) and areas of minimal flood hazard (outside the 500-year floodplain). Flood insurance is not mandatory in Zone X, but FEMA makes preferred risk policies available at lower rates. The Zone X designation became bitterly significant during Hurricane Harvey in 2017: an estimated 70% of flooded homes in the Houston area were outside the SFHA, in Zone X, and had no flood insurance. Tens of thousands of households with significant structural damage received no NFIP indemnity because they had not purchased voluntary coverage.
Coverage limits
NFIP coverage limits are fixed by statute and have not been significantly updated since the 1990s. For residential properties: $250,000 maximum for building coverage, $100,000 maximum for contents. For commercial and non-residential properties: $500,000 for building coverage, $500,000 for contents. Properties with values above these limits can — and often do — purchase excess flood insurance from private carriers to cover the gap, but the mandatory purchase requirement only extends to the NFIP limit. Many high-value properties in SFHAs are substantially underinsured relative to their replacement cost even when they carry the maximum NFIP policy.
Claims history and the debt to Treasury
The NFIP's financial history is defined by a small number of catastrophic storms that overwhelmed its premium revenue and forced it to borrow from the US Treasury under its statutory borrowing authority. The debt has at times exceeded $30 billion and was partially cancelled by Congress in 2017 — but the structural problem of inadequate actuarial rates remained unaddressed until the 2021 Risk Rating 2.0 overhaul.
Major loss events in the NFIP's history:
- Hurricane Katrina (2005). Approximately $16 billion paid on 267,000 claims — the largest loss event in NFIP history. The storm surge from Katrina overwhelmed the New Orleans levee system, flooding properties in and outside SFHAs. The NFIP borrowed $16 billion from the Treasury to pay Katrina claims and never fully repaid it before subsequent storms added to the burden. The storm also generated years of litigation over whether damage was wind-caused (homeowners insurance) versus flood-caused (NFIP) — a coverage boundary dispute that reshaped subsequent NFIP policy language.
- Superstorm Sandy (2012). Approximately $8.6 billion paid on 144,000 claims. Sandy's unusual track produced catastrophic storm surge along the New Jersey and New York coastlines. The storm exposed significant coverage gaps: the NFIP's $250,000 building limit left many homeowners with large uninsured losses above that threshold, and disputes over wind-versus-flood causation generated additional litigation.
- Hurricane Harvey (2017). Approximately $8.9 billion paid on 89,000 claims. Harvey stalled over Houston for four days, producing unprecedented freshwater flooding rather than coastal storm surge. The Harris County flood control district recorded rainfall totals that exceeded the 0.1% annual chance (1,000-year) event in some locations. The NFIP's exposure was concentrated in Zones AE and X in the Houston metro area; tens of thousands of flooded homes had no NFIP coverage because they were in Zone X and had not purchased voluntary policies.
- Hurricane Ida (2021). Approximately $3.3 billion paid across Gulf Coast and Northeastern states. Ida made landfall in Louisiana as a Category 4 storm, then tracked northeast and produced devastating freshwater flooding from New Jersey to New York — well outside areas with high NFIP penetration rates.
- Hurricane Ian (2022). Approximately $3.6 billion paid on claims concentrated in Southwest Florida. Ian produced extreme storm surge in Fort Myers Beach, Cape Coral, and Sanibel Island — all coastal V/VE zone communities. Ian arrived during the Risk Rating 2.0 rollout, making it the first major event where post-reform pricing data begins to appear alongside claims in the OpenFEMA records.
Congress cancelled $16 billion of the NFIP's Treasury debt in October 2017 following Harvey, Irma, and Maria — a de facto acknowledgment that the program could not repay the debt from premium revenue. As of 2024, the NFIP carries approximately $20.5 billion in outstanding Treasury borrowing even after the cancellation. The Congressional Budget Office has estimated that the program faces an expected annual shortfall of approximately $1.4 billion between premiums collected and expected claims, a figure that grows materially under climate change scenarios.
Legislative history: Biggert-Waters and its rollback
The Biggert-Waters Flood Insurance Reform Act of 2012 was Congress's first serious attempt to address the NFIP's actuarial inadequacy. The law required FEMA to phase in actuarially sound rates for properties that had been receiving subsidized premiums — primarily pre-FIRM properties (structures built before the first FIRM was adopted for their community) and properties with repetitive flood losses. When FEMA began implementing the rate increases, the political reaction was immediate and intense: premium increases of several hundred percent in some cases produced genuine affordability crises for moderate-income homeowners and precipitated sharp drops in property values in communities where most homes were in the SFHA.
The Homeowner Flood Insurance Affordability Act of 2014 rolled back most of the Biggert-Waters rate increases, reinstated premium caps, and added new affordability protections — effectively reversing the reform before it could take meaningful effect. The NFIP's actuarial gap continued to widen through 2021, setting the stage for the Risk Rating 2.0 overhaul.
Risk Rating 2.0
FEMA's Risk Rating 2.0 methodology, effective October 2021 for new policies and October 2022 for renewals, represents the most fundamental change to NFIP pricing since the program's founding. The core departure from historical practice: rates are no longer primarily determined by flood zone designation (a community-level or map-panel-level average) but instead reflect property-specific risk characteristics assessed at the individual structure level.
The property-specific inputs FEMA uses under RR 2.0 include:
- Flood frequency. The modeled annual probability of the structure experiencing flooding, incorporating multiple flood types: riverine (stream and river overflow), storm surge (coastal inundation driven by wind), coastal erosion, and surface water / pluvial flooding (drainage overwhelmed by rainfall intensity regardless of proximity to a mapped waterway).
- Types of flooding. Different flood mechanisms produce different risk profiles and damage functions. A property exposed only to shallow surface flooding is assessed differently from one exposed to both riverine overflow and coastal storm surge.
- Distance to water source. Proximity to the nearest body of water affecting flood risk — ocean, bay, river, creek — is a significant predictor of both flood frequency and severity that the prior zone-average system failed to capture at the parcel level.
- First floor height relative to Base Flood Elevation. The difference between the lowest floor elevation and the BFE is the single strongest predictor of flood damage severity for riverine and coastal flooding. A property elevated three feet above BFE is dramatically less likely to experience structure damage than one at or below BFE.
- Foundation type. Crawlspace, slab-on-grade, basement, and elevated-on-piers foundations have substantially different vulnerability profiles for the same water depth. Basements are particularly expensive flood loss exposures because water entry to a basement can occur before any surface flooding is visible.
- Replacement cost value. The insured value of the structure; higher-value structures pay higher absolute premiums because the expected loss magnitude is proportionally greater. This introduced vertical equity into NFIP pricing for the first time — a vacation cottage and a mansion in the same flood zone no longer pay the same rate.
RR 2.0 produced a complex redistribution of premiums across the portfolio. Properties that had been paying zone-average rates higher than their individual risk warranted — many inland properties in Zone AE with low actual flood frequency — saw premium decreases. Properties that had been substantially underpriced relative to their individual risk — primarily high-value coastal properties in V/VE zones and severely repetitive loss properties — faced sharp increases.
Congress imposed a statutory phase-in cap: most policies cannot increase by more than 18% annually under RR 2.0. For properties facing, say, a tripling of their actuarially indicated rate, the phase-in will take many years to reach the full rate — meaning the NFIP continues to collect inadequate premiums on its highest-risk properties for an extended transition period. FEMA estimated that approximately 1.2 million policies were not renewed or were canceled in the first two years following RR 2.0 implementation, driven primarily by cost concerns among policyholders who experienced significant increases. The non-renewal rate was highest in Florida, Louisiana, and Texas — the states with the largest NFIP exposures.
National Flood Hazard Layer
The National Flood Hazard Layer (NFHL) is FEMA's authoritative GIS database of flood zone information nationwide. It consolidates the data from thousands of individual FIRM panels into a single spatially consistent dataset covering all participating communities. The NFHL is the source data that drives NFIP mandatory purchase determinations, local floodplain management, and the elevation certificate requirements that affect property insurance costs and mortgage availability.
Key components of the NFHL:
- Flood zone polygons. The SFHA boundaries and zone designations (A, AE, AH, AO, V, VE, X, etc.) for every mapped community. These polygons are the primary deliverable of the FIRM program and are updated on a rolling basis as new flood studies are completed or communities adopt new base maps.
- Base Flood Elevation lines. Cross-section data showing the BFE at specific locations along studied waterways, enabling determination of whether a specific structure's lowest floor is above or below the 1% annual chance flood elevation. Critical input to elevation certificates and LOMA applications.
- Floodway boundaries. The regulatory floodway is the channel and adjacent area that must be kept clear to carry the 1% annual chance flood without increasing BFEs more than one foot. Development within the floodway is subject to the most restrictive NFIP floodplain management standards; any encroachment requires a no-rise certification from a licensed engineer.
- FIRM panel boundaries. The spatial index of individual FIRM panels, each identified by an 11-character FIRM panel number. The panel number encodes the community identifier, panel number, and suffix indicating whether the panel has been updated and to what revision.
- Letters of Map Change (LOMC). Records of LOMAs (Letters of Map Amendment) and LOMRs (Letters of Map Revision) that modify the effective FIRM designation for specific properties or areas. A LOMA removes a property from the SFHA based on an elevation certificate showing the lowest adjacent grade is above the BFE; a LOMR revises the flood map for a broader area, typically following a flood control project completion or updated hydrological analysis.
Accessing the NFHL
FEMA distributes the NFHL through several channels suited to different use cases:
- Map Service Center (MSC). The primary public interface at
msc.fema.govallows property-level flood zone lookup, FIRM panel download, and LOMC search. Users can download effective FIRM panels as georeferenced PDFs or as GIS data in ESRI geodatabase format, organized by state and community. - NFHL WFS API. FEMA publishes a Web Feature Service at
hazards.fema.gov/gis/nfhl/services/public/NFHL/MapServer/WFSServer. The service provides programmatic access to NFHL feature layers including flood zones, BFE lines, floodways, and LOMC boundaries. Standard WFS query parameters including bounding box spatial filters and attribute filters by flood zone or community identifier are supported. No authentication is required. - Flood Map Change Viewer. FEMA's interactive map viewer at
fema.maps.arcgis.comshows proposed and pending FIRM changes alongside effective flood zones, enabling identification of communities where flood maps are currently under revision — a useful signal for mortgage lenders and property analysts monitoring future mandatory purchase requirement expansions. - Bulk NFHL download. The complete NFHL national geodatabase is available as a bulk download at
fema.gov/flood-maps/national-flood-hazard-layer. The file exceeds several gigabytes and is updated quarterly. State-level subsets are also available for users who need only a portion of the national dataset.
OpenFEMA API: claims and policy data
FEMA's OpenFEMA data platform at openFEMA.gov provides programmatic access to two NFIP datasets of particular analytical value: individual claims records and active policy records. Both are available as paginated JSON or CSV via a REST API with SoQL-style filter, select, and limit parameters. No API key is required.
FimaNfipClaims
The FimaNfipClaims dataset contains individual NFIP claims records going back to 1976, with one row per claim. As of 2024, the dataset contains approximately 2.5 million records covering more than $100 billion in total claims paid over the program's history. Key fields include:
- dateOfLoss and yearOfLoss. The date of the flood event that generated the claim. Enables temporal analysis and event identification;
yearOfLossis useful for annual grouping without full date parsing. - state and countyCode. State abbreviation and 5-digit FIPS county code. The primary geographic identifiers available in the public release; street address and exact ZIP are masked for privacy.
- reportedCity. The city name as reported by the policyholder. Less precise than county FIPS but useful for sub-county geographic analysis.
- floodZone. The flood zone designation of the insured property at the time of loss. Enables analysis of how much of the claims liability comes from properties in SFHAs versus Zone X.
- occupancyType. Whether the property is a single-family residence, 2–4 family dwelling, other residential, or non-residential. Distinguishes homeowner claims from commercial claims.
- amountPaidOnBuildingClaim, amountPaidOnContentsClaim, amountPaidOnIncreasedCostOfComplianceClaim. Dollar amounts paid for building coverage, contents coverage, and the ICC rider, which covers the cost of bringing a substantially damaged structure into compliance with current floodplain regulations (including mandatory elevation for structures with substantial damage exceeding 50% of pre-damage value).
- buildingDamageAmount. The estimated total structural damage, which may exceed the amount paid if the damage exceeds the policy limit.
- causeOfDamage. A coded field indicating the primary cause of flooding: storm surge, riverine flooding, alluvial fan flooding, tidal overflow, and others.
- originalConstructionDate. Year of construction. Enables identification of pre-FIRM structures, which historically received subsidized rates and remain analytically relevant for understanding the vintage and vulnerability of the insured stock.
FimaNfipPolicies
The FimaNfipPolicies dataset is a snapshot of active policies, updated periodically. Fields include flood zone, coverage amounts, annual premium, occupancy type, community name, and state. Unlike the claims dataset, the policy dataset represents the current in-force book of business rather than historical transactions. Key analytical uses:
- Computing the ratio of policies in force to housing units in flood zones (NFIP penetration rate) by county or state, using ACS housing unit counts as the denominator.
- Analyzing the distribution of coverage amounts to estimate the share of the insured portfolio that is at or near the $250,000 building coverage limit — and thus potentially underinsured for high-value properties that may face losses above the statutory cap.
- Tracking premium per policy by state to understand the cross-sectional pricing variation that RR 2.0 has introduced, including identifying states where average premiums have risen most sharply since October 2021.
- Estimating the NFIP's total exposure concentration — the share of total coverage in force located in specific states or counties — as a measure of catastrophe correlation risk for program solvency analysis.
API access pattern
The OpenFEMA REST API requires no authentication for public datasets. The base URL for NFIP claims is https://www.fema.gov/api/open/v2/FimaNfipClaims. The API supports the following query parameters: $filter (OData-style filter expressions using eq, ge, le, and and operators), $select (comma-separated list of fields to return), $limit (maximum records per response, capped at 10,000), $skip (offset for pagination), and $format (json or csv). Full field documentation is at openFEMA.gov/data/disasters/fimaNfipClaims.
Repetitive loss properties
Among the most analytically striking features of the NFIP is the extreme concentration of claims in a small fraction of the insured portfolio. Repetitive loss properties — those that have suffered two or more separate flood loss claims of at least $1,000 within any ten-year period — represent approximately 1% of NFIP-insured structures but have historically accounted for 25–30% of all claims paid.
Severe repetitive loss (SRL) properties — those with at least four claims of any amount, or at least two claims whose cumulative building payments exceed the property's value — number approximately 25,000 structures nationwide. Some of these properties have been paid out in claims that collectively exceed their market value multiple times over: a property worth $100,000 that has received $300,000 in NFIP claims payments over twenty years is not a hypothetical outlier but a documented category in FEMA's own internal records. The structure remains in the NFIP portfolio, insured at the maximum limit, in a location that floods repeatedly because it sits in a low-lying floodplain that cannot be economically protected by local flood control infrastructure.
FEMA's Hazard Mitigation Grant Program (HMGP) and the Flood Mitigation Assistance (FMA) grant program provide federal funding to buy out repetitive loss properties — purchasing the structure and land from the owner, demolishing the structure, and deed-restricting the land to open space in perpetuity. The buyout approach is politically difficult: owners who want to remain in their homes resist, and communities that depend on property tax revenue from riverfront or coastal parcels oppose buyout programs. But the arithmetic is straightforward: the federal government has paid out more in claims on SRL properties than the properties are worth, and will continue to do so unless the structures are removed from the floodplain. The FMA program allocates approximately $160 million annually for flood mitigation including buyouts — a fraction of what would be required to systematically address the existing repetitive loss inventory.
Write-Your-Own program and private flood insurance
The NFIP does not sell policies directly to consumers in most cases. Instead, it operates through the Write-Your-Own (WYO) program: private insurance companies sell and service NFIP policies under their own names, collect premiums, pay claims, and receive an expense allowance from FEMA of approximately 30% of written premiums. The key financial structure: WYO companies bear no underwriting risk. All claims are paid by FEMA from the National Flood Insurance Fund (and, when necessary, from Treasury borrowing). The WYO carriers are essentially administration contractors, not risk-bearing insurers, despite issuing policies under their own brand names.
The WYO expense allowance has been a persistent source of policy debate. Critics argue that paying private insurers 30% of premiums for administrative services — with FEMA bearing all the risk — is inefficient relative to direct government underwriting. Defenders argue that the WYO distribution network is essential to program penetration, particularly in markets where consumers would not seek out a government agency directly.
Private flood insurance market
The private flood insurance market began growing meaningfully after 2016 federal guidance clarified that private policies could satisfy the mandatory purchase requirement for federally backed mortgages. Lloyd's of London syndicates, Zurich, and a growing number of domestic specialty carriers now offer flood policies as either supplements to NFIP coverage (for amounts above the $250,000 building limit) or as complete alternatives that replace NFIP policies for properties where private pricing is more competitive.
Private flood insurance is generally more competitive than the NFIP for low-risk properties — structures in Zone X or elevated Zone AE properties where the actuarially indicated rate is low but the NFIP historically charged higher rates due to cross-subsidization of the broader pool. For high-risk properties — Zone VE coastal structures, severe repetitive loss properties — private carriers typically cannot compete with the government-subsidized NFIP rate, which is still below actuarial cost even after RR 2.0 phase-in increases. This adverse selection dynamic threatens to erode the cross-subsidy that holds the NFIP pool together: as low-risk properties migrate to private coverage, the NFIP is left with a higher-risk residual portfolio, worsening its actuarial position over time.
Code: analyzing NFIP claims with OpenFEMA
The following script uses the OpenFEMA API to pull Hurricane Harvey NFIP claims from Texas (August–September 2017), computes county-level summaries of total claims paid and average payout, breaks down claims by flood zone category (SFHA versus Zone X versus other), and then pulls all-time nationwide claims to rank states by average payout per paid claim. The script also demonstrates how to identify top ZIP codes or cities by total claims paid. No API key is required; the OpenFEMA API is publicly accessible without authentication.
import pandas as pd
import requests
# ---------------------------------------------------------------
# OpenFEMA NFIP Claims Analysis
# Datasets:
# FimaNfipClaims -- individual claims since 1976
# FimaNfipPolicies -- active policies (snapshot)
#
# API base: https://www.fema.gov/api/open/v2/
# Documentation: https://www.fema.gov/about/openfema/data-sets
#
# NOTE: Some sensitive fields (exact street address, full ZIP) are
# masked or fuzzed in the public release for privacy reasons.
# The reportedCity, countyCode, floodZone, and amountPaidOnBuildingClaim
# fields are available and sufficient for aggregate analysis.
# ---------------------------------------------------------------
BASE_URL = 'https://www.fema.gov/api/open/v2/FimaNfipClaims'
# ---------------------------------------------------------------
# Step 1: Pull Hurricane Harvey claims (Texas, August 2017)
# Filter by yearOfLoss=2017, state=TX, dateOfLoss between Aug 25
# and Sep 30 2017 (Harvey landfall Aug 25; extended rainfall through Sep).
# The API supports SoQL-style filtering via ?$filter= query param.
# Page size is capped at 10,000 records; we loop until exhausted.
# ---------------------------------------------------------------
def fetch_nfip_claims(filter_expr, select_cols, limit=10000):
"""Paginate through the OpenFEMA claims API and return a DataFrame."""
records = []
offset = 0
while True:
params = {
'$filter': filter_expr,
'$select': select_cols,
'$limit': limit,
'$skip': offset,
'$format': 'json',
}
resp = requests.get(BASE_URL, params=params, timeout=120)
resp.raise_for_status()
batch = resp.json().get('FimaNfipClaims', [])
if not batch:
break
records.extend(batch)
offset += len(batch)
print(f' Fetched {offset:,} records so far...')
if len(batch) < limit:
break
return pd.DataFrame(records)
HARVEY_FILTER = (
"yearOfLoss eq 2017 and state eq 'TX' "
"and dateOfLoss ge '2017-08-25' and dateOfLoss le '2017-09-30'"
)
COLS = (
'countyCode,reportedCity,floodZone,occupancyType,'
'amountPaidOnBuildingClaim,amountPaidOnContentsClaim,'
'amountPaidOnIncreasedCostOfComplianceClaim,'
'buildingDamageAmount,dateOfLoss,numberOfFloorsDamaged,'
'causeOfDamage,originalConstructionDate'
)
print('Fetching Hurricane Harvey NFIP claims (Texas, Aug-Sep 2017)...')
harvey = fetch_nfip_claims(HARVEY_FILTER, COLS)
print(f'Total Harvey claims retrieved: {len(harvey):,}')
# ---------------------------------------------------------------
# Step 2: Clean and type-cast monetary columns
# The API returns all values as strings; convert to float.
# Missing or blank monetary fields should be treated as 0.
# ---------------------------------------------------------------
money_cols = [
'amountPaidOnBuildingClaim',
'amountPaidOnContentsClaim',
'amountPaidOnIncreasedCostOfComplianceClaim',
'buildingDamageAmount',
]
for col in money_cols:
harvey[col] = pd.to_numeric(harvey[col], errors='coerce').fillna(0)
harvey['totalPaid'] = (
harvey['amountPaidOnBuildingClaim']
+ harvey['amountPaidOnContentsClaim']
+ harvey['amountPaidOnIncreasedCostOfComplianceClaim']
)
# ---------------------------------------------------------------
# Step 3: Summarize by Texas county
# countyCode is the FIPS county code (5 digits for TX: 48xxx).
# We compute: claim count, total paid, average paid, and
# share of claims in Special Flood Hazard Areas (zones A*, V*).
# ---------------------------------------------------------------
harvey['inSFHA'] = harvey['floodZone'].str.upper().str.startswith(('A', 'V'))
county_summary = (
harvey.groupby('countyCode')
.agg(
claimCount=('totalPaid', 'count'),
totalPaid=('totalPaid', 'sum'),
avgPaid=('totalPaid', 'mean'),
sfhaClaimCount=('inSFHA', 'sum'),
)
.reset_index()
)
county_summary['pctInSFHA'] = (
county_summary['sfhaClaimCount'] / county_summary['claimCount'] * 100
).round(1)
county_summary = county_summary.sort_values('totalPaid', ascending=False)
print()
print('Top 10 Texas counties by total Harvey NFIP claims paid:')
top10_counties = county_summary.head(10).copy()
top10_counties['totalPaid_M'] = (top10_counties['totalPaid'] / 1e6).round(1)
top10_counties['avgPaid_K'] = (top10_counties['avgPaid'] / 1e3).round(1)
print(
top10_counties[['countyCode', 'claimCount', 'totalPaid_M', 'avgPaid_K', 'pctInSFHA']]
.to_string(index=False)
)
# ---------------------------------------------------------------
# Step 4: Claims by flood zone category
# Zones: A/AE/AH/AO/AR/A99 = riverine SFHA (100-yr floodplain)
# V/VE = coastal SFHA with wave action
# X = outside 100-yr and 500-yr floodplain
# Other/blank = unmapped or pre-FIRM
# This breakdown reveals how much of Harvey's damage occurred
# outside mapped Special Flood Hazard Areas -- a well-documented
# feature of that storm, which flooded tens of thousands of
# properties that were NOT in an SFHA and had no flood coverage.
# ---------------------------------------------------------------
def zone_category(z):
if not isinstance(z, str) or not z.strip():
return 'Unknown/Pre-FIRM'
z = z.strip().upper()
if z.startswith('V'):
return 'Zone V (coastal wave action)'
if z.startswith('A'):
return 'Zone A (riverine SFHA)'
if z == 'X' or z.startswith('X '):
return 'Zone X (outside SFHA)'
return 'Other'
harvey['zoneCategory'] = harvey['floodZone'].apply(zone_category)
zone_summary = (
harvey.groupby('zoneCategory')
.agg(
claimCount=('totalPaid', 'count'),
totalPaid=('totalPaid', 'sum'),
avgPaid=('totalPaid', 'mean'),
)
.reset_index()
.sort_values('totalPaid', ascending=False)
)
zone_summary['totalPaid_M'] = (zone_summary['totalPaid'] / 1e6).round(1)
zone_summary['avgPaid_K'] = (zone_summary['avgPaid'] / 1e3).round(1)
print()
print('Harvey NFIP claims by flood zone category:')
print(
zone_summary[['zoneCategory', 'claimCount', 'totalPaid_M', 'avgPaid_K']]
.to_string(index=False)
)
# ---------------------------------------------------------------
# Step 5: Nationwide claims -- average payout by state (all years)
# Pull FimaNfipClaims with no date filter, group by state.
# This is a large dataset (2M+ rows); we pull only the columns
# we need and accept that pagination will take several minutes.
# ---------------------------------------------------------------
print()
print('Fetching all-time NFIP claims by state (this may take several minutes)...')
ALL_STATE_COLS = 'state,amountPaidOnBuildingClaim,amountPaidOnContentsClaim,yearOfLoss'
# For a faster run, limit to recent years with:
# filter_expr = 'yearOfLoss ge 2000'
state_claims = fetch_nfip_claims('', ALL_STATE_COLS)
for col in ['amountPaidOnBuildingClaim', 'amountPaidOnContentsClaim']:
state_claims[col] = pd.to_numeric(state_claims[col], errors='coerce').fillna(0)
state_claims['totalPaid'] = (
state_claims['amountPaidOnBuildingClaim'] + state_claims['amountPaidOnContentsClaim']
)
# Exclude zero-paid claims (denied or withdrawn) from average
paid_claims = state_claims[state_claims['totalPaid'] > 0]
state_summary = (
paid_claims.groupby('state')
.agg(
claimCount=('totalPaid', 'count'),
totalPaid=('totalPaid', 'sum'),
avgPaid=('totalPaid', 'mean'),
)
.reset_index()
.sort_values('avgPaid', ascending=False)
)
state_summary['totalPaid_B'] = (state_summary['totalPaid'] / 1e9).round(2)
state_summary['avgPaid_K'] = (state_summary['avgPaid'] / 1e3).round(1)
print()
print('Top 15 states by average NFIP claim payout (paid claims only):')
print(
state_summary.head(15)[['state', 'claimCount', 'totalPaid_B', 'avgPaid_K']]
.to_string(index=False)
)
# ---------------------------------------------------------------
# Step 6: Identify top 10 ZIP codes / cities by total claims paid
# Note: the public FimaNfipClaims file masks exact ZIP to a
# 3-digit prefix in some versions. reportedZipCode may be present
# or truncated. Fall back to reportedCity if not available.
# ---------------------------------------------------------------
ZIP_COLS = 'reportedZipCode,reportedCity,state,amountPaidOnBuildingClaim,amountPaidOnContentsClaim'
print()
print('Fetching top ZIP codes by all-time NFIP claims paid...')
zip_claims = fetch_nfip_claims('', ZIP_COLS)
for col in ['amountPaidOnBuildingClaim', 'amountPaidOnContentsClaim']:
zip_claims[col] = pd.to_numeric(zip_claims[col], errors='coerce').fillna(0)
zip_claims['totalPaid'] = (
zip_claims['amountPaidOnBuildingClaim'] + zip_claims['amountPaidOnContentsClaim']
)
zip_col = 'reportedZipCode' if 'reportedZipCode' in zip_claims.columns else 'reportedCity'
zip_summary = (
zip_claims[zip_claims['totalPaid'] > 0]
.groupby([zip_col, 'state'])
.agg(claimCount=('totalPaid', 'count'), totalPaid=('totalPaid', 'sum'))
.reset_index()
.sort_values('totalPaid', ascending=False)
.head(10)
)
zip_summary['totalPaid_M'] = (zip_summary['totalPaid'] / 1e6).round(1)
print()
print('Top 10 ZIP codes / cities by total all-time NFIP claims paid:')
print(zip_summary[[zip_col, 'state', 'claimCount', 'totalPaid_M']].to_string(index=False))Expected results from the Harvey analysis: Harris County (Houston) dominates the county rankings by both claim count and total paid. Montgomery County, Fort Bend County, and Brazoria County appear in the top ten, reflecting the geographic extent of Harvey's catastrophic multi-day rainfall event. The flood zone breakdown reveals that a substantial share of Harvey NFIP claims came from Zone X properties — structures outside the SFHA that had purchased voluntary flood insurance — with the corresponding implication that many more damaged Zone X structures had no insurance at all and are invisible to the NFIP data entirely. In the all-time state analysis, Louisiana and New Jersey tend to show the highest average payouts per claim, reflecting the high-value coastal exposures from Katrina and Sandy respectively.
Climate change and the actuarial gap
The NFIP faces a structural challenge that actuarial reform alone cannot fully address: the underlying flood risk it insures is increasing due to climate change, and the increase is not uniformly distributed across the portfolio.
NOAA's 2022 Sea Level Rise Technical Report projects that the US coastline will experience between 0.3 and 2.5 meters of sea level rise by 2100 under different emissions scenarios, with the most aggressive scenarios producing conditions where current 100-year flood events recur on annual or semi-annual schedules in some coastal communities. The current SFHA boundaries — based on historical hydraulic analysis calibrated to past flood records — will increasingly understate actual flood risk as sea levels rise and precipitation intensity shifts. FEMA's FIRM program does not update maps on a schedule designed to track real-time climate change; the typical map revision cycle runs years to decades depending on funding and community priority.
First Street Foundation, a nonprofit research organization, has developed an alternative flood risk model that incorporates projected sea level rise, changes in precipitation intensity, and other climate factors into its property-level risk assessments. First Street's published analyses consistently find that FEMA's SFHA designations undercount the number of properties at significant flood risk — particularly for inland pluvial (surface water / urban drainage) flooding, which FEMA's FIRM maps do not model systematically. First Street estimates that more than 14 million properties face significant flood risk that is not reflected in their current FIRM zone designations, with the gap concentrated in inland counties with inadequate stormwater infrastructure and in coastal communities where sea level rise projections have outpaced the last FIRM update.
The Congressional Budget Office estimated in its 2023 analysis that the NFIP faces expected annual losses materially in excess of premium revenue under current climate trajectories, even after RR 2.0 premium increases. The CBO report identified three structural responses available to Congress: continued actuarial-rate increases (with affordability mitigation for low-income policyholders), expanded buyout programs to reduce exposure in the most vulnerable areas, and acceptance of ongoing Treasury subsidization as an explicit policy choice to make flood insurance accessible in historically flood-prone communities. Congress has so far chosen the third option by default, repeatedly reauthorizing the NFIP without addressing the actuarial gap in a durable way.
Managed retreat and the limits of mitigation
The managed retreat concept — systematically relocating communities from areas that cannot economically sustain increasing flood risk — is gaining policy traction in academic and planning circles but faces profound political and legal obstacles in practice. FEMA's voluntary buyout programs require local government participation and individual property owner consent. Communities built in river deltas, coastal barrier islands, and low-lying riverine areas often have limited economic alternatives and strong cultural attachments to place.
State-level NFIP participation requirements add another dimension to the reform debate. Because communities must participate in the NFIP (adopt minimum floodplain management regulations) for their residents to access flood insurance, and because losing NFIP access effectively makes federally backed mortgages unavailable in that community, NFIP participation is functionally mandatory for any community with a measurable flood hazard. This gives FEMA significant leverage over local floodplain management standards but also means that premium increases and coverage restrictions affect not just insurance markets but the availability of mortgage credit and property values in flood-prone communities nationwide.
The repetitive loss portfolio sits at the center of this tension. The 25,000 SRL structures that have collectively absorbed 25–30% of all NFIP claims are not evenly distributed: they cluster in specific counties — coastal Louisiana, the Texas Gulf Coast, the New Jersey barrier islands, and inland river-flood communities in the Midwest — where the combination of geographic vulnerability and political resistance to managed retreat has produced a durable cycle of flooding, federal indemnity, and rebuilding in place. Under RR 2.0, these properties face the sharpest premium increases, the highest likelihood of non-renewal, and the strongest economic incentive for voluntary buyout — but the 18% annual phase-in cap means that market signals will take years to fully materialize for current owners.