Skip to content

🌀 disasters

U.S. discrete emergency-event data: FEMA disaster declarations, Public Assistance and Hazard Mitigation grant projects, NFIP flood-insurance policies and paid claims, NOAA storm events, and NIFC WFIGS wildfire perimeters. Each row is a bounded incident with a date, geographic footprint, and measurable damage — distinct from the continuous meteorological measurements in the weather schema. Enables disaster-risk analysis joined to SEC filings (state-of-incorporation exposure), econ employment, lands national forests (burned NF acreage), and FEC contributions.

19 datasets · 314 columns

disaster_declarations · table

Canonical FEMA disaster-declaration record. One row per disaster-declaration-county-program-area combination. Partitioned by fiscal year declared (fyDeclared). Joins to geo.counties via county_fips and to sec.filing_metadata by state for risk-disclosure research. Refreshed daily (declarations issued continuously within 24h of signature). Source: fema.gov/api/open/v2/DisasterDeclarationsSummaries. WARNING when using this table as a physical-hazard-exposure proxy: incident_type = 'Biological' covers the COVID-19 major disaster declarations of March-April 2020, issued once per state as a single non-geographic nationwide event. Left in a per-county or per-state declaration count, it registers as "a disaster" for nearly every county in the country and erases the physical-hazard variation a query is usually trying to measure. Filter incident_type != 'Biological' (or inspect the distinct incident_type values directly) before using declaration counts as a hazard-exposure or disaster-frequency metric.

Column Type Null Description
disaster_number integer no FEMA disaster number (e.g., 4611); join key across FEMA tables
fema_declaration_string string yes Composite declaration id (e.g., 'EM-3610-PR')
declaration_type string yes DR (major), EM (emergency), FM (fire mgmt), FS (fire suppression)
declaration_title string yes Declaration title (e.g., 'TROPICAL STORM ERNESTO')
declaration_date date yes Date of presidential declaration
incident_type string yes Hurricane / Flood / Tornado / Wildfire / Severe Storm / etc. Also includes 'Biological' (the COVID-19 declarations, issued once per state as a single nationwide event in March-April 2020, not a per-county physical hazard) -- exclude it before using this column to count or filter disasters as a hazard-exposure proxy.
incident_begin_date date yes Start of incident period
incident_end_date date yes End of incident period (null if ongoing)
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
designated_area string yes Human-readable designated area (e.g., 'Adjuntas (Municipio)')
region integer yes FEMA region number (1-10)
ih_program_declared boolean yes Individuals and Households Program declared — use this column for "was individual assistance activated," not ia_program_declared (D-285). FEMA's modern program name for the same concept individual filers know as "Individual Assistance"; confirmed live it varies genuinely with real disasters (e.g. true for Hurricane Harvey DR-4332-TX, which also carries a real lastIAFilingDate).
ia_program_declared boolean yes Source field iaProgramDeclared is FALSE for every row FEMA's API currently returns (confirmed live across hundreds of declarations spanning 2012-2026, including disasters unambiguously IA-activated in reality, e.g. Hurricane Harvey) — the field reads as dead/unpopulated at the source itself, not an ingest bug (D-285). Use ih_program_declared for a real individual-assistance signal; this column is kept only because it's still present in the raw feed, not because it carries information.
pa_program_declared boolean yes Public Assistance declared
hm_program_declared boolean yes Hazard Mitigation declared
tribal_request boolean yes Whether the declaration was a tribal request
id string no OpenFEMA row UUID (PK)

public_assistance_projects · table

FEMA Public Assistance grants to state/local governments and nonprofits for disaster recovery — approved project_amount, federal_share_obligated, and total_obligated (USD) per funded project worksheet. Largest dollar-value FEMA dataset; one row per project worksheet, partitioned by declaration year. Joins to disaster_declarations by disaster_number (many-to-one; not a declared FK) and to geo.counties via county_fips. Source: fema.gov/api/open/v2/PublicAssistanceFundedProjectsDetails.

Column Type Null Description
disaster_number integer yes FEMA disaster number (e.g., 4611); join key across FEMA tables
pw_number integer yes Project worksheet number
application_title string yes Project title
applicant_id string yes FEMA applicant id
declaration_date date yes Date of declaration (drives the year partition)
incident_type string yes Incident type (Hurricane, Flood, etc.)
damage_category_code string yes FEMA damage category code (A-G)
damage_category string yes Damage category description
project_status string yes Active / Closed / etc.
project_size string yes Large or Small
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
county_name string yes County/parish name
state_abbr string yes 2-char state abbreviation
project_amount double yes Approved project cost (USD)
federal_share_obligated double yes Federal obligation to date (USD)
total_obligated double yes Total obligated incl. non-federal share (USD)
hash string no OpenFEMA row hash (PK)

hazard_mitigation_projects · table

FEMA Hazard Mitigation Assistance projects (program_area: HMGP, BRIC, FMA, PDM, LPDM) — pre- and post-disaster resilience investment with project_amount, federal_share_obligated, and cost_share_percentage per project. One row per project, partitioned by program fiscal year (programFy). Joins to geo.counties via county_fips and to disaster_declarations by disaster_number (nullable for non-disaster BRIC/FMA programs). Source (API v4): fema.gov/api/open/v4/HazardMitigationAssistanceProjects.

