# Fema Disaster Declarations Scraper (`kawsar/fema-disaster-declarations-scraper`) Actor

Extract official US disaster declaration summaries. Filter records by state, incident type, and date to instantly download structured data detailing emergency declarations and assistance programs as JSON, CSV, or Excel files.

- **URL**: https://apify.com/kawsar/fema-disaster-declarations-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## FEMA Disaster Declarations Scraper

<p align="center">
  <img src="https://imgur.com/OxFu3lt.png" alt="FEMA Disaster Declarations" style="max-width:100%; border-radius:14px; width:680px;" />
</p>

The **FEMA Disaster Declarations Scraper** is a reliable tool designed to pull comprehensive US disaster declaration summaries into clean, structured datasets. Whether you are building state archives, tracking specific emergency incidents, or analyzing assistance programs, this actor makes it easy to filter and export records directly to JSON, CSV, or Excel.

***

### Use Cases

- **State Archives:** Pull and maintain a complete historical record of disaster declarations for any state (e.g., tracking Texas declarations since 2024).
- **Incident Watch:** Filter by specific disaster types—such as Fire, Flood, or Hurricane—to isolate and export matching records.
- **Program Checks:** Quickly review which declarations activated Public Assistance (PA) or Individual Assistance (IA) programs.
- **Research Extracts:** Capture structured snapshots of disaster data for academic, governmental, or corporate research.
- **Scheduled Lists:** Run recurring filters on a schedule to automatically gather and append new declaration entries.

***

### Input Configuration

You can customize your data extraction using the following parameters:

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `declarations` | The dataset collection mode. |
| `state` | string | `""` (empty) | Two-letter state or territory code (e.g., `TX`). Leave blank to include all states. |
| `incidentType` | string | `""` (empty) | Filter by incident type (e.g., `Hurricane`, `Flood`, `Fire`). Leave blank for all types. |
| `declaredAfter` | string | `2024-01-01` | ISO date filter. Keeps rows with a declaration date on or after this day. |
| `maxItems` | integer | `100` | Maximum cap on dataset rows (hard maximum of 1000). |
| `timeoutSecs` | integer | `300` | Maximum runtime in seconds before stopping (maximum 3600). |
| `requestTimeoutSecs` | integer | `30` | HTTP timeout per request in seconds. |
| `proxyConfiguration` | object | `{"useApifyProxy": false}` | Optional proxy settings for the run. |

#### Example Input

```json
{
  "mode": "declarations",
  "state": "TX",
  "incidentType": "Fire",
  "declaredAfter": "2024-01-01",
  "maxItems": 100,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": { "useApifyProxy": false }
}

```

***

### Extracted Data Structure

Each designated area is saved as an individual dataset row containing rich details about the event.

#### Example Output Record

```json
{
  "femaDeclarationString": "EM-3656-AL",
  "disasterNumber": 3656,
  "state": "AL",
  "declarationType": "EM",
  "declarationDate": "2026-10-09T00:00:00.000Z",
  "fyDeclared": 2027,
  "incidentType": "Hurricane",
  "declarationTitle": "HURRICANE ISAIAS",
  "ihProgramDeclared": false,
  "iaProgramDeclared": false,
  "paProgramDeclared": true,
  "hmProgramDeclared": false,
  "incidentBeginDate": "2026-10-07T00:00:00.000Z",
  "incidentEndDate": null,
  "disasterCloseoutDate": null,
  "tribalRequest": false,
  "fipsStateCode": "01",
  "fipsCountyCode": "053",
  "placeCode": "99053",
  "designatedArea": "Escambia (County)",
  "declarationRequestNumber": "26168",
  "declarationRequestDate": "2026-10-09T00:00:00.000Z",
  "lastIAFilingDate": null,
  "incidentId": "2026100601",
  "region": 4,
  "designatedIncidentTypes": "H",
  "lastRefresh": "2026-10-10T11:06:28.933Z",
  "hash": "f7922180da55abc7e9de1732ed2ced54ff503a85",
  "id": "69a38bd7-692a-41bc-a705-df5d30d2c620",
  "scrapedAt": "2026-10-12T00:00:00+00:00"
}

```

#### Field Reference

