How I Built a Free Hail Tool on Millions of NOAA Radar Records
A working Colorado roofer's build story: turning 21.5 million+ hail records and six official weather feeds into a free 0–100 hail exposure score for any US address — PostGIS, Next.js, and the ethics of never fudging the number.
A working Colorado roofer's notes on turning public weather data into a free property risk score.
I've spent about three years on roofs in Colorado. Long enough to learn that the most stressful conversation a homeowner has after a storm usually isn't with the roofer — it's with the clock.
Here's how it goes. Hail comes through. A few weeks later a door-knocker shows up and says your roof is wrecked and you need to file today. Or the opposite: nothing visible happens, you forget about it, and eighteen months later a leak shows up — long after anyone can easily tie it back to the storm that caused it. Either way, the homeowner is making a five-figure decision with almost no real information. They don't know whether hail actually hit their address, how big it was, or when. They just know someone is standing on their porch with a clipboard and a sense of urgency.
That bothered me enough to build something about it.
The result is HailScore — a free tool where you type in any U.S. address and get back a 0–100 score for how much hail exposure that specific property has likely seen, plus a map of nearby storms and a year-by-year timeline. No login. No "enter your email to see your score." The score and the map are free, always.
I want to be precise about one thing up front, because it's the whole ethic of the project: HailScore measures hail exposure from NOAA radar. It does not confirm damage, and it can't tell you whether you have a claim. What it tells you is whether — and how hard — hail has actually passed over your roof, using the same government data the pros use. That alone changes the porch conversation from "trust me" to "let's look at the record."
This is the story of how I built it.
The data nobody bothered to make usable
The thing I kept running into as a roofer is that the underlying data already exists. NOAA has been quietly recording hail for decades. The National Weather Service publishes it. It's public. It's free.
It's also basically unusable if you're a normal person. It lives behind APIs, in formats meant for meteorologists, scattered across half a dozen separate datasets that don't talk to each other. A homeowner is never going to query a radar archive. Most contractors don't either.
So the first job was just getting all of it into one place.
As I write this in July 2026, HailScore sits on more than 21.5 million hail records, with six official weather sources feeding the system — and the number climbs every week, because the ingestion never stops. The backbone of that is 6.2 million+ NEXRAD radar records — the dataset I started with and still lean on most. The rest fills in the gaps:
nx3hail product — NEXRAD's radar-derived hail-detection signature for a storm cell — from 2015 forward. This is where the radar count comes from.Radar gives you breadth and consistency. The human-confirmed sources give you ground truth. Stacking them is the point — any one of them alone has blind spots, and overlaying them is what lets a single address get a defensible answer instead of a guess.
Because I'm in Colorado and that's where I work, I dug hardest into the home market — the full state-level analysis became its own write-up. The Colorado slice alone is roughly half a million radar records today — about 8% of the national radar total, which tracks with the state being squarely in Hail Alley but not the only place it hails. The patterns that come out of it are exactly what you'd expect from being on roofs out here: El Paso County (Colorado Springs) gets hammered the most, Weld County is right behind it, and the northeastern plains — Yuma, Kit Carson, Washington — quietly take the biggest individual stones. NOAA's confirmed record for the state includes a 5.25-inch hailstone in Yuma County. That's bigger than a softball.
Turning radar into a score
Raw radar isn't an answer. "There were 47 hail signatures within five miles of you since 2015" is true but useless to a homeowner. The work was turning that into a single, honest number.
I'm going to keep this part high-level on purpose — the scoring itself is the proprietary part of the project, and I'm not going to publish the formula. But the shape of it is straightforward and I'm happy to describe the factors it weighs:
There's also a roof-age filter — the tool only looks at storms within the lifetime of your roof, since a hailstorm before your current roof went on doesn't matter to your current roof — and an adjustment for roof material, because metal and tile shrug off hail that destroys asphalt shingle.
The constants and the exact math behind all of that are mine. But the philosophy isn't a secret: never fudge a score to make the tool look more useful. "No recent hail recorded near this address" is a real, valuable answer, and the day I start inflating scores to manufacture urgency is the day this becomes the door-knocker I built it to replace.
The stack
For anyone who cares about the build, here's what's under the hood. Most of it was chosen so a one-person project could handle millions of geospatial rows without falling over.
Spatial queries at scale
The single most important engineering choice was leaning on PostGIS for the geo work, and it's the thing I'd tell anyone building something like this to do first.
A lookup is conceptually simple: take the address, geocode it to a lat/lon, then find every hail record within a few miles and score it. Naively, that's "check the distance from this point to millions of rows," which is a non-starter on every request.
PostGIS solves it with two things. ST_DWithin does the radius filter — "give me the points within this distance" — and because it's backed by a GiST spatial index, the database isn't scanning every row; it's walking an index that already knows roughly where everything is. Then ST_Distance gives the exact distance for the records that survive the filter, which feeds the proximity factor in the score. Spatial index does the coarse cut fast, exact distance math runs only on the handful that matter.
The payoff: a full address lookup — geocode, radius query against millions of points, score, build the map payload — lands in roughly 200–500ms on a warm lookup (cold lookups that pull in external enrichment take a couple of seconds). Fast enough to feel instant, which matters, because the moment people use this most is right after a storm when they're anxious and want an answer now.
What I learned
A few things I didn't expect going in.
Public data being "available" and being usable are completely different things. There's a real opportunity in just doing the unglamorous work of pulling a public dataset into one place and putting a clean front end on it. The value I added wasn't inventing data — NOAA did the hard part for decades. The value was making it answer a homeowner's actual question in under a second.
Programmatic SEO is real. I built out city- and ZIP-level pages for Colorado from the same data — most hail-prone ZIP codes, county breakdowns, year-by-year storm history. People search "[my town] hail" constantly, especially in season, and pages built on actual local records rank because they're genuinely the most specific answer out there. I've also noticed AI assistants surfacing these pages when people ask hail questions — which is becoming its own quiet distribution channel.
PostGIS is underrated. I went in thinking the geospatial part would be the hard, custom-code part of the project. It turned out to be a solved problem hiding in an extension I almost didn't enable. If you're doing anything location-based, learn it before you write a single distance function by hand.
Keep the free tier genuinely generous. The score, the map, and the timeline are free and always will be, with no email wall in front of the thing people came for. HailScore stays free for homeowners — the paid tiers are for the pros (adjusters, public adjusters, contractors) who need bulk lookups, exportable reports, and date-of-loss verification — starting, as I write this, at $9.95 for a single storm-history report. The homeowner-facing product earns trust by not nickel-and-diming the scared person on the porch, and the business runs on the people who use it professionally. Giving away the core answer isn't charity; it's the whole strategy.
What's next
A few things on the list:
If you own a roof, go type in your address. Worst case, you learn the record is quiet and you can tell the next door-knocker thanks but no thanks. Best case, you find out a real storm came through — and now you're the one holding the data instead of the person on your porch.
— Alex, founder of HailScore
Related Articles
Check Your Hail History
Enter your address for a free storm damage report powered by NOAA data.
Get My Free HailScore