Column Type Null Description
project_identifier string no HMA project identifier (PK; e.g., 'DR-1980-0019-F')
program_area string yes HMGP / BRIC / FMA / PDM / LPDM
disaster_number integer yes FEMA disaster number (e.g., 4611); join key across FEMA tables
region integer yes FEMA region number
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_name string yes State name
county_name string yes County name
project_type string yes Mitigation project type description
status string yes Project status (Approved / Closed / etc.)
recipient string yes Grant recipient (state/tribe)
subrecipient string yes Subrecipient (local government/entity)
date_approved date yes Date approved
date_closed date yes Date closed (null if open)
project_amount double yes Total project cost (USD)
federal_share_obligated double yes Federal share obligated (USD)
cost_share_percentage double yes Federal cost-share fraction (e.g., 0.75)

nfip_claims · table

Paid NFIP flood-insurance claims — amount_paid_building, amount_paid_contents, and amount_paid_icc per claim, plus total_building_coverage/total_contents_coverage for exposure context. One row per claim, partitioned by year of loss. Distinct from nfip_policies (policy-term coverage/premium transactions, not realized losses). Joins to geo.counties via county_fips and to disaster_declarations / wildfire_perimeters by county+date overlap. Source: fema.gov/api/open/v2/FimaNfipClaims. DEPRECATION WARNING (confirmed live 2026-09-11, D-283): OpenFEMA has deprecated this exact endpoint - its own API response metadata states the dataset is frozen (no further updates) since 2026-06-01 and will stop being served entirely after 2026-10-15, in favor of a renamed v3 dataset ("nfip-redacted-claims-v3", FIMA prefix dropped). Migrating this table's source URL/schema to the v3 dataset before that date is a separate, tracked follow-up - incremental updates will silently stop working once the old endpoint is pulled, though history already materialized here is unaffected.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes 2-char state abbreviation
date_of_loss date yes Date of flood loss
flood_zone string yes FEMA rated flood zone (AE, VE, X, etc.)
cause_of_damage string yes Cause-of-damage code
occupancy_type integer yes Occupancy type code (1=single family, etc.)
policy_count integer yes Number of policies represented by this claim record
amount_paid_building double yes Amount paid on building claim (USD)
amount_paid_contents double yes Amount paid on contents claim (USD)
amount_paid_icc double yes Amount paid on Increased Cost of Compliance claim (USD)
total_building_coverage double yes Total building insurance coverage (USD)
total_contents_coverage double yes Total contents insurance coverage (USD)
census_tract string yes 11-digit census tract FIPS
reported_zip_code string yes Reported ZIP code
latitude double yes Approximate latitude (to 1 decimal per FEMA privacy rules)
longitude double yes Approximate longitude
id string no OpenFEMA row UUID (PK)

nfip_policies · table

NFIP flood-insurance policy transactions — policy_cost, total_insurance_premium, total_building_coverage, and total_contents_coverage per policy term. One row per policy term. VERY LARGE (~74M rows all-history; several million per year). Partitioned by policy effective year. dqRowLimit caps DQ sampling; prod loads everything. Distinct from nfip_claims (realized paid losses, not premium/coverage). Joins to geo.counties via county_fips and census_tract. Source: fema.gov/api/open/v2/FimaNfipPolicies.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
property_state string yes 2-char property state abbreviation
policy_effective_date date yes Policy effective date (drives the year partition)
policy_termination_date date yes Policy termination date
flood_zone string yes FEMA rated flood zone
occupancy_type integer yes Occupancy type code
policy_count integer yes Number of policies represented
policy_cost double yes Policy cost (USD)
total_insurance_premium double yes Total insurance premium of the policy (USD)
total_building_coverage double yes Total building insurance coverage (USD)
total_contents_coverage double yes Total contents insurance coverage (USD)
federal_policy_fee double yes Federal policy fee (USD)
census_tract string yes 11-digit census tract FIPS
reported_zip_code string yes Reported ZIP code
latitude double yes Approximate latitude
longitude double yes Approximate longitude
id string no OpenFEMA row UUID (PK)

nfip_multiple_loss_properties · table

