US Storm Reports API: Hail, Wind & Tornado (NWS)
Pricing
from $3.00 / 1,000 storm report rows
US Storm Reports API: Hail, Wind & Tornado (NWS)
Get U.S. hail, wind, tornado and flood reports from official NWS Local Storm Reports within hours (last 7 days): time, hail size or wind speed, lat/lon, county. Filter by state or radius for roofing storm leads, insurance and AI agents. No API key; JSON/CSV, API or MCP; $3 per 1,000.
Pricing
from $3.00 / 1,000 storm report rows
Rating
0.0
(0)
Developer
Japan Open Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 hours ago
Last modified
Categories
Share
US Storm Reports API: Hail, Wind & Tornado Reports from the NWS (Last 7 Days)
Get the latest U.S. hail, wind, tornado and flood reports from the National Weather Service as clean JSON, one row per report, within hours of the storm. Each row has time, event type, hail size or wind speed, latitude/longitude, county, state and report source, taken from the NWS's preliminary Local Storm Reports (LSR); filter by state, point and radius, event type or minimum size. Last 7 days, no API key, no login.
- Storm reports within hours, not months. NWS offices publish Local Storm Reports during and right after a storm, from trained spotters, emergency managers, law enforcement, mesonet stations and the public. This Actor reads them straight from the official NWS API (api.weather.gov).
- Every storm type in one flat table: hail (inches), thunderstorm wind gusts (mph or knots) and wind damage, tornadoes, funnel clouds, floods and flash floods, heavy rain, snow and ice.
- Search where it matters: by state (
["TX", "OK"]), or around your office, a customer or a property withlatitude,longitudeandradiusMiles— each row then shows its distance in miles. - Clean, de-duplicated rows. Corrected and summary NWS products repeat earlier reports; each report is returned once, in its newest version.
- Pay only for reports found. "Nothing found" and error rows are free.
What can you do with US Storm Reports?
- Roofing, siding and restoration contractors — storm leads the next morning. Run it after a storm night to see where 1"+ hail or 60+ mph winds and tree damage were reported, which counties and towns were hit, and how far they are from your office. Schedule it daily and send the rows to Google Sheets, a CRM or Slack.
- Insurance, adjusters and claims teams — early loss triage. See which counties had hail, wind damage, tornadoes or flash floods in the last few days, before official damage surveys and the NOAA Storm Events Database are published (that takes months). Use
productUrlto open the original NWS report. - Utilities, logistics, property managers and AI agents — "what happened near me?" Check storm reports around sites, warehouses, routes or rental properties. An AI agent can answer "Was there hail or wind damage within 25 miles of Denver in the last 48 hours?" with one call.
Need hail history for past years at a specific address instead of the last 7 days? Use US Hail History by Location (radar-based hail days back to 1995). The two Actors work well together: this one tells you where storms hit this week, US Hail History tells you how often a place was hit before.
How to use
- Click Start with the default input: you get the 50 newest hail and wind reports in the U.S. from the last 72 hours.
- Narrow it down: set
states, or a point (latitude,longitude) andradiusMiles. - Pick
eventTypes(e.g. onlyhail) and minimum sizes (e.g.minHailInches: 1,minWindMph: 58). - Download the results as JSON, CSV or Excel, or call the Actor from the API / MCP (see below).
- For daily storm leads, create a Schedule in Apify Console (e.g. every morning at 7:00 with
hoursBack: 24).
Input
Nothing is required. Every field has a default.
| Input | Type | Default | What it does |
|---|---|---|---|
states | list of 2-letter codes | all states | e.g. ["TX", "OK", "KS"] |
latitude, longitude | number | none | Center of a search circle in decimal degrees (U.S. longitudes are negative) |
radiusMiles | number | 50 | Radius around the point, 1–500 miles |
eventTypes | list | ["hail", "wind"] | hail, wind, tornado, flood, rain, winter, other; empty list = all |
hoursBack | integer | 72 | How far back to look, 1–168 hours (7 days) |
minHailInches | number | 0 | e.g. 1 (quarter size) or 1.75 (golf ball) |
minWindMph | number | 0 | e.g. 58 (severe); when set, wind damage reports without a speed are left out |
maxResults | integer | 50 | Newest reports first, 1–5000 |
Input example
Hail of 1 inch or larger within 250 miles of Denver, CO, in the last 7 days:
{"latitude": 39.7392,"longitude": -104.9903,"radiusMiles": 250,"eventTypes": ["hail"],"minHailInches": 1,"hoursBack": 168,"maxResults": 5}
Output
One row per storm report, newest first. Every row has status (ok, not_found or error).
Output example
Real output from the input above (cloud run on 2026-09-19, 3 reports found). The first row:
{"status": "ok","eventTime": "2026-09-18T23:45:00Z","eventTimeLocal": "2026-09-18T17:45:00-06:00","eventType": "Hail","eventCategory": "hail","eventCode": "Hail","magnitude": 1,"magnitudeUnit": "inch","magnitudeQualifier": "measured","latitude": 40.31,"longitude": -108.65,"location": "6 NNW Massadona","county": "Moffat","state": "CO","source": "Cocorahs","remarks": "Maximum hail size 1.00 inch, average hail size 0.50 inch.","distanceMiles": 197.59,"wfo": "GJT","productId": "29077392-94f0-4958-b65f-cf9a0dd07594","productUrl": "https://api.weather.gov/products/29077392-94f0-4958-b65f-cf9a0dd07594","issuedAt": "2026-09-19T00:35:00Z","dataSource": "NOAA National Weather Service, preliminary Local Storm Reports (api.weather.gov); public domain; not affiliated with or endorsed by NOAA/NWS"}
All 3 rows of that run:
| Event time (local) | Type | Size | Place | County, state | Source | Distance |
|---|---|---|---|---|---|---|
| 2026-09-18 17:45 MDT | Hail | 1.0 in (measured) | 6 NNW Massadona | Moffat, CO | Cocorahs | 197.6 mi |
| 2026-09-18 16:30 MDT | Hail | 1.0 in (measured) | Dinosaur | Moffat, CO | Cocorahs | 215.6 mi |
| 2026-09-17 19:56 MDT | Hail | 1.5 in (measured) | 9 ESE Broadwater | Morrill, NE | Storm Chaser | 172.9 mi |
With the default input (all states, hail + wind, 72 hours), the same day's cloud run returned 50 rows (46 wind, 4 hail) from SC, WY, KS, CO, TN, NE, NC and KY, for example:
| Event time (UTC) | Type | Size | Place | County, state | Source | Remarks |
|---|---|---|---|---|---|---|
| 2026-09-19 02:40 | Thunderstorm Wind Damage | — | 7 NW Troy | Abbeville, SC | Law Enforcement | Tree in roadway on Highway 28 near intersection of Bethia Road. Time estimated. |
| 2026-09-19 01:59 | Thunderstorm Wind Gust | 62 mph (measured) | 2 SW Harrison | Sioux, NE | Public | Personal weather station. |
| 2026-09-19 01:47 | Thunderstorm Wind Gust | 60 mph (measured) | 2 E Torrington | Goshen, WY | ASOS | ASOS station KTOR Torrington Airport - Tor. |
| 2026-09-19 00:09 | Thunderstorm Wind Gust | 69 mph (measured) | 9 NNW Mcdonald | Cheyenne, KS | Public | — |
| 2026-09-18 23:23 | Thunderstorm Wind Damage | — | 7 S Wheeler | Cheyenne, KS | Emergency Mngr | EM reports several power poles snapped with lines in the road. … |
| 2026-09-18 22:30 | Hail | 1.0 in (measured) | Dinosaur | Moffat, CO | Cocorahs | Maximum hail size of 1.00 inch, did cause some damage to car roofs … |
When nothing matches, or the input is invalid, you get one free row that says what to change (real output):
{"status": "not_found","error": "No NWS Local Storm Reports matched (hail reports in the last 72 hours in HI hail at least 5 in); widen \"eventTypes\", \"hoursBack\" (max 168), the area or the minimum sizes.","dataSource": "NOAA National Weather Service, preliminary Local Storm Reports (api.weather.gov); public domain; not affiliated with or endorsed by NOAA/NWS"}
Output fields
| Field | Meaning |
|---|---|
status | ok, not_found or error |
eventTime, eventTimeLocal | When the event happened, in UTC and in the NWS office's local time |
eventType, eventCategory, eventCode | Readable NWS event name (e.g. "Thunderstorm Wind Gust"), the filter category (hail, wind, tornado, flood, rain, winter, other) and the original NWS code (e.g. Tstm Wnd Gst) |
magnitude, magnitudeUnit, magnitudeQualifier | Hail size (inch), wind speed (mph or knot), EF rating, rain/snow amount etc.; measured or estimated. Empty for damage reports without a number |
latitude, longitude, location, county, state | Where it happened (NWS gives coordinates to 0.01°, about 1 km) |
source | Type of reporter, e.g. "Trained Spotter", "Mesonet", "Law Enforcement", "Public" — never a person's name |
remarks | NWS free-text remarks (see privacy note below) |
distanceMiles | Distance from your point, when you search around a point |
wfo, productId, productUrl, issuedAt | NWS office, and the original NWS product the report came from |
dataSource | Source and license note |
error | On not_found / error rows: one sentence explaining what to change |
How much does it cost to get storm reports?
This Actor uses Pay per event pricing — you pay for storm reports returned, not for compute time.
| Event | Price | When |
|---|---|---|
Storm report row (result-row) | $0.003 per row ($3 per 1,000) | Each ok row = one storm report |
Actor start (apify-actor-start) | $0.001 per run | Once at the start of each run |
not_foundanderrorrows are free.- Default run (50 newest U.S. hail and wind reports): about $0.15.
- "Hail near Denver this week" (the example above, 3 reports): about $0.01.
- A daily storm-lead check for one state, 30 reports a day: about $0.09 per day, $2.80 per month — no monthly subscription.
- 1,000 storm reports: $3.
- Set a maximum cost per run when you start the Actor to cap spending; if it is reached, the Actor stops cleanly and says so in the status message.
Use via API / MCP (AI agents)
Apify API (HTTP). Run the Actor and get the rows in one call:
curl -X POST "https://api.apify.com/v2/acts/japan-open-data~us-storm-reports-live/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"states": ["TX", "OK"], "eventTypes": ["hail"], "minHailInches": 1, "hoursBack": 48}'
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("japan-open-data/us-storm-reports-live").call(run_input={"latitude": 32.7767, "longitude": -96.797, "radiusMiles": 50,"eventTypes": ["hail", "wind", "tornado"], "hoursBack": 24,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["status"], row.get("eventTime"), row.get("eventType"), row.get("magnitude"), row.get("location"), row.get("distanceMiles"))
MCP (Claude, ChatGPT, Cursor and other AI agents). Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with ?tools=japan-open-data/us-storm-reports-live. No field is required, so an agent can call it with {} or with just a state or a point.
Recommended agent settings:
- "Any hail near X recently?" →
{"latitude": <lat>, "longitude": <lon>, "radiusMiles": 25, "eventTypes": ["hail"], "hoursBack": 72}. - "Where was the damage last night in Texas?" →
{"states": ["TX"], "eventTypes": ["hail", "wind", "tornado"], "hoursBack": 24, "maxResults": 100}. - Damaging storms only →
minHailInches: 1andminWindMph: 58. - Keep
maxResultssmall (10–50) for chat answers; each row is charged. - Always check
status; onnot_found/errorshow theerrorsentence to the user. Tell users these are preliminary reports. - For past years at one address, call US Hail History by Location instead.
FAQ
How far back can I get storm reports?
About 7 days (hoursBack up to 168). That is how long the NWS API keeps Local Storm Report products. For older hail data use US Hail History by Location; for older confirmed events of all types, NOAA's Storm Events Database is published months later.
How fresh is the data? NWS offices issue Local Storm Reports during and shortly after storms, usually within minutes to a few hours. Each run reads the current NWS product list, so you get what has been published up to that moment.
Are the reports official and final? They are official NWS products but preliminary: sizes, times and places can be corrected, and they are later quality-controlled for the Storm Events Database. When NWS issues a correction, this Actor returns the corrected version.
Can I search by street address?
Not directly. Convert the address to latitude/longitude first (for example with the free U.S. Census Bureau geocoder) and use latitude, longitude and radiusMiles.
Is it legal to use this data commercially? Yes. Information from the NWS API is published as open data, free to use for any purpose, and NWS information is in the public domain. This Actor only reads the official API, identifies itself in the User-Agent and keeps its request count small.
Known limitations
- Last 7 days only (see FAQ). This is not a historical archive.
- Preliminary reports. Not every storm is reported, and a missing report does not mean nothing happened.
- Up to 400 NWS products per run. Very wide searches (all states, all event types, 7 days) may stop before the oldest reports; the status message then says so. Narrow the area (
statesor a point + radius) to go further back. - Corrections. Corrected reports are matched by NWS office, event category and place name; in rare cases where NWS also changes the place name, both versions may appear.
- Remarks privacy filter.
remarksis left empty (null) when it contains something that looks like a street address, contact details, a personal weather station or radio ID (e.g. Ambient, WeatherLink, CWOP, call signs) or a person's name. This cautious filter drops roughly 3–4% of remarks, some of them harmless. - Coordinates are rounded by NWS to 0.01° (about 1 km), and
locationis given as "distance + direction + town" (e.g. "7 NW Troy"), not a street address.
Data source and license
- Source: NOAA National Weather Service API, Local Storm Report (LSR) products — https://api.weather.gov/products/types/LSR (API documentation).
- License: NWS information is in the public domain (NWS disclaimer). Every row includes
dataSource, andproductUrllinks to the original NWS product. - Not affiliated: this Actor is an independent project and is not affiliated with, endorsed by or sponsored by NOAA or the National Weather Service. It does not use NOAA or NWS logos. The data is reformatted (parsed, filtered, de-duplicated) and is not an official NWS publication.
- No personal data:
sourceis a reporter type only, and remarks that look like personal information are removed (see above).
More from Japan Open Data
- US Hail History by Location — hail history for any U.S. latitude/longitude from NOAA NEXRAD radar, back to 1995: one row per hail day with max hail size and distance. Use it for the long-term hail history of a place; use US Storm Reports for all storm types in the last 7 days.
- TSA Checkpoint Travel Numbers (Daily, Weekly & YoY) — daily U.S. TSA airport checkpoint traveler counts as clean JSON, with weekly averages and year-over-year change.
- Japan Postal Code & Address in English — look up Japanese postal codes and addresses in English/romaji, kanji and kana, from Japan Post's official data.
- Mexico Gas Prices API by Station (Official CNE) — today's regular, premium and diesel prices at every Mexican gas station from the official CNE feed, with coordinates and distance.
Feedback
Found a wrong value, a missing report type, or need another filter (e.g. by county or NWS office)? Open an issue on the Actor's Issues tab with your input and what you expected. If the Actor is useful to you, a short review helps others find it.