US Weather Alerts API - Active NWS Severe Storm Warnings avatar

US Weather Alerts API - Active NWS Severe Storm Warnings

Pricing

from $5.92 / 1,000 alerts

Go to Apify Store
US Weather Alerts API - Active NWS Severe Storm Warnings

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

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 days ago

Last modified

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
eventTornado Warning, Heat Advisory, Flood Watch, … as NWS names it
severityExtreme / Severe / Moderate / Minor / Unknown
urgencyImmediate / Expected / Future / Past / Unknown
certaintyObserved / Likely / Possible / Unlikely / Unknown
headline / description / instructionthe text NWS issued, unedited
areaDescthe counties and zones the alert covers
onset / expires / ends / effective / sentISO timestamps
senderNamewhich NWS office issued it
status / messageType / category / responsethe CAP fields
alertId / webthe alert's identifier and its page
scope / scopeKind / checkedAtwhich 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
areasUS 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".
severityKeep only these. Empty = all.
urgencyKeep only these. Empty = all.
eventKeep only these event names, spelled as NWS spells them. Empty = all.
maxResultsThe 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.
maxRetriesRetries 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.