FEMA Disaster Recovery Tracker: All 50 States
Pricing
from $4.25 / 1,000 fema records
FEMA Disaster Recovery Tracker: All 50 States
Track FEMA disaster recovery money in all 50 states, DC, and US territories: Public Assistance projects, obligations, and applicants, Hazard Mitigation grants, and Individual Assistance. Filter by state, county, disaster, date, incident type, and amount, or monitor for new and changed records.
Pricing
from $4.25 / 1,000 fema records
Rating
0.0
(0)
Developer
ManiGinaM
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Get a feed of new FEMA disaster recovery money as it is obligated, in all 50 states, DC, and US territories. Pick a state, a disaster, or a type of disaster, turn on monitor mode, and schedule the Actor: each run delivers only the Public Assistance projects, obligations, applicants, Hazard Mitigation grants, and housing assistance totals that are new or changed since the last run, and you pay only for those records.
Monitor mode
Set onlyNewOrChanged to true and add a schedule, for example every weekday at 7 AM Central. The Actor keeps a history for that exact search in a named key-value store, fema-disaster-recovery-tracker-monitor. The first run delivers every matching record as new. Later runs deliver only records FEMA added (new) and records whose FEMA data changed (changed). Unchanged records are skipped and never charged.
A record counts as changed when its sourceHash moves. That is FEMA's own row hash where FEMA publishes one, and otherwise a SHA-256 of every field in the row except FEMA's bookkeeping id and refresh time. So a new obligation, a revised project amount, a status change, or a new closeout date all show up, while FEMA's nightly refresh of an unchanged row does not.
Good to know before you rely on it:
- History is keyed on the dataset and every filter: states, counties, disaster numbers, declaration dates, incident types, and minimum amount. Order and letter case do not matter, and neither does
maxResults. Change any filter, including a declaration date you move forward, and the Actor starts a fresh history and reports every matching record asnewagain. Keep the filters fixed for a monitor. - Each run stops after delivering
maxResultsrecords, so set it high enough for a busy week after a major disaster. - Grant award activities are one row per obligation, so in this dataset every row is a new event and only ever shows up as
new. - Two schedules running the same search at the same time share one history, and the run that finishes last wins.
- Each search's history holds the 100,000 records delivered most recently. Past that, the record delivered longest ago is forgotten and would be reported as
newif it ever came back. - If the saved history ever becomes unreadable, the run fails with a message naming the record to delete, instead of charging you again for every record.
What does it do?
The Actor reads FEMA's free OpenFEMA API and returns one clean record per row in the same shape for every dataset: disaster number and name, declaration date, incident type, state, county, city and ZIP when FEMA has them, recipient, project title, category, status, approved and obligated dollars, the key dates, a link to the disaster on fema.gov, and every original FEMA field under details.
dataset | What one record is | Rows at OpenFEMA (October 2026) |
|---|---|---|
paFundedProjects | A Public Assistance project (project worksheet) with its approved and obligated dollars | about 851,000 |
paAwardActivities | One Public Assistance obligation, including negative amounts when FEMA reduces one | about 1,227,000 |
paApplicants | A state, local, tribal, or nonprofit applicant for Public Assistance, with its address | about 200,000 |
hmaSubapplications | A Hazard Mitigation Assistance subapplication (HMGP, BRIC, FMA, and others) | about 64,000 |
ihpHouseholds | One Individuals and Households Program registration, with no names or addresses | about 26,250,000 |
housingOwners | Housing assistance to homeowners, totaled by disaster, county, city, and ZIP code | about 161,000 |
housingRenters | Housing assistance to renters, totaled by disaster, county, city, and ZIP code | about 148,000 |
Public Assistance projects carry only an applicant id, so the Actor fills in recipientName from FEMA's applicants dataset. Every record gets its disaster name, declaration date, and incident type from FEMA's disaster declarations catalog, so the incident type wording is the same in every dataset. There is no browser, no proxy, no login, and no API key.
Who is it for?
- Disaster restoration, debris, roofing, and rebuilding contractors looking for funded projects and the parishes, counties, and agencies receiving them.
- Grant writers and Hazard Mitigation consultants tracking obligations, subapplications, and closeouts for clients.
- Insurers, reinsurers, and lenders measuring federal assistance by ZIP code after a storm.
- Journalists, researchers, and watchdog groups following where recovery money goes.
- Emergency management and public finance consultants benchmarking one disaster against another.
How to use
- Open the Actor in Apify Console and pick a FEMA dataset, such as Public Assistance funded projects.
- Pick one or more states and, if you know them, disaster numbers.
- Optionally narrow the search under Filters by county, declaration date, incident type, or amount.
- Click Start and wait for the run to finish.
- Open the Output tab to preview records, then export them as JSON, CSV, Excel, or XML.
- To watch for new and changed records, turn on monitor mode and add a schedule.
Input
| Field | Type | Description |
|---|---|---|
dataset | dataset | One of the seven datasets above. Default paFundedProjects. |
states | list of states | Two-letter state or territory codes, for example TX, FL, LA, or PR. Empty means the whole country. |
counties | list of names | County, parish, or borough names such as Jefferson Parish or Harris. The word County, Parish, or Borough is optional and St. matches Saint. Records with no county, or marked Statewide, are left out when this is set. Not available for paApplicants. Up to 100. |
disasterNumbers | list of text | FEMA disaster numbers written as text, for example "4673" for Hurricane Ian in Florida or "4332" for Hurricane Harvey in Texas. Up to 200. |
declaredSince | date | Earliest disaster declaration date, YYYY-MM-DD. |
declaredUntil | date | Latest disaster declaration date, YYYY-MM-DD, inclusive. |
incidentTypes | list of incident types | FEMA incident types such as Hurricane, Flood, Severe Storm, or Fire. |
minAmount | number | Keep only records with at least this many dollars: obligated for Public Assistance and Hazard Mitigation, approved for household and housing assistance. Not available for paApplicants. |
maxResults | number | Most records to deliver in one run. Default 1000, maximum 500,000. |
onlyNewOrChanged | true or false | Monitor mode. Delivers only records that are new or changed since the previous run of the same search. |
Records come newest disaster first. Declaration dates and incident types are matched against FEMA's disaster declarations catalog first, then the dataset is searched for those disasters. Hazard Mitigation subapplications that are not tied to a disaster (for example BRIC and Flood Mitigation Assistance grants) have no disaster number, so they are left out when you filter by disaster, declaration date, or incident type.
Sample input:
{"dataset": "paFundedProjects","states": ["FL", "GA", "SC", "NC"],"incidentTypes": ["Hurricane"],"declaredSince": "2020-01-01","minAmount": 1000000,"maxResults": 5000,"onlyNewOrChanged": true}
Output
Each record is one dataset item. This is a real Public Assistance project from Hurricane Ida in Louisiana:
{"dataset": "paFundedProjects","recordKey": "paFundedProjects:4611|000-U04A1-00|430","disasterNumber": 4611,"disasterTitle": "HURRICANE IDA","declarationDate": "2021-08-29","incidentType": "Hurricane","state": "LA","county": "Statewide","city": null,"zipCode": null,"recipientId": "000-U04A1-00","recipientName": "Louisiana Department of Transportation and Development","title": "OPER100 / Emergency Protective Measures","category": "B - Emergency Protective Measures","status": "Eligible","amountApproved": 15005039.37,"amountObligated": 15005039.37,"firstObligatedDate": "2022-05-16","lastObligatedDate": "2022-05-16","appliedDate": null,"sourceLastRefresh": "2026-07-23T18:44:06.680Z","sourceHash": "1e522f99b16705eba33918b571d1d20ae4c48968","femaDisasterUrl": "https://www.fema.gov/disaster/4611","suspectDates": null,"details": {"disasterNumber": 4611,"declarationDate": "2021-08-29T00:00:00.000Z","incidentType": "Hurricane","pwNumber": 430,"applicationTitle": "OPER100 / Emergency Protective Measures","applicantId": "000-U04A1-00","damageCategoryCode": "B","damageCategoryDescrip": "Emergency Protective Measures","projectStatus": "Eligible","projectProcessStep": "Obligated","projectSize": "Large","county": "Statewide","countyCode": "33","stateAbbreviation": "LA","stateNumberCode": "22","projectAmount": 15005039.37,"federalShareObligated": 15005039.37,"totalObligated": 15005039.37,"lastObligationDate": "2022-05-16T00:00:00.000Z","firstObligationDate": "2022-05-16T00:00:00.000Z","mitigationAmount": 0,"gmProjectId": 667369,"gmApplicantId": 127405},"changeType": "notTracked"}
You can download results as JSON, CSV, Excel, or XML, or read them through the Apify API.
recordKeyidentifies a record within its dataset and is what monitor mode remembers.amountApprovedis the project amount for Public Assistance projects, the federal share for Hazard Mitigation, and the approved assistance for households and housing.amountObligatedis what FEMA has obligated, and is empty for datasets that do not report it.countyreads likeJefferson ParishorHarris Countyacross datasets. Public Assistance records for a whole state readStatewide. Hazard Mitigation records list the benefiting counties as FEMA spells them, separated by semicolons.detailskeeps every field FEMA published for the row, so nothing is lost.- Dates are calendar days,
YYYY-MM-DD. Any date later than tomorrow in Central time is not credible, so it is published as null and its raw value is kept insuspectDatesunder the field name. changeTypeisneworchangedin monitor mode andnotTrackedotherwise.
Pricing
This Actor uses pay-per-event pricing.
- FEMA record: $5.00 per 1,000 records delivered to your dataset ($0.005 each).
- Actor start: Apify's standard start event ($0.00005).
- There is no separate charge per dataset item.
Every Public Assistance project for Hurricane Harvey in Texas is about 6,600 records, or about $33, and Hurricane Ida in Louisiana is about 3,650 records, or about $18. A weekly monitor of one state's Public Assistance projects often delivers a few dozen new or changed records, so it costs well under a dollar a week. You can cap any run with maxResults or Apify's maximum charge setting, and Apify may apply a default maximum charge to runs started without one, so raise it for a full pull. The Actor stops cleanly at your limit, and you are charged only for records that actually reach your dataset.
Estimated compute cost
Default memory is 512 MB. The Actor reads up to 10,000 rows per request (2,000 for the larger household and Hazard Mitigation rows) with at least one second between requests. Measured on Apify at 512 MB, 100 Hurricane Ida project records took 8 seconds and about $0.001 in platform usage, and 1,586 records took 6 seconds and about $0.008. Most of that is dataset storage writes, about $0.005 per 1,000 records, while compute is a fraction of a cent per run. Searches that filter by county read rows they do not deliver, so a county search across a very large dataset such as household registrations can take a few minutes, still only cents in compute.
Data source and freshness
Data comes from OpenFEMA, FEMA's public data API at https://www.fema.gov/api/open/. FEMA updates each dataset on its own schedule, from daily to monthly, and sourceLastRefresh shows FEMA's refresh time when the dataset has one.
- Public Assistance Funded Projects Details:
v2/PublicAssistanceFundedProjectsDetails - Public Assistance Grant Award Activities:
v2/PublicAssistanceGrantAwardActivities - Public Assistance Applicants:
v1/PublicAssistanceApplicants - Hazard Mitigation Assistance Subapplications:
v2/HmaSubapplications, which replaced the older Hazard Mitigation project datasets FEMA retired in October 2026 - Individuals and Households Program Valid Registrations:
v2/IndividualsAndHouseholdsProgramValidRegistrations - Housing Assistance Program Data, Owners and Renters:
v2/HousingAssistanceOwnersandv2/HousingAssistanceRenters - Disaster names and declarations:
v1/FemaWebDisasterDeclarations
The Actor pages with OData $top and $skip, waits at least a second between requests, retries server errors politely, and honors Retry-After. If OpenFEMA asks the run to wait more than a minute, or stays down after several retries, the run stops with a short message and keeps every record it already delivered. Run it again later. If FEMA inserts rows while a long run is paging, a row can shift onto a later page; the Actor remembers the most recent deliveries so a shifted row is not delivered or charged twice.
Is it legal to use this data?
OpenFEMA is a public API that FEMA publishes for anyone to use, and works of the U.S. federal government are generally not subject to copyright. Household registration data has no names or addresses. The data is provided as is, without any guarantee that it is complete or current. Confirm anything important with FEMA or the grant recipient. This Actor is an independent tool and is not affiliated with or endorsed by FEMA or the U.S. Department of Homeland Security.
API and integrations
You can start this Actor and read its results with the Apify API, the Apify Python and JavaScript clients, or the Apify CLI. The API returns each run's dataset in the same formats as the Console.
Apify integrations can pass results on when a run finishes, for example to Google Sheets, Slack, Zapier, Make, or your own webhook. Set them up on the Actor's Integrations tab, and pair them with a schedule for a hands-off feed.
FAQ
Do I need an OpenFEMA account or API key? No. OpenFEMA is free and open.
How do I find a disaster number? Search the disaster on https://www.fema.gov/disaster/declarations. The number is in the page address, for example 4673 for Hurricane Ian in Florida. You can also filter by incidentTypes and declaredSince instead of naming disasters.
Why does a county filter miss some Public Assistance projects? FEMA records statewide projects, often the largest ones, as Statewide instead of under a county. Run without counties to include them.
Why are some Hazard Mitigation amounts missing? FEMA reports an obligated amount only once money is obligated, so subapplications still under review show an empty or zero amountObligated. amountApproved carries the federal share FEMA lists for the subapplication.
Related Actors
- US EPA ECHO Compliance Monitor: EPA facilities, violations, and enforcement cases in all 50 states.
- Louisiana Building Permits (Baton Rouge, NOLA): Baton Rouge and New Orleans building permits.
- Louisiana Distressed Property & Sheriff Sale Leads: sheriff sales, blight, and tax-adjudicated property leads in Louisiana.
- East Baton Rouge Absentee Owner Parcel Leads: East Baton Rouge Parish parcels with owner mailing addresses and absentee flags.
- Gulf Coast USACE Permits & Wetland Monitor: U.S. Army Corps of Engineers permits and wetland determinations on the Gulf Coast.
Feedback and custom requests
Found a bug, a wrong value, or a source that changed? Open an issue in the Issues tab on this Actor's page. Need another field, filter, or source, or a version built for your team? Describe it in the Issues tab as a custom request.