Storm Hail Damage Leads — NOAA Reports to Affected Addresses avatar

Storm Hail Damage Leads — NOAA Reports to Affected Addresses

Pricing

from $15.00 / 1,000 affected address returneds

Go to Apify Store
Storm Hail Damage Leads — NOAA Reports to Affected Addresses

Storm Hail Damage Leads — NOAA Reports to Affected Addresses

Turns NOAA SPC hail reports into a deduplicated list of street addresses inside each hail swath buffer. Built for roofing lead gen, storm-marketing agencies, and AI agents.

Pricing

from $15.00 / 1,000 affected address returneds

Rating

0.0

(0)

Developer

Brock Bangasser

Brock Bangasser

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

9 days ago

Last modified

Share

Storm Hail Damage Leads — NOAA Hail Reports → Affected Street Addresses

Turn yesterday's hailstorm into today's canvassing list. This Actor pulls official NOAA Storm Prediction Center hail reports, buffers each report point, and returns a deduplicated list of street addresses inside the impact zone — with hail size, distance from the report, county, and timestamps on every row. JSON, CSV, or Excel out; run it on a schedule or call it from your CRM, workflow tool, or AI agent.

Built for roofing contractors, storm-restoration marketers, exterior-cleaning and auto-hail (PDR) companies, direct-mail houses, and proptech/insurtech developers who need raw, programmatic storm-impact data — not another $100+/month dashboard subscription.

Why this instead of a hail-map subscription?

Hail map SaaS (HailTrace, HailWatch, Hail Recon…)This Actor
Pricing$65–$119+/month subscriptions; single storm maps sold for ~$230Pay per use — a typical full run costs a few dollars
AccessDashboard + sales call for data exportsAPI-first: schedule it, pipe it to Sheets/CRM/webhooks, call it from code or AI agents
OutputMaps you look atStructured address rows you act on
CommitmentAnnual/monthly plansNone. Run it after a storm, skip quiet weeks

Those platforms are excellent at what they do (meteorologist-verified swath maps). This Actor is the unbundled, programmatic slice: official public data, straight to rows, priced per result.

Coverage — United States (for now)

Hail events come from NOAA's Storm Prediction Center, so this Actor covers the contiguous United States. Filter with US state codes (TX, MN, …); a storm outside the US won't appear, because it isn't in the SPC feed.

Only the hail-report source is US-bound — the address lookup is global. Adding a country means bolting its severe-weather feed onto the same buffer/dedup/address pipeline: Canada (Environment and Climate Change Canada), Europe (ESWD), Australia (Bureau of Meteorology). On the roadmap; paid demand moves a region up the list.

What you get

Each address row:

{
"type": "address",
"address": "1234 Main Street, Example City 75001",
"house_number": "1234",
"street": "Main Street",
"city": "Example City",
"postcode": "75001",
"address_lat": 32.7810,
"address_lon": -96.8010,
"distance_miles": 0.42,
"hail_size_in": 1.75,
"event_id": "20260706-2005-32.78--96.80",
"event_date": "2026-07-06",
"event_time_utc": "2005",
"event_location": "4 W EXAMPLE CITY",
"county": "EXAMPLE",
"state": "TX",
"event_lat": 32.78,
"event_lon": -96.80,
"event_comments": "Golf ball sized hail reported by trained spotter. (XXX)",
"address_source": "osm"
}

Plus one event_summary row per hail report (size, location, time, how many addresses were found) — so addressSource: "none" gives you a cheap storm-monitoring feed on its own. Every run also ends with a single free run_summary row: a receipt of what was checked and found, so "no hail matched your filter" is an explicit answer, never an empty table.

Addresses are deduplicated across overlapping reports: each address appears once, tagged with the largest hail size that hit it and the shortest distance. Results are sorted biggest-hail-first, so caps keep the highest-value leads.

How to use it

  1. Pick the day(s): today (live-updating), yesterday (most recent complete day — the default), last3days, or a custom dateRange.
  2. Filter: states (e.g. ["TX","OK"]), minHailSizeInches (default 1.0 — quarter-size, the usual roof-damage threshold), radiusMiles buffer (default 1.5).
  3. Control spend: maxReports and maxAddresses hard-cap what a run can bill.
  4. Run once from the console, or schedule it daily during storm season and connect the dataset to Google Sheets, your CRM, Make/Zapier/n8n, or a webhook.

Common recipes

  • "Who got hit in my state yesterday?"dateMode: yesterday, states: ["TX"] (swap in your own), defaults elsewhere.
  • Daily storm-season monitor (cheap): schedule with addressSource: "none"; alert your team when event_summary rows appear, then re-run with addresses for the events you care about.
  • Direct-mail batch: minHailSizeInches: 1.25, radiusMiles: 2, maxAddresses: 5000, export CSV to your mail house.
  • Storm-day damage sweep for a metro: dateRange over the event, one state, maxReports: 100.

