FEMA Disaster Declarations Scraper icon

Real estate · Lead generation

FEMA Disaster Declarations Scraper

Export US federal disaster declaration history straight from OpenFEMA — filter by state, county, incident type, declaration type and date range, paged and validated into clean JSON, CSV or Excel rows without hand-writing an OData client.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

OpenFEMA publishes every US federal disaster declaration — hurricanes, floods, fires, severe storms — back to 1953, but reaching a specific slice (one state, one county, one incident type, one date range) means hand-paging FEMA.gov or writing your own OData client against a filter syntax that rejects a malformed clause with a bare 400. This Actor builds that $filter expression from up to five inputs, pages it deterministically with $top/$skip, and hands back clean, typed rows — disaster number, declaration type, incident dates, program flags, county — ready for a spreadsheet or a risk model.

What we handle for you

  • 🧱 Multi-filter OData query building — combine state, county, incident type, declaration type and date range in one request instead of hand-writing $filter syntax.
  • 📄 Deterministic paging$top/$skip walked against OpenFEMA's own result count, capped by your maxResults, never over- or under-fetching.
  • Honest zero-row handling — a narrow filter that matches nothing finishes as a successful run with a clear status message, not a failed one.
  • 🔁 Retries transient 429/5xx responses with exponential backoff instead of failing the whole run.
  • 🧊 Per-record fault isolation — one malformed record is skipped and logged; it never takes down the rest of the run.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • Back a county-level insurance or restoration-contractor lead list with real declaration history.
  • Feed a real-estate risk model with disaster frequency by state or county.
  • Build an emergency-management consulting briefing on a state's declaration record.
  • Track new declarations for a state or incident type on a schedule.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
state string no 2-letter US postal code (e.g. FL). Leave empty for all states.
county string no Free-text county / designated-area match (e.g. Pinellas). Leave empty for all counties.
incidentType string no Free text, e.g. Hurricane, Flood, Fire. Leave empty for all incident types.
declarationType string no Restrict to one declaration type. Leave unset for all.
dateFrom string no Only declarations on or after this date, as YYYY-MM-DD. Leave empty for no floor.
dateTo string no Only declarations on or before this date, as YYYY-MM-DD. Leave empty for no ceiling.
maxResults integer no Hard cap on total rows fetched across all pages. Each row is one billed result event.
{
  "state": "FL",
  "incidentType": "Hurricane",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

fema_declaration_stringdisaster_numberstatedeclaration_typedeclaration_dateincident_typedeclaration_titleincident_begin_dateincident_end_datedesignated_areaia_program_declaredpa_program_declaredregion

{
  "fema_declaration_string": "DR-4734-FL",
  "disaster_number": 4734,
  "state": "FL",
  "declaration_type": "DR",
  "declaration_date": "2025-09-28T00:00:00.000Z",
  "fy_declared": 2025,
  "incident_type": "Hurricane",
  "declaration_title": "HURRICANE HELENE",
  "incident_begin_date": "2025-09-26T00:00:00.000Z",
  "incident_end_date": "2025-10-01T00:00:00.000Z",
  "disaster_closeout_date": null,
  "designated_area": "Pinellas (County)",
  "place_code": "12103",
  "ih_program_declared": true,
  "ia_program_declared": true,
  "pa_program_declared": true,
  "hm_program_declared": true,
  "region": 4,
  "last_refresh": "2026-01-05T10:12:00.000Z",
  "source_hash": "a1b2c3d4e5f6",
  "source_id": "5f8a1c2e-0000-0000-0000-000000000000",
  "fips_state_code": "12",
  "fips_county_code": "103",
  "incident_id": "5f9a1c2e-0000-0000-0000-000000000001"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result emitted$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

Limitations

  • Returns the declaration-summary fields OpenFEMA publishes — not the full disaster narrative or FEMA's individual-assistance case data.
  • county matches OpenFEMA's raw designatedArea text, which mixes formats (e.g. "Pinellas (County)"), so it is a substring match rather than a normalized county lookup.

FAQ

Do I need an API key?
No. OpenFEMA is a public, keyless API, so a run needs no credentials from you.
How far back does this go?
OpenFEMA's disaster declarations dataset goes back to 1953; leave the date fields empty to search the full history.
What happens if my filters match nothing?
The run finishes successfully with zero rows and a status message describing exactly what was searched — a narrow filter is not a failure.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run