# NOAA Storm Events Database Scraper (`parseforge/noaa-storm-events-scraper`) Actor

Scrapes NOAA storm event records by type, state, and year. Returns each event as a flat row with location, magnitude, casualties, and damage estimates.

- **URL**: https://apify.com/parseforge/noaa-storm-events-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, News
- **Stats:** 2 total users, 1 monthly users, 86.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.00 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### NOAA Storm Events Database Scraper

**Scrape NOAA storm events by type, state, and year, up to a million records per run.** Each event includes location, magnitude, injuries, fatalities, and property damage estimates. Export to CSV, JSON, Excel, or XML.

NOAA's public Storm Events Database holds decades of severe weather records, but the web interface limits you to one query at a time. This Actor reads the database directly, filtering by event type, U.S. state, and year, and returns every matching storm event in a consistent flat schema. No API key or registration required.

| Who uses it | What they scrape NOAA Storm Events Database for |
|---|---|
| Insurance analysts | Compile historical severe weather claims data by region and event type. |
| Climate researchers | Build long-term datasets of tornado, hail, or flood frequency for trend analysis. |
| Emergency managers | Audit past storm impacts in a county to prioritize mitigation funding. |
| Journalists | Fact-check storm damage and casualty figures for investigative reporting. |

### What it does

This Actor collects NOAA storm event records by event type, state, and year, and returns each one as a flat row with location, magnitude, casualties, and damage data.

- 🌪️ **Event type filter:** Choose from 22 categories including Tornado, Hail, Hurricane, Wildfire, and Winter Storm.
- 🗺️ **State filter:** Limit results to a single U.S. state or pull events from all states and territories.
- 📅 **Year selector:** Target any year from 1950 to the present, one year per run.
- 📊 **Damage and casualty data:** Each record includes property damage, crop damage, injuries, and fatalities where reported.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with NOAA Storm Events Database data

**🌪️ Build a tornado climatology.**

A researcher scrapes all Tornado events for Oklahoma from 1950 to 2023 to map changes in outbreak frequency and track length.

**💰 Validate insurance exposure.**

An underwriter pulls hail events in Texas for the last five years to cross-check policyholder claims against NOAA's official damage estimates.

**📰 Fact-check disaster reporting.**

A journalist scrapes Hurricane events for Florida in a given year to verify official fatality and damage figures before publication.

**🚨 Audit county-level emergency response.**

An emergency manager collects all Flash Flood events in their state for a decade to identify the most frequently impacted counties and justify grant applications.

### Why choose this scraper

| | What you get |
|---|---|
| **No API key needed** | Reads the public NOAA database directly with no registration or rate limits. |
| **Fixed flat schema** | Every event returns the same fields, ready for analysis or a database load. |
| **Bulk export** | Save results as CSV, JSON, Excel, or XML for use in any tool. |
| **Historical depth** | Access storm records back to 1950 for long-term studies. |

### How it compares

No other Store actor targets NOAA Storm Events Database the same way, so the honest comparison is with the alternatives teams actually weigh.

| | NOAA Storm Events Database Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When NOAA Storm Events Database changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor by selecting an event type, a U.S. state, and a year, and set a maximum number of events to cap the run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "maxItems": 10
}
```

A larger pull:

```json
{
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [NOAA Storm Events Database Scraper](https://apify.com/parseforge/noaa-storm-events-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to NOAA Storm Events Database through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/noaa-storm-events-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your combination of event type, state, and year exists in the database. Some event types are rare in certain states. Try broadening your filters, for example by setting state to 'All' or event type to 'All', and run again.

**The run stopped before collecting all events I expected.**

You likely hit the 'Maximum storm events' limit you set. Increase that number and rerun. If you did not set a limit, the database may not have more records for your chosen filters.

**Some fields are empty in my output.**

NOAA does not always populate every field for every event. Missing data is common for older records or less severe events. This is expected and not a scraper error.

**The Actor is taking a long time to finish.**

Large queries, especially 'All' event types for a full year, can return hundreds of thousands of records. Set a lower max items limit for a faster test run, then scale up when you confirm the output.

### FAQ

| Question | Answer |
|---|---|
| What storm event types can I scrape? | You can filter by 22 event types including Tornado, Hail, Thunderstorm Wind, Flash Flood, Hurricane, Winter Storm, Wildfire, Blizzard, Heat, and more. Select 'All' to pull every type in one run. |
| Can I get data for multiple states at once? | The state filter selects one state per run. To collect data for multiple states, run the Actor once per state and merge the datasets. |
| How far back does the data go? | The NOAA database starts in 1950. You can set the year input to any value from 1950 up to the current year. |
| Does this include property and crop damage estimates? | Yes. Each storm event record includes property damage and crop damage figures, along with injuries and fatalities when the database reports them. |
| Is an API key or NOAA account required? | No. The Actor reads the public NOAA Storm Events Database directly. You do not need to register an application or manage OAuth tokens. |
| What output formats are supported? | You can export your dataset as CSV, JSON, Excel, or XML from the Apify platform. |
| Can I limit how many events the Actor collects? | Yes. Set the 'Maximum storm events' input to cap the run at a specific number, from 1 up to 1,000,000 records. |
| Does the Actor handle pagination automatically? | Yes. It follows the database's paging until it reaches your max items limit or exhausts the records for your query. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by National Oceanic and Atmospheric Administration. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `eventType` (type: `string`):

Filter by storm event type.

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

US state to filter events.

## `year` (type: `integer`):

Year to query.

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

Maximum number of storm events to collect per run.

## Actor input object example

```json
{
  "eventType": "Tornado",
  "state": "ALL",
  "year": 2024,
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/noaa-storm-events-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/noaa-storm-events-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 '{
  "maxItems": 10
}' |
apify call parseforge/noaa-storm-events-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/noaa-storm-events-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/9LaKdj9dpWUEwWWbs/builds/VrYcrv52epe4yM0Nc/openapi.json