FEMA's own property-level NFIP repetitive-loss aggregation — one row per structure that has ever met a Repetitive Loss (RL) or Severe Repetitive Loss (SRL) threshold (~240k rows), with total_losses (paid-claim count since 1978) and most_recent_date_of_loss per property. Ingested as the authoritative answer to "how concentrated are flood claims in properties that flood repeatedly": nfip_claims has no property/building identifier, and lat/lon (rounded to 1 decimal) or census_tract are both far too coarse to derive a per-property repeat-claim count from claims alone (many distinct properties share one rounded coordinate or tract). This table is FEMA's own property-level rollup, not a proxy. nfip_rl/nfip_srl are the insurance-claims-based categories; fma_rl/fma_srl are the separate Flood Mitigation Assistance grant-eligibility categories (see column comments for the exact thresholds) — a property can qualify under either, both, or neither pair. mitigated_indicator/insured_indicator reflect current status as of as_of_date, so a property already bought out or demolished can still appear (per FEMA's own dataset description). census_block_group is not carried here: FEMA's own file renders it in lossy scientific notation (e.g. "2.2055E+11" for a 12-digit code), destroying the digits after the leading county FIPS — county_fips (from fipsCountyCode, full precision) is the reliable location join instead. Distinct from nfip_claims (realized paid losses, one row per claim, not per property) and nfip_policies (policy-term coverage/premium transactions). Joins to geo.counties via county_fips. Source: fema.gov/api/open/v1/NfipMultipleLossProperties.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes 2-char state abbreviation
county_name string yes County name, as published by FEMA (e.g. "LAFAYETTE PARISH")
zip_code string yes Reported ZIP code
reported_city string yes Reported city name
community_id_number string yes NFIP community identifier (ties to community/CID boundary data)
community_name string yes NFIP community name
flood_zone string yes FEMA rated flood zone (AE, VE, X, etc.)
latitude double yes Approximate latitude (to 1 decimal per FEMA privacy rules)
longitude double yes Approximate longitude
occupancy_type integer yes Occupancy type code (1=single family, etc.)
original_construction_date date yes Original date of the building's construction
original_nb_date date yes Date of the property's original (first) NFIP flood policy
post_firm_construction_indicator boolean yes True if construction began after the community's Flood Insurance Rate Map (FIRM) took effect (or after 1974-12-31, whichever governs insurance rating)
primary_residence_indicator boolean yes True if the structure is a primary residence
nfip_rl boolean yes NFIP insurance-claims Repetitive Loss: 2+ paid claims (building + contents) each over $1,000, within any 10-year period
nfip_srl boolean yes NFIP insurance-claims Severe Repetitive Loss: 4+ paid claims each over $5,000 with cumulative payments over $20,000, or 2+ building-only claims with cumulative payments exceeding the building's market value; claims must span 10 years
fma_rl boolean yes Flood Mitigation Assistance grant-eligibility Repetitive Loss: 2 flood damage events each costing on average 25%+ of the structure's value to repair
fma_srl boolean yes Flood Mitigation Assistance grant-eligibility Severe Repetitive Loss: same claim-count/dollar thresholds as nfip_srl, evaluated for FMA grant eligibility
mitigated_indicator boolean yes True if the property is currently mitigated (elevated, bought out, etc.) as of as_of_date
insured_indicator boolean yes True if the property currently carries an NFIP policy as of as_of_date
total_losses integer yes Total paid NFIP claims over $1,000 since 1978 for this structure — FEMA's own caveat: may be inflated by incorrectly linked structures
most_recent_date_of_loss date yes Most recent date of loss for a closed NFIP claim on this structure
as_of_date date yes Effective date of this snapshot, as published by FEMA
id string no OpenFEMA row UUID (PK)

ihp_housing_assistance_owners · table

FEMA Individuals and Households Program (IHP) housing assistance to HOMEOWNERS, one row per disaster number x county x city x ZIP (about 160,000 rows): valid registrations, FEMA inspections and the inspected damage in dollars and in bands, and the assistance approved (repair/replacement, rental, other needs). total_damage and the inspected_damage bands are FEMA's own measure of how much housing was damaged, which a declaration alone cannot tell (a few homes or thousands). Joins to disaster_declarations on disaster_number and to geo.counties on county_fips. county_fips is taken from the declaration of the same disaster number and county name in disaster_declarations' source (DisasterDeclarationsSummaries designated areas), which is how FEMA spells the area; it is null for tribal areas (FEMA gives them no county) and for area names no declaration lists, and those rows still carry the ZIP code to join geo.zip_county_crosswalk. The county is as the applicant reported it (the system infers it from the address and the applicant may override it). Aggregate to county with GROUP BY disaster_number, county_fips; the view disasters_ihp_housing_by_county does that for owners and renters together. Declared disasters from DR-1439 (November 2002) on; only registrations in Individual Assistance declared counties appear, so a county that was not IA-declared has no row. Source: fema.gov/api/open/v2/HousingAssistanceOwners.

Column Type Null Description
disaster_number integer yes FEMA disaster number (FK to disaster_declarations.disaster_number)
state_abbr string yes 2-letter USPS state abbreviation of the state where the disaster was declared (FK to geo.state_ref)
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
county_name string yes County as FEMA spells it, with its type in parentheses (for example Aransas (County), Orleans (Parish), San Juan (Municipio))
city string yes City of the registrant address
zip_code string yes 5-digit ZIP code of the registrant address (FK to geo.zcta_ref)
valid_registrations integer yes Valid FEMA registrations by owners in this disaster, county and ZIP (a valid registration is in an Individual Assistance declared county and inside the registration period)
average_inspected_damage double yes Average FEMA-inspected damage (USD) of the owners in this row who had a completed inspection
total_inspected integer yes Owners in this row who received a FEMA inspection
total_damage double yes Total damage recorded at the latest inspection (USD): FEMA Verified Loss on the home plus personal property; transportation damage not included
inspected_no_damage integer yes Inspected owners with no damage recorded
inspected_damage_1_to_10000 integer yes Inspected owners with FEMA-inspected damage between $1 and $10,000
inspected_damage_10001_to_20000 integer yes Inspected owners with FEMA-inspected damage between $10,001 and $20,000
inspected_damage_20001_to_30000 integer yes Inspected owners with FEMA-inspected damage between $20,001 and $30,000
inspected_damage_over_30000 integer yes Inspected owners with FEMA-inspected damage over $30,000
approved_for_assistance integer yes Applicants approved for IHP assistance
total_approved_ihp_amount double yes Total IHP assistance approved (USD), housing assistance plus other needs
repair_replace_amount double yes Repair and replacement assistance approved (USD)
rental_amount double yes Rental assistance approved (USD)
other_needs_amount double yes Other Needs Assistance approved (USD): personal property, transportation, medical, dental, funeral, tools, moving and storage
approved_1_to_10000 integer yes Registrations granted between $1 and $10,000
approved_10001_to_25000 integer yes Registrations granted between $10,001 and $25,000
approved_25001_to_max integer yes Registrations granted between $25,001 and the maximum grant
total_max_grants integer yes Registrations granted the maximum IHP grant
id string no OpenFEMA row UUID (PK)

ihp_housing_assistance_renters · table

FEMA Individuals and Households Program (IHP) housing assistance to RENTERS, one row per disaster number x county x city x ZIP (about 148,000 rows): valid registrations, FEMA inspections with a degree of damage (none, moderate, major, substantial; renters get no dollar damage figure because FEMA inspects only the items they own), and the assistance approved (rental, other needs; repair/replacement is not available to renters). Pair with ihp_housing_assistance_owners for the owner side. Joins to disaster_declarations on disaster_number and to geo.counties on county_fips. county_fips is taken from the declaration of the same disaster number and county name in disaster_declarations' source (DisasterDeclarationsSummaries designated areas), which is how FEMA spells the area; it is null for tribal areas (FEMA gives them no county) and for area names no declaration lists, and those rows still carry the ZIP code to join geo.zip_county_crosswalk. The county is as the applicant reported it (the system infers it from the address and the applicant may override it). Aggregate to county with GROUP BY disaster_number, county_fips; the view disasters_ihp_housing_by_county does that for owners and renters together. Declared disasters from DR-1439 (November 2002) on; only registrations in Individual Assistance declared counties appear, so a county that was not IA-declared has no row. Source: fema.gov/api/open/v2/HousingAssistanceRenters.

Column Type Null Description
disaster_number integer yes FEMA disaster number (FK to disaster_declarations.disaster_number)
state_abbr string yes 2-letter USPS state abbreviation of the state where the disaster was declared (FK to geo.state_ref)
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
county_name string yes County as FEMA spells it, with its type in parentheses (for example Aransas (County), Orleans (Parish), San Juan (Municipio))
city string yes City of the registrant address
zip_code string yes 5-digit ZIP code of the registrant address (FK to geo.zcta_ref)
valid_registrations integer yes Valid FEMA registrations by renters in this disaster, county and ZIP (a valid registration is in an Individual Assistance declared county and inside the registration period)
total_inspected integer yes Renters in this row who received a FEMA inspection
inspected_no_damage integer yes Inspected renters deemed to have no damage (renters get a degree of damage, not a full home inspection)
moderate_damage integer yes Inspected renters deemed to have moderate damage
major_damage integer yes Inspected renters deemed to have major damage
substantial_damage integer yes Inspected renters deemed to have substantial damage
approved_for_assistance integer yes Applicants approved for IHP assistance
total_approved_ihp_amount double yes Total IHP assistance approved (USD), housing assistance plus other needs
repair_replace_amount double yes Repair and replacement assistance approved (USD)
rental_amount double yes Rental assistance approved (USD)
other_needs_amount double yes Other Needs Assistance approved (USD): personal property, transportation, medical, dental, funeral, tools, moving and storage
approved_1_to_10000 integer yes Registrations granted between $1 and $10,000
approved_10001_to_25000 integer yes Registrations granted between $10,001 and $25,000
approved_25001_to_max integer yes Registrations granted between $25,001 and the maximum grant
total_max_grants integer yes Registrations granted the maximum IHP grant
id string no OpenFEMA row UUID (PK)

ihp_valid_registrations_by_county · table

FEMA Individuals and Households Program (IHP) valid registrations aggregated to one row per disaster number x county (about 11,000 rows over the 634 disasters from DR-1439, November 2002, on), from OpenFEMA IndividualsAndHouseholdsProgramValidRegistrations v2 (26.2 million registration-level rows). Per row: registrations and their split by owner/renter, primary residence, reported home damage, destroyed, flood damage and FEMA inspection; eligibility and award counts for IHP, Housing Assistance, Other Needs Assistance, SBA, Transitional Sheltering; homeowner and flood insurance; the self-reported gross income bands and household size; and the dollars awarded, FEMA verified loss and unmet need. Adds to ihp_housing_assistance_owners/_renters (which are disaster x county x city x ZIP, keyed on FEMA's area name): income bands, insurance, household size, awards by type, destroyed and unmet need exist only here; the county is the damaged dwelling's own county, so a tribal area's registrations are assigned to the counties they sit in (the owners/renters tables leave those with a null county); and the registrations are not limited to the rows the housing-assistance tables publish. Joins to disaster_declarations on disaster_number and to geo.counties on county_fips. county_fips is the registration's own fips; about 3 percent of the registrations (whole counties of some disasters) carry none and take the code from the declaration of the same disaster number, state and area name (counted in fips_from_declaration_registrations); those a declaration does not resolve to one county have a null county_fips and one row per state and area name (80 rows, 1.0 percent of registrations). Nearly all of those are FEMA's catch-all disaster numbers 6001, 6405, 6501, 6502 and 9801-9808 (about 264,000 registrations, 1.0 percent, among them 199,864 in Camden County GA under DR-6502): they have no declaration, so they join to nothing in disaster_declarations and carry dates that do not match a disaster. Only registrations in Individual Assistance declared counties appear. Amounts are sums over registrations and are 0, never null, when nothing was awarded. Source: the OpenFEMA bulk Parquet file of the dataset (fema.gov/about/reports-and-data/openfema/v2/ IndividualsAndHouseholdsProgramValidRegistrationsV2.parquet), aggregated with DuckDB.

Column Type Null Description
disaster_number integer no FEMA disaster number (FK to disaster_declarations.disaster_number)
state_abbr string yes 2-letter USPS state abbreviation of the damaged dwellings (most frequent value in the row)
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref); null only when neither the registrations nor the declarations give a code
county_fips string yes 5-digit county FIPS code of the damaged dwellings (FK to geo.counties); null for the registrations of a tribal or statewide area that no county code could be assigned to, which form one row per area name
county_name string yes County as FEMA spells it, with its type in parentheses; for a tribal area the area name (most frequent value in the row)
registrations long no Valid FEMA registrations in this disaster and county (a valid registration is in an Individual Assistance declared county and inside the registration period)
fips_from_declaration_registrations long no Registrations that carry no county code of their own and got it from the declaration of the same disaster number, state and area name (the housing-assistance tables' rule); the rest of the row's registrations carry their own
owner_registrations long no Registrations by owners of the damaged dwelling
renter_registrations long no Registrations by renters of the damaged dwelling
tenure_unknown_registrations long no Registrations where FEMA records neither owner nor renter
primary_residence_registrations long no Registrations where the damaged dwelling is the applicant's primary residence
home_damage_registrations long no Registrations where the applicant reported home damage
destroyed_registrations long no Registrations where FEMA marked the home destroyed (the majority of two or more major structural components needs replacing)
flood_damage_registrations long no Registrations with flood damage recorded
inspections_issued long no Registrations for which a FEMA inspection was issued
inspections_returned long no Registrations for which the issued FEMA inspection was performed
ihp_eligible_registrations long no Registrations eligible for the Individuals and Households Program (received a Housing Assistance and/or Other Needs Assistance award)
ihp_awarded_registrations long no Registrations with a total IHP award above zero
ha_eligible_registrations long no Registrations eligible for Housing Assistance
ona_eligible_registrations long no Registrations eligible for Other Needs Assistance
sba_approved_registrations long no Registrations approved for a Small Business Administration loan (approval, not acceptance)
tsa_eligible_registrations long no Registrations eligible for Transitional Sheltering Assistance
tsa_checked_in_registrations long no Registrations whose applicant checked in to a Transitional Sheltering Assistance property
homeowners_insurance_registrations long no Registrations whose applicant reports homeowner's insurance
flood_insurance_registrations long no Registrations whose applicant reports flood insurance
income_zero_registrations long no Registrations whose self-reported gross income is recorded as 0 (a code outside the six published ranges)
income_under_15000_registrations long no Registrations with self-reported gross income under $15,000
income_15000_to_30000_registrations long no Registrations with self-reported gross income $15,000-$30,000
income_30001_to_60000_registrations long no Registrations with self-reported gross income $30,001-$60,000
income_60001_to_120000_registrations long no Registrations with self-reported gross income $60,001-$120,000
income_120001_to_175000_registrations long no Registrations with self-reported gross income $120,001-$175,000
income_over_175000_registrations long no Registrations with self-reported gross income over $175,000
income_unreported_registrations long no Registrations with no gross income recorded
household_1_person_registrations long no Registrations from one-person households at the time of the disaster
household_2_person_registrations long no Registrations from two-person households
household_3_person_registrations long no Registrations from three-person households
household_4_person_registrations long no Registrations from four-person households
household_5_person_registrations long no Registrations from five-person households
household_over_5_person_registrations long no Registrations from households of more than five people
ihp_amount double no Total IHP award (USD): Housing Assistance plus Other Needs Assistance
ha_amount double no Housing Assistance awarded (USD): includes repair, replacement and rental assistance and other housing awards, so it is not the sum of those three columns
ona_amount double no Other Needs Assistance awarded (USD)
repair_amount double no Home repair assistance awarded (USD)
replacement_amount double no Home replacement assistance awarded (USD)
rental_assistance_amount double no Rental assistance awarded (USD), to owners and renters
personal_property_amount double no Other Needs Assistance awarded for personal property (USD)
transient_accommodation_amount double no Transient accommodations amount (USD)
flood_insurance_premium_amount double no Flood insurance premiums paid for the applicants by FEMA (USD)
real_property_verified_loss double no FEMA-verified disaster-caused damage to real property (USD): floors, walls, access roads, electrical, plumbing, HVAC; land damage is not included
personal_property_verified_loss double no FEMA-verified disaster-caused damage to personal property (USD): appliances, furniture
unmet_need_real_property double no FEMA real property verified loss minus the real property award (USD), summed over the registrations
unmet_need_personal_property double no FEMA personal property verified loss minus the personal property award (USD), summed over the registrations
flood_damage_amount double no FEMA-determined real and personal property damage due to flooding (USD)

storm_events · table

NOAA NCEI Storm Events Database — one row per storm event detail record (tornadoes, floods, hurricanes, hail, winter storms, wildfires, etc.) with event magnitude, direct/indirect deaths and injuries, and property/crop damage (damage_property, damage_crops; converted from K/M/B notation to USD). Partitioned by year, streamed from the per-year NCEI gzip CSV. Joins to geo.counties and to disaster_declarations by county+date overlap. state_fips/county_fips (D-284): NOAA's own STATE_FIPS uses 4 non-standard codes for Puerto Rico/Virgin Islands/Guam/American Samoa (99/96/98/97) instead of their real Census FIPS (72/78/66/60) — remapped so these join geo.state_ref like every other state. Confirmed live this also recovers county_fips for Puerto Rico and the Virgin Islands specifically (their CZ_FIPS values are real Census municipio/district codes once paired with the corrected state code — 7,905/7,905 and 60/60 county-type rows now join geo.counties). Guam and American Samoa's CZ_FIPS values are NOT real Census codes even after the state remap (e.g. Guam's storm_events rows use "002"/"003"/"006", but geo.counties only carries a single unified "66010"; American Samoa uses "002"/"003" against geo.counties' real five-district "010"-"050") — NOAA evidently numbers these two territories' zones on its own internal scheme with no Census county-equivalent mapping. Puerto Rico has a smaller, closed variant of the same problem: 6 codes (72002/72004/72006/72008/72010/72012, 331 rows total across 2004-2008 only) are NWS PR public-zone codes NCEI stamped as CZ_TYPE='C' rather than 'Z' — interleaved with real odd-numbered municipio FIPS (72001, 72003, ...) in the same 2004-2008 window before NCEI switched to real-FIPS-only from 2009 onward. Because a zone spans multiple municipios there is no 1:1 remap that could recover a real municipio code from a zone code, so StormEventsStreamingTransformer explicitly nulls county_fips for these 6 values instead of emitting an unresolvable FIPS. A second, unrelated residual: for a small number of county-type rows in the 50 states (confirmed live: 72 in Alaska across this table's full history, 49 in Georgia isolated to Jan-2025-published rows, 1 in Louisiana), CZ_FIPS itself doesn't match any real county FIPS at all — e.g. Georgia's early-2025 batch pairs real county names like "WALKER" with CZ_FIPS values ("2", "4", "6"...) that belong to no actual Georgia county. Confirmed this is wrong in NOAA's own published file, not an artifact of this ingest. Neither residual has a crosswalk that recovers the correct FIPS from what NOAA actually published; a LEFT JOIN to geo.counties silently drops these rows, expect the gap rather than treating it as a join bug. Zone-coded events (cz_type = 'Z', ~41% of rows and ~half of 2011-2023 property damage — mostly hurricane, wildfire, coastal flood and storm-surge events) have NULL county_fips by design: NOAA records an NWS zone number, not a county. cz_fips keeps that zone number and nws_zone_county maps it to counties: join on s.state_fips = z.state_fips AND s.cz_fips = z.zone. About 10% of zones span more than one county, so the join can fan out one event into several counties — damage summed after that join double counts unless allocated (e.g. divide by the zone's county count). Zone numbering follows the current NWS file; zones NWS retired or renumbered since the event do not match.