- **femaDeclarationString**: Unique declaration code.
- **disasterNumber**: Official FEMA disaster number.
- **state**: Two-letter state or territory abbreviation.
- **declarationType**: Type classification code (e.g., DR, EM, FM).
- **declarationDate**: Timestamp of the declaration.
- **fyDeclared**: Federal fiscal year of the declaration.
- **incidentType**: Category of the disaster (Hurricane, Flood, Fire, etc.).
- **declarationTitle**: Official title given to the event.
- **ihProgramDeclared**: Boolean flag for Individuals and Households program.
- **iaProgramDeclared**: Boolean flag for Individual Assistance.
- **paProgramDeclared**: Boolean flag for Public Assistance.
- **hmProgramDeclared**: Boolean flag for Hazard Mitigation.
- **incidentBeginDate**: Start date of the incident.
- **incidentEndDate**: End date of the incident, if applicable.
- **disasterCloseoutDate**: Closeout date of the disaster, if applicable.
- **tribalRequest**: Boolean flag indicating tribal request.
- **fipsStateCode**: FIPS state code.
- **fipsCountyCode**: FIPS county code.
- **placeCode**: Geographic place code for the designated area.
- **designatedAreastring**: Name of the county, parish, or designated region.
- **declarationRequestNumber**: Request identification number.
- **declarationRequestDate**: Date the request was submitted.
- **lastIAFilingDate**: Final filing date for Individual Assistance, if applicable.
- **incidentId**: Incident identifier.
- **region**: Designated FEMA administrative region.
- **designatedIncidentTypes**: Short incident codes for the area.
- **lastRefresh**: Last record update timestamp.
- **hash**: Unique record hash.
- **id**: Unique record identifier (duplicate IDs in a single run are automatically filtered out).
- **scrapedAt**: UTC timestamp when the record was captured by the scraper.
- **error**: Included only on records that encounter an error.

***

### Pagination & Reliability

The scraper pages through records efficiently in structured batches. Requests are spaced out to ensure steady processing, and temporary network hiccups or rate limits trigger intelligent retries with gradual backoff intervals. If a specific filter returns an error response, the scraper logs the issue cleanly as an error row so that the rest of your run continues smoothly.

***

### Frequently Asked Questions

- **How many declarations can one run save?**
  The default item limit is 100, and you can raise it up to 1,000 items per run depending on your needs. The scraper will automatically page through the results in batches.
- **What happens if my filter configuration is invalid?**
  If a filter returns an error status, the scraper records it as an informative error row rather than crashing the entire run.
- **Can I export the resulting data?**
  Yes. Once the run finishes, you can download your dataset directly from Apify in JSON, CSV, or Excel formats.

***

#### Trademark Notice

FEMA Disaster Declarations and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

#### Disclaimer

Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or otherwise officially associated with FEMA Disaster Declarations or its owners. All data is collected from publicly available sources. Users are responsible for complying with the source's terms of use, rate limits, and attribution or licensing requirements.

# Actor input Schema

## `mode` (type: `string`):

Which OpenFEMA collection to export. declarations reads DisasterDeclarationsSummaries, one dataset row per designated area.

## `state` (type: `string`):

Two-letter US state or territory code, such as TX. Leave blank to include every state.

## `incidentType` (type: `string`):

OpenFEMA incident type, such as Hurricane, Flood, or Fire. Leave blank to include every type.

## `declaredAfter` (type: `string`):

Keep declarations on or after this ISO date (YYYY-MM-DD). Sent as an OData filter on declarationDate. Default is 2024-01-01.

## `maxItems` (type: `integer`):

Maximum dataset rows for this run, including error rows. Default is 100. Hard maximum is 1000.

## `timeoutSecs` (type: `integer`):

Stop before the next OpenFEMA request after this many seconds. Default is 300. Maximum is 3600.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for a single OpenFEMA HTTP response before retrying. Default is 30 seconds.

## `proxyConfiguration` (type: `object`):

Optional proxy for OpenFEMA requests. Default is no proxy. The public API does not require a proxy, and proxies are not used to get around published limits.

## Actor input object example

```json
{
  "mode": "declarations",
  "state": "TX",
  "incidentType": "Fire",
  "declaredAfter": "2024-01-01",
  "maxItems": 100,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

Default dataset URL for this run, with one row per disaster declaration or error.

## `overviewUrl` (type: `string`):

Table of declaration code, disaster number, state, type, date, fiscal year, incident, and title.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "declarations",
    "state": "",
    "incidentType": "",
    "declaredAfter": "2024-01-01",
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/fema-disaster-declarations-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "declarations",
    "state": "",
    "incidentType": "",
    "declaredAfter": "2024-01-01",
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("kawsar/fema-disaster-declarations-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "declarations",
  "state": "",
  "incidentType": "",
  "declaredAfter": "2024-01-01",
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call kawsar/fema-disaster-declarations-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/fema-disaster-declarations-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lOAGKZLbZctPrk1bP/builds/ujIOk15Y5Sh4jlZ98/openapi.json