Address sources — pick your tradeoff

  • osm (default, zero setup): queries OpenStreetMap's Overpass API around each report. Works instantly, no keys. Coverage is strong in most metros and suburbs, thinner in some rural counties — where OSM lacks address points, you'll get fewer rows (you're never billed for rows you don't get).
  • openaddresses_grid (scale mode): near-complete government-sourced address coverage. One-time setup: shard a free OpenAddresses export with the included script and host the shards on S3/any static host, then set openAddressesBaseUrl. Runs then fetch only the few grid cells intersecting the storm buffer.
  • none: events only — the monitoring feed.

Input reference & common mistakes

You don't need to get this perfect. Wrong-but-unambiguous values are fixed for you (and noted in the log); genuinely ambiguous ones make the run finish with a receipt that tells you what to change — never a blank failure. Every run ends with a run_summary row, so "nothing happened" is always explained.

FieldAcceptsIf you get it wrong
dateModetoday, yesterday, last3days, dateRangeUnknown/misspelled → receipt lists the valid options
startDate, endDateYYYY-MM-DD, and only with dateRangeMissing, impossible (2026-02-30), reversed, or range >31 days → receipt explains the fix. Reversed dates are auto-swapped
states2-letter US codes: TX, FL. A list ["TX","OK"] or a string "tx, ok"Lowercase is auto-uppercased; full names (Texas) and typos (ZZ) are dropped with a warning; empty = all states
minHailSizeInches0.256.0 (1.0 = quarter, 1.75 = golf ball)Out of range is clamped; non-numeric falls back to 1.0 — both logged
radiusMiles0.110Clamped / defaulted to 1.5, logged
maxReports1500Clamped / defaulted to 25, logged
maxAddresses1100000Clamped / defaulted to 500, logged
maxRuntimeSeconds03600 (0 = no limit)If the budget is hit, the run returns partial results plus a note telling you to raise it
addressSourceosm, openaddresses_grid, noneUnknown/misspelled (OSM, openstreetmap) → receipt lists valid options
openAddressesBaseUrlpublic http(s) URL — required only for openaddresses_gridMissing in grid mode, or an unsafe/internal/malformed URL → receipt explains
overpassEndpointpublic http(s) URLInternal/loopback/malformed URLs are refused with a message (SSRF guard)
overpassDelaySeconds030Clamped / defaulted to 2, logged
contactEmaila plain email addressControl characters are stripped automatically; never fatal

Quickest correct first run: set dateMode to yesterday, leave everything else at its default.

Honest notes on the data (read this)

  • SPC reports are point observations (spotters, trained observers, emergency management), not radar-derived swaths. The radiusMiles buffer approximates the damage area around each confirmed report; it will not trace the exact swath shape the way meteorologist-drawn maps do. Roadmap: NOAA MRMS MESH radar hail-size grids for true swath polygons.
  • "Today" fills in over hours — reports trickle in during and after the storm. For complete data, run yesterday. SPC convective days run 12:00 UTC to 12:00 UTC.
  • No hit guarantee: a report of 1.75" hail plus a 1.5-mile buffer means damage is likely nearby, not certain at any specific address.
  • No personal data. Output is addresses and public storm data only — no owner names, phones, or emails. Pair with your own compliant enrichment/outreach stack and follow the laws that apply to you (e.g., TCPA for calls/texts, CAN-SPAM for email, local door-knocking rules).
  • Sources & terms: NOAA/SPC data is US-government public domain. OpenStreetMap data © OpenStreetMap contributors, ODbL — if you redistribute OSM-derived rows, attribution applies. OpenAddresses data carries per-source licenses (most permissive; check your state's sources).
  • Hardened by design: user-supplied endpoints are validated (http/https only, internal/metadata hosts refused), all downloads are size-capped with zip-bomb protection, URLs are redacted in logs, and every run's spend is bounded by maxReports/maxAddresses. No logins, no CAPTCHAs, no personal data — just public endpoints used as intended.

Pricing

Pay-per-event: a flat actor start ($0.02) + per hail event analyzed ($0.002) + per address returned ($15/1,000). Worked example: 25 events, 500 addresses → about $7.57 for a ready-to-work storm lead list. One storm map from the leading SaaS costs ~$230; one retail roofing lead costs $80–$220. Failed runs aren't charged, and maxAddresses caps every run's spend.

FAQ

Is this legal? The Actor reads official public government data (NOAA/SPC) and openly licensed address datasets via their intended public endpoints. No logins, no CAPTCHAs, no personal data.

Why did an event return zero addresses? Rural report with sparse OSM coverage, or the buffer landed on farmland. Try openaddresses_grid mode or a larger radius.

Can my AI agent call this? Yes — every published Apify Actor is callable via API and exposed through Apify's MCP server, so agents can run it and read the dataset directly.

Can you add wind/tornado reports, MESH swaths, or owner-occupancy flags? That's the roadmap. Open an issue on the Actor page — paid usage moves features up the list.