US Weather Alerts API - Active NWS Severe Storm Warnings
Pricing
from $5.92 / 1,000 alerts
US Weather Alerts API - Active NWS Severe Storm Warnings
For alerting bots, insurance response, logistics and event planning: active severe weather alerts, warnings and watches from the US National Weather Service with event, severity, urgency, certainty, the counties covered and the NWS text unedited. The whole US had 185 active alerts on 2026-09-12.
Pricing
from $5.92 / 1,000 alerts
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
For alerting and safety notifications, logistics and dispatch, insurance and utilities, and any dashboard that has to react to severe weather: active severe weather alerts from the US National Weather Service, straight from api.weather.gov — one row per active alert, for the whole country, a state, or a single point on the map. Filter by severity, urgency or event name.
How much weather is actually live at once, measured: the whole US carried 185 active alerts on 2026-09-12; on 2026-08-30 it was 269, with CA at 4, TX at 2 and a point in Washington DC at 0. So the default limit of 50 covers a state comfortably, and taking the whole country in one run means setting it to 185 or more.
A zero is a real answer here, and it is free. Rows that report zero alerts, and rows that explain a bad input, a truncated result or an outage, are not charged — so "no alerts in Texas right now" costs nothing and is never confused with a failed run.
No scraping, no HTML parsing, no browser. US government data, public domain, no API key. Export as JSON, CSV or Excel.
What you get
One row per active alert:
| Field | |
|---|---|
event | Tornado Warning, Heat Advisory, Flood Watch, … as NWS names it |
severity | Extreme / Severe / Moderate / Minor / Unknown |
urgency | Immediate / Expected / Future / Past / Unknown |
certainty | Observed / Likely / Possible / Unlikely / Unknown |
headline / description / instruction | the text NWS issued, unedited |
areaDesc | the counties and zones the alert covers |
onset / expires / ends / effective / sent | ISO timestamps |
senderName | which NWS office issued it |
status / messageType / category / response | the CAP fields |
alertId / web | the alert's identifier and its page |
scope / scopeKind / checkedAt | which input produced this row, and when |
"No alerts" is an answer, not an error
Most of the time, most places have nothing active. When that happens this Actor writes a row saying so:
{ "scope": "VT", "ok": true, "alertCount": 0,"note": "No active alerts for this area right now. This is a valid result, not an error.","checkedAt": "2026-08-30T08:00:00.000Z" }
That row is not charged. It exists so that a scheduled run which finds nothing is distinguishable from a run that failed — which matters a lot when you are alerting off this data and silence is ambiguous.
Likewise, an input that cannot be read ("Tokyo", "ZZ") produces a row explaining exactly that, and no request is sent to NWS.
Input
{"areas": ["CA", "TX", "38.89,-77.03"],"severity": ["Extreme", "Severe"],"urgency": [],"event": [],"maxResults": 50,"maxRetries": 3}
| Input | |
|---|---|
areas | US for nationwide, a two-letter state or territory code (CA, TX, PR, GU), or "lat,lon". Mix them. Leave it out and the whole US is used as an example — see below. An empty list is treated as a mistake, not as "everywhere". |
severity | Keep only these. Empty = all. |
urgency | Keep only these. Empty = all. |
event | Keep only these event names, spelled as NWS spells them. Empty = all. |
maxResults | The largest number of alert rows the run returns and charges for, across all areas. Default 50, maximum 100000. Raise it to 185 or more for the whole country. |
maxRetries | Retries when NWS rate-limits or has an outage. |
Measured on 2026-09-12: the whole US had 185 active alerts. On 2026-08-30 it was 269, CA 4, TX 2, and a point in Washington DC 0.
If you do not name an area
areas has no hidden default. If you leave the field out altogether, the run uses the whole US as an example so that an empty input still shows you what the output looks like — and it says so, both in the log and in a free row:
{ "scope": "US", "ok": true,"note": "No area was given, so the whole US (US) was used. Put a state or territory code such as CA, or a point as \"lat,lon\", into Areas to look at just that place instead. This row is not charged." }
Name the areas you actually want and nothing is added to them.
If maxResults is reached
The run stops at the limit and writes one free row saying what it left behind, so a truncated result is never mistaken for a complete one:
{ "ok": true, "alertCount": 5,"note": "maxResults (5) was reached: 7 more alert(s) were not returned. Raise maxResults to get them. This row is not charged." }
Billing
Charged per alert delivered, at $0.008 per alert ($8.00 per 1,000). Rows that report zero alerts, and rows that explain a bad input, a truncated result or an outage, are free.
maxResults is what bounds the bill, and it defaults to 50 — so a default run costs at most about $0.40, whatever the weather is doing. A single quiet state is a few cents or free.
The whole country carried 185 active alerts on 2026-09-12, so to take all of it in one run set maxResults to 185 or more and expect about $1.48. Whenever the limit does cut the result short, the free row above tells you exactly how many alerts were left behind, so you can decide whether to raise it.
If you set a maximum total charge on the run and it is reached, the run stops and says so in the log and the run status rather than handing you a partial result that looks complete.
Source and conduct
Data comes from the National Weather Service public API. NWS states that the information is "open data, free to use for any purpose" and asks that clients identify themselves with a User-Agent; this Actor sends one that includes a contact URL, so NWS can reach us rather than block us if anything ever looks wrong.