Column Type Null Description
event_id string no NCEI event id (PK)
episode_id string yes Episode id (groups related events)
begin_date date yes Event begin date
end_date date yes Event end date
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_name string yes State name (as published by NCEI)
event_type string yes Tornado / Flash Flood / Hurricane / Blizzard / etc.
cz_type string yes C (county), Z (NWS zone), M (marine)
cz_fips string yes NOAA's CZ_FIPS, zero-padded to 3 digits. A county FIPS suffix when cz_type = 'C'; the NWS public-zone number when cz_type = 'Z' (county_fips is NULL for those rows). Zone rows join to nws_zone_county on (state_fips, cz_fips = zone) to find the county or counties the zone covers.
cz_name string yes NOAA's CZ_NAME — county, NWS zone, or marine-area name for the row
magnitude double yes Event magnitude (wind speed, hail size; type-dependent)
magnitude_type string yes EG/ES/MS/MG magnitude type
injuries_direct integer yes Direct injuries
injuries_indirect integer yes Indirect injuries
deaths_direct integer yes Direct fatalities
deaths_indirect integer yes Indirect fatalities
damage_property double yes Property damage USD (converted from K/M/B notation)
damage_crops double yes Crop damage USD (converted from K/M/B notation)
begin_lat double yes Event begin latitude
begin_lon double yes Event begin longitude

wildfire_perimeters · table

NIFC WFIGS Interagency wildfire perimeters — one row per fire perimeter (~39k features) with a simplified WGS84 perimeter polygon (geometry_wkt), gis_acres/incident_size_acres/final_acres burned area, fire_cause (Human / Natural / Undetermined), and point-of-origin land ownership (landowner_kind: Federal / Private / Other; landowner_category: USFS, BLM, NPS, BIA, State, Tribal, City, County, etc.) and jurisdictional_agency — enabling federal-vs-nonfederal burn comparisons directly from this table. Snapshot table with no year partition (refreshed via overwritePartitions); fire_year is derived from the fire discovery date. Coverage follows the WFIGS layer, which is complete only from fire_year 2020 (about 4k-8k perimeters a year); 2016-2019 hold a handful of features in total, so this is not a national multi-decade history. Use gis_acres, not final_acres, for burned-area totals: final_acres is set only on certified final perimeters (under 20% of rows in any year). Joins to geo.counties via county_fips (from point-of-origin FIPS) and to nfip_claims for post-fire flood exposure. Source: WFIGS_Interagency_Perimeters/FeatureServer/0.

Column Type Null Description
incident_id string no WFIGS IRWIN id (PK)
incident_name string yes Fire incident name
unique_fire_identifier string yes NIFC unique fire identifier (year-unit-localnumber)
fire_year integer yes Year derived from fire discovery date
discovery_date date yes Fire discovery datetime (date part)
containment_date date yes Containment datetime (date part; null if active)
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
poo_state string yes Point-of-origin state (2-char abbreviation)
landowner_kind string yes Point-of-origin land ownership, top-level (Federal / Private / Other), from WFIGS attr_POOLandownerKind — the field a federal-vs-nonfederal wildfire comparison should filter/group on.
landowner_category string yes Point-of-origin land ownership, agency-level detail (USFS, BLM, NPS, BIA, State, Private, Tribal, City, County, DOD, BOR, DOE, USFWS, etc.), from WFIGS attr_POOLandownerCategory.
jurisdictional_agency string yes Agency with fire-management jurisdiction at point of origin (may differ from landowner_category under cooperative protection agreements), from WFIGS attr_POOJurisdictionalAgency.
fire_cause string yes Human / Natural / Undetermined
incident_type_category string yes WF (wildfire), RX (prescribed), etc.
gis_acres double yes GIS-calculated perimeter area in acres — the populated burned-area measure (about 70-99% of rows for fire_year 2020 onward); null where the source has no polygon area (about 31% of fire_year 2020 wildfires); use incident_size_acres where gis_acres is null. Includes prescribed burns (incident_type_category RX); filter to WF for wildfire totals.
incident_size_acres double yes Incident size in acres as reported on the incident record (attr_IncidentSize) — populated on about 99% of wildfire (WF) rows, including those with no polygon area, so it is the complete-coverage burned-area measure. It is the reported incident size, not a geometry-derived area, so it can differ from gis_acres. COALESCE(gis_acres, incident_size_acres) fills the gaps.
final_acres double yes Final fire size in acres, set by WFIGS only on certified final perimeters — null on most rows (under 20% populated in every fire_year), so SUM(final_acres) understates burned area by orders of magnitude; use gis_acres for totals.
centroid_lat double yes Perimeter centroid latitude (WGS84)
centroid_lon double yes Perimeter centroid longitude (WGS84)
geometry_wkt string yes Simplified WGS84 perimeter polygon as WKT (display/spatial join)

nws_zone_county · table

NOAA National Weather Service zone-to-county correlation file — one row per (NWS public forecast zone, county) pair, ~4,800 rows covering ~3,980 zones. Crosswalk for storm_events rows with cz_type = 'Z', whose county_fips is NULL: join storm_events.state_fips = state_fips AND storm_events.cz_fips = zone. A zone covering several counties appears once per county (~10% of zones), so the join fans out; count rows per (state_abbr, zone) to allocate. Built from every NWS release still downloadable (weather.gov/gis/ZoneCounty lists the current one; the Mar 2024 file is also still served): each zone takes its counties from the newest release containing it, recorded in release, so zones NWS has since retired stay joinable. Zones absent from all of those releases (e.g. Guam, parts of Louisiana) are not covered. zone_lat/zone_lon are NWS's zone centroid, repeated on each county row. Source: weather.gov (NWS), keyless.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes 2-letter USPS state abbreviation (NWS STATE)
zone string yes 3-digit NWS public-zone number within the state (matches storm_events.cz_fips)
state_zone string yes State abbreviation + zone number, e.g. NM201
zone_name string yes NWS zone name
county_name string yes County name (no state suffix)
cwa string yes NWS county warning area (forecast office id)
time_zone string yes NWS time zone code
zone_lat double yes Zone centroid latitude
zone_lon double yes Zone centroid longitude
release string yes Date (yyyy-mm-dd) of the NWS correlation-file release that supplied this zone. A zone retired in a later release keeps its counties from the last release that listed it.

wildfire_risk_by_county · table

USFS Wildfire Risk to Communities (WRC) county-level summary — one row per county, from the workbook's own "Counties" sheet (3,144 rows, one per US county/equivalent). Forward-looking hazard/exposure measures, not after-the-fact burn perimeters (see wildfire_perimeters for those). Metrics are building-fraction-based (buildings_fraction_minimal/indirect/direct_exposure), not raw Census housing-unit counts — the closest federal equivalent to a "housing-unit risk" statistic, but a building-count proxy rather than a literal housing-unit statistic. burn_probability_* and risk_*_rank are state/national percentile ranks (0-1), not raw probabilities. Complements disasters.wildfire_perimeters (which records only fires that already happened) with a genuinely forward-looking hazard measure. Joins to geo.counties via county_fips. Source: wildfirerisk.org (official USFS product, mandated by the 2018 Consolidated Appropriations Act; hosted off the .fs.usda.gov domain, same acceptable pattern already used for housing.hud_subsidized_housing).

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_abbr string yes 2-letter USPS state abbreviation
county_name string yes County name with state suffix, e.g. "Autauga County, AL"
total_buildings long yes Total building count in the county (WRC's own building inventory)
buildings_fraction_minimal_exposure double yes Fraction (0-1) of county buildings in the Minimal wildfire Exposure zone
buildings_fraction_indirect_exposure double yes Fraction (0-1) of county buildings in the Indirect wildfire Exposure zone (exposed to ember cast / radiant heat from a nearby fire, not direct flame contact)
buildings_fraction_direct_exposure double yes Fraction (0-1) of county buildings in the Direct wildfire Exposure zone
burn_probability_state_rank double yes Annual burn probability, percentile rank (0-1) within the county's state
burn_probability_national_rank double yes Annual burn probability, percentile rank (0-1) nationally
risk_state_rank double yes Risk to structures (burn probability x exposure x building value), percentile rank (0-1) within state
risk_national_rank double yes Risk to structures, percentile rank (0-1) nationally

fema_nri_earthquake_by_county · table

FEMA National Risk Index (NRI) county-level earthquake hazard, exposure, and expected-annual-loss data — one row per county (3,142 rows). Verified live 2026-09-11: San Francisco County CA earthquake_risk_rating "Relatively High" (San Andreas exposure); Story County IA "Very Low" (mid-continent). Also carries the NRI's overall all-hazard composite (risk_score/risk_rating/risk_national_pctl/risk_state_pctl, eal_score/eal_rating) for context, plus population/building_value/agriculture_value/ area for normalizing the earthquake measures. The source layer carries 17 other hazard blocks (wildfire, hurricane, flood, tornado, etc.) on the same 367-field schema — not ingested here; a follow-on sourcing item, not a gap in this table. Hosted on FEMA's own ArcGIS Online tenant (services.arcgis.com/XG15cJAlne2vxtgt), not the .fema.gov domain itself — same accepted "agency-hosted ArcGIS mirror" pattern as housing.opportunity_zones; re-verify the item id if this 404s (the canonical hazards.fema.gov/nri URLs only redirect to a landing page, not this data). Joins to geo.counties via county_fips.

Column Type Null Description
state_fips string yes 2-digit state FIPS code (FK to geo.state_ref)
county_fips string yes 5-digit county FIPS code (FK to geo.counties)
state_name string yes Full state name, as published by FEMA NRI
state_abbr string yes 2-letter USPS state abbreviation
county_name string yes County name (no state suffix)
population int yes County population (FEMA NRI's own 2016 vintage population figure)
building_value_usd double yes Total building value in the county (USD), FEMA NRI's own building inventory
agriculture_value_usd double yes Total agricultural value in the county (USD)
area_sq_mi double yes County land area in square miles
risk_score double yes NRI overall all-hazard composite risk score (not earthquake-specific)
risk_rating string yes NRI overall all-hazard composite risk rating (e.g. "Relatively High")
risk_national_pctl double yes NRI overall composite risk, national percentile (0-100)
risk_state_pctl double yes NRI overall composite risk, percentile within the county's own state (0-100)
eal_score double yes NRI overall all-hazard composite expected-annual-loss score
eal_rating string yes NRI overall all-hazard composite expected-annual-loss rating
earthquake_events double yes Historic earthquake event count used in NRI's earthquake model; null when FEMA has none on record for the county
earthquake_annualized_frequency double yes Annualized frequency of a damaging earthquake for the county
earthquake_exposure_building_value double yes Building value (USD) exposed to earthquake hazard
earthquake_exposure_population double yes Population exposed to earthquake hazard
earthquake_exposure_population_equivalence double yes Population converted to a USD-equivalent exposure value (FEMA NRI methodology)
earthquake_exposure_total double yes Total exposure (USD) — building value plus population equivalence
earthquake_historic_loss_ratio_buildings double yes Historic earthquake loss ratio for buildings
earthquake_historic_loss_ratio_population double yes Historic earthquake loss ratio for population
earthquake_historic_loss_ratio_rating string yes Historic earthquake loss ratio, overall rating
earthquake_eal_building_value double yes Expected annual loss (USD) to buildings from earthquake
earthquake_eal_population double yes Expected annual loss (population-equivalent units) from earthquake
earthquake_eal_population_equivalence double yes Expected annual population loss converted to a USD-equivalent value
earthquake_eal_total double yes Total expected annual loss (USD) from earthquake
earthquake_eal_score double yes Earthquake expected-annual-loss score
earthquake_eal_rating string yes Earthquake expected-annual-loss rating (e.g. "Very Low", "Relatively High")
earthquake_risk_score double yes Earthquake-specific hazard-type risk index score
earthquake_risk_rating string yes Earthquake-specific hazard-type risk index rating — the primary column for "which counties have high earthquake risk" questions (ops#191's original ask)

disasters_declarations_by_state_year · view

Annual disaster-declaration counts by state, incident_type, and year — disaster_count plus counts of declarations with IA (Individual Assistance, sourced from ih_program_declared - see disaster_declarations' own column comment, D-285: the source field behind ia_program_declared itself is dead at FEMA) and PA (Public Assistance) programs declared. Aggregates the county-program rows in disaster_declarations to distinct disasters per state/year/incident_type. Ready to join sec.filing_metadata on state for risk-disclosure research.

View — columns are resolved by the query engine at runtime.

disasters_pa_obligated_by_county · view

Public Assistance federal obligations aggregated by county, incident_type, and declaration year — project_count, total_project_amount, and total_federal_obligated (USD). Joins to geo.counties for mapping; a natural next join is to econ employment data for disaster-affected labor-market analysis.

View — columns are resolved by the query engine at runtime.

disasters_nfip_claims_by_county · view

Paid NFIP flood claims aggregated by county and year of loss — claim_count, total_paid_building, total_paid_contents, and total_paid (USD). Key measure of insured flood loss; joins to disaster_declarations and wildfire_perimeters by county for post-event exposure analysis.

View — columns are resolved by the query engine at runtime.

disasters_storm_impact_by_county · view

Storm-event human and economic impact aggregated by county and year — event_count, total_deaths, total_injuries, total_property_damage, and total_crop_damage (USD). Joins to disaster_declarations by county to link storm episodes to FEMA declarations, and to econ employment data for economic-impact research.

View — columns are resolved by the query engine at runtime.

disasters_ihp_housing_by_county · view

FEMA Individuals and Households Program housing assistance rolled up to county and disaster, owners and renters together: valid_registrations, inspected homes (owners_inspected, renters_inspected), owners_total_damage (USD, FEMA-inspected, owners only because renters have no dollar damage), owners_major_damage_over_30000 (owners whose inspected damage exceeded $30,000, the closest count to destroyed or uninhabitable homes), approved_for_assistance and total_approved_ihp_amount (USD). The county-level measure of how much housing a disaster damaged. Rows with a null county_fips (tribal areas, area names no declaration lists) are left out here; they stay in ihp_housing_assistance_owners and _renters with their ZIP codes. Join to disaster_declarations on disaster_number for the date and incident type, and to census.pep_components_of_change on county_fips and year for domestic migration.

View — columns are resolved by the query engine at runtime.