Meet Anvil — the hail intelligence platform behind every alert Hail Sentinel sends. Today it gets a name, a version number and a public report card: Gen 1, the first complete generation. Four named models, running in production, measured in the open against the baselines the rest of the industry runs on.

Anvil exists to answer one question for anyone with a roof, a fleet or a forecast desk: is the storm overhead putting hail on the ground, here, right now — and did the system know while it was happening? Gen 1 is the first release where that answer is measured at the grain people actually live at — a storm, over a place, during an hour — and published beside the numbers that produced it.

Every figure on this page comes from one measurement campaign: one window, one cohort, one definition of truth, and every system scored on the same storms.

MAY 1, 2026 → JUL 30, 2026
91
consecutive storm days measured end to end — a whole season, not a highlight reel
1.80M STORM TRACKS FOLLOWED
6.88M
radar storm-object scans scored — every scan of every storm
26,186 REPORT-MATCHED SCANS
7,016
hail-producing storm tracks, confirmed by people on the ground
The campaign behind every figure on this page, scored on anvil-detect-6: one window, one cohort, one truth definition, re-scored offline across the season.

The scoreboard

Hold every system to the same alarm budget. Score them on the same storms, against the same ground truth — hail that people stood under and wrote down. Then count. Against the two operational baselines the industry runs on, the radar hail estimate (MESH) and the probabilistic storm model (ProbSevere v3), Anvil leads every head-to-head we ran:

Same storms, same truth, same alarm budget Anvil leads 7 of 7
Gen 1 head-to-heads on corroborated truth. Threat score (critical success index) (higher is better): Anvil 0.1268, ProbSevere v3 0.0947, MESH 0.0829. Best of the systems compared on this metric: Anvil. Catch rate, held to MESH’s own alarm budget (higher is better): Anvil 77.8%, MESH 56.7%. Best of the systems compared on this metric: Anvil. Catch rate, held to ProbSevere v3’s own alarm budget (higher is better): Anvil 83.8%, ProbSevere v3 75.3%. Best of the systems compared on this metric: Anvil. Ranking power (area under the ROC curve) (higher is better): Anvil 0.9885, ProbSevere v3 0.9814, MESH 0.9590. Best of the systems compared on this metric: Anvil. Precision-recall area (AUC-PR) (higher is better): Anvil 0.2886, ProbSevere v3 0.2089, MESH 0.1445. Best of the systems compared on this metric: Anvil. Storm days with the higher score, against ProbSevere v3 (higher is better): Anvil 66 of 83, ProbSevere v3 17 of 83. Best of the systems compared on this metric: Anvil. Storm days with the higher score, against MESH (higher is better): Anvil 78 of 83, MESH 5 of 83. Best of the systems compared on this metric: Anvil. Anvil leads 7 of 7.
Contest Higher is better Anvil ProbSevere v3 MESH
Threat score (critical success index) Track grain · corroborated truth · 4,430 hail-producing tracks Best of the systems compared on this metric: 0.1268 0.0947 0.0829
Catch rate, held to MESH’s own alarm budget Track grain · corroborated truth · all storm tracks Best of the systems compared on this metric: 77.8% no value in this arm 56.7%
Catch rate, held to ProbSevere v3’s own alarm budget Track grain · corroborated truth · tracks ProbSevere v3 scores Best of the systems compared on this metric: 83.8% 75.3% no value in this arm
Ranking power (area under the ROC curve) Threshold-free · 3.83M scans all three systems scored · corroborated truth Best of the systems compared on this metric: 0.9885 0.9814 0.9590
Precision-recall area (AUC-PR) Same cohort · a random classifier scores 0.0027 Best of the systems compared on this metric: 0.2886 0.2089 0.1445
Storm days with the higher score, against ProbSevere v3 83 storm days · day-level precision-recall · corroborated truth Best of the systems compared on this metric: 66 of 83 17 of 83 no value in this arm
Storm days with the higher score, against MESH 83 storm days · day-level precision-recall · corroborated truth Best of the systems compared on this metric: 78 of 83 no value in this arm 5 of 83
Seven contests, one campaign. Each catch-rate contest cuts Anvil to the rival’s own alarm burden, so no lead here was bought by alarming more; the threat score charges misses and false alarms to the same account; the ranking scores are threshold-free. Corroborated truth: a storm counts only when at least 2 independent observers reported it. A dash means the system produces no value in that arm.

Every row points the same way. The threat score is the balanced measure — no system can lift it by crying wolf. The catch rates are taken at the rival’s own budget, so the remaining gap is skill, not appetite. The ranking scores need no threshold at all. And the season, taken one storm day at a time, lands on Anvil on 78 of 83 days against the radar estimate and 66 of 83 against the storm model.

Four models, one platform

Every Anvil model carries its job and its generation in its name: anvil-JOB-VERSION. The middle word says what the model is for, never how it is built, and the version is a promise — a generation you can cite, hold us to, and watch improve. Two of the four are trained machine-learning models; two are calibrated statistical models, and every card prints its class line so the method is never left to inference.

anvil-detect-6

The detection model

Trained machine-learning model.
Scores every storm object on every radar scan for one question: is this storm putting hail on the ground right now. When an alert reaches a phone while the sky is still dark, this is the model that put it there.
93.6% of confirmed storms caught while the hail was falling 564 storms with 2+ independent reports · shipped bar p ≥ 0.096
anvil-nowcast-2

The address-level nowcast

Trained machine-learning model.
Carries hail probability forward from the storms on radar onto one point on the map — an address, not a county. Served in the app and to business customers through the API.
1.34× fewer alarms than persistence for the same confirmed catches 20 storm days · day-clustered 95% interval 1.03–1.86
anvil-today-3

The same-day layer

Calibration layer. Not a trained machine-learning model.
Re-levels the day’s hail outlook against what actually verifies, so the number you read in the morning behaves the way a probability should.
−46% calibration error, re-certified out of sample 1.73M out-of-sample cell-days · 4 of 4 hard gates
anvil-outlook-1

The multi-day outlook

Calibrated statistical model. Not a trained machine-learning model.
Carries the picture out across days 2 to 7 for every location, and it is the one member of Gen 1 that has earned the word skill.
Days 2–7 positive Brier skill against climatology at every day it serves 135 issuance dates · ~166,320 cell-days per lead
The Gen 1 roster. Each class line is the artifact’s own wording. Figures on the cards are the same measurements the sections below unpack.

For your home

Did it know while the hail was falling — and did it stay quiet when it should?

Most detection figures in this industry count radar objects. Nobody has ever stood under a radar object. A storm is what people experience, so a storm is the grain Gen 1’s headline is published at: ground reports clustered into the storm that produced them, and a storm counted as confirmed only when anvil-detect-6 cleared its shipped bar inside the window the hail was actually falling in.

Higher is better
Storms carrying at least 2 independent ground reports, over the campaign window. Every storm in the cohort counts — including the few that radar never resolved into a trackable object.

93.6% of the storms in the published cohort — 528 of 564 — were confirmed while the hail was falling, measured over storms that at least 2 independent observers on the ground reported. Corroboration is the strictest truth we have: every storm in this cohort is one somebody stood under and wrote down.

The other half of the promise is silence. A hail system that never misses and never shuts up is worth nothing, so Gen 1 is measured on the quiet days too — days and regimes where the absence of hail is established, not assumed:

1,041 REAL-DATA CASES
0
clear-day false alarms across the nowcast battery
25 OF 25 GATES GREEN
0
winter false alarms in the same battery
52 NULL DAYS · CLEAR, RAIN-ONLY, WINTER
96%
of null days produced no alarm at all at the notification gate
Left and centre: the nowcast battery — 1,041 real storm-and-point cases replayed through the production alerting path. Right: the null-day audit at the notification gate over 18 clear days, 19 rain-without-hail days and 15 winter days; clear days and winter storms produced zero alarms. Source: notify_far_validation_2026-08-05.json · events_v2 registry, 2025-03-01..2026-06-10, 178 events.

Then there is the week ahead. anvil-outlook-1 carries the picture out to day 7 for every location, and it is the one member of Gen 1 that has earned the word skill: measured against climatology, it holds a positive Brier skill score at every day it serves. At the day- 2 lead it flags 78.6% of hail days while alarming on 0.80% of quiet cell-days.

Higher is better · 0.50 is chance Separates hail days from quiet days Chance
How well the outlook separates hail days from quiet days at each lead, days 2 to 7 — the chance a hail cell-day scores above a quiet one. Beneath each bar: the share of hail days flagged at that lead, and the share of quiet cell-days alarmed to do it. Panel of 135 issuance dates, ~166,320 cell-days per lead, day-clustered intervals.

And the day itself gets its own model. anvil-today-3 re-levels the morning number against what the day actually does: over its re-certification set, expected calibration error fell by 46% — from 0.0083 to 0.0045 — across 1.73M out-of-sample cell-days. What it improves is calibration: the day’s stated probabilities move measurably closer to the rate they verify at.

For your business

Every storm scored. Every alarm earned. Served to your console and your API.

A fleet, a yard, a book of insured roofs: a business does not experience one storm at a time, it experiences the whole season. Two things decide whether a hail feed is worth wiring into an operation — how much of the sky it actually scores, and how much of what it says is worth acting on.

PROBSEVERE V3 · 55.7% OF SCANS
100%
of storm-object scans in the campaign carry an Anvil score
OF 2,978 TRACKS IT PRODUCED NO VALUE FOR
1,782
hail-producing storm tracks Anvil caught that ProbSevere v3 never scored
MESH 236 · PROBSEVERE V3 168
879
hail-producing storm tracks that only Anvil caught
Coverage over the identical cohort of 7,016 hail-producing tracks. ProbSevere v3 is coverage-gated by design and produced no value on 2,978 of them; Anvil and MESH score every storm object. Exclusive catches are at each system’s own shipped bar — Anvil 25,973 tracks on alarm, MESH 29,630, ProbSevere v3 17,724.

You cannot catch a storm you never scored. Anvil is built to have an opinion on every storm object on radar — and on the tracks the probabilistic baseline never scored at all, it caught 1,782 hail-producing storms outright.

Then hold it to a budget. The objection to any catch rate is that a system can buy it by alarming more, so take the alarm burden each baseline itself spent, cut Anvil to exactly that burden, and count again:

Anvil +21.1 points at the same alarm burden Higher is better Alarm burden
Anvil +8.5 points at the same alarm burden Higher is better Alarm burden
Share of hail-producing storm tracks each system caught, corroborated truth, with Anvil cut to the alarm burden the baseline spent. MESH over all storm tracks (4,430 truth tracks); ProbSevere v3 over tracks ProbSevere v3 scores (2,439 truth tracks), because it produces no value on the rest.

Same alarms, more hail. At MESH’s own burden Anvil catches 21 more points of hail-producing storm tracks; at ProbSevere v3’s own burden, on the tracks it scores, 8.5 more. For an operation that rolls trucks, adjusts claims or moves a fleet under cover, that is the difference between an alert feed and a noise feed.

Once a storm is on radar, anvil-nowcast-2 carries its hail probability onto a single point — a yard, a lot, a monitored address — over each horizon ahead. The baseline it had to beat is the leg it replaced: Lagrangian persistence — each currently-observed storm keeps its present hail probability and advects along its own measured motion vector. Cut both arms at the threshold that reaches the same number of confirmed catches, then count the alarms each raised to get there:

1.34×
the alarms of persistence, at the same confirmed catches
161,698
alarms raised by persistence
120,920
alarms raised by anvil-nowcast-2
Lattice grain · 2026-07-14 to 2026-08-01, 20 storm days · both arms cut at the same catch count · day-clustered 95% interval 1.035–1.865
Fewer locations put on alarm for the same number of confirmed catches. Both arms are cut at the same catch count, so neither side can buy the ratio; the separation from persistence is measured at the 30- and 60-minute horizons.
THE HAIL THAT TOTALS ROOFS
91.2%
of the giant-hail cases in the battery were caught
0.8% of battery alarms unconfirmed
1,041 REAL-DATA CASES
0.81
threat score across the battery — misses and false alarms both charged
SIZING ACCURACY
96.6%
of size calls landed within an inch of the hail that was reported
Before any nowcast generation ships it clears a permanent offline battery: 1,041 real storm-and-point cases replayed through the production alerting path — deterministic, reproduced byte-for-byte, 25 of 25 gates green.

All of it is served. Detections and address-level nowcasts arrive in the console and through the business API, and the same models run behind every monitored area a team sets up. Business access is by invitation while pricing is finalised — request an invite.

For meteorologists

Measured the way the field measures — corroborated truth, matched burden, day-clustered intervals.

At track grain — one radar object’s life — the balanced measure is the critical success index, the threat score: misses and false alarms charged to the same account, so no system can lift it by alarming more often. Measured on corroborated truth across 1,800,879 storm tracks and 4,430 truth tracks, Anvil leads both baselines by a wide margin:

1.34×
the threat score of ProbSevere v3
0.1268
Anvil threat score
0.0947
ProbSevere v3 threat score
Track grain · corroborated truth · coverage 100% against 49%
1.53×
the threat score of MESH
0.1268
Anvil threat score
0.0829
MESH threat score
Track grain · corroborated truth · same cohort, same window, same truth definition
The multiple is the claim; both absolutes render inside the same card so neither ratio can be quoted apart from the numbers it came from. Corroborated truth censors true positives and no false alarms, identically for all three systems, which is why the ratio is what we publish.

A pooled number can hide a season. So take the campaign one storm day at a time, and ask on each day which system held the higher precision-recall score:

Higher is better one cell per storm day · higher day-level precision-recall score
83 storm days in the campaign window, corroborated truth. Filled cells are days Anvil held the higher day-level precision-recall score; outlined cells are the rival’s. Cells are drawn Anvil-first — the artifact publishes counts, not a calendar.

Threshold-free, the picture is the same. On the matched cohort — the 3.83M scans where all three systems produced a value — Anvil holds the largest area under both the ROC and the precision-recall curve, and against a base rate of 0.27% its precision-recall area is 106 times a random classifier’s, against 77 for ProbSevere v3 and 53 for MESH. And where the two probabilistic systems can be compared on the reliability of what they say, on one common cohort at one base rate:

32×
the reliability error of Anvil, on the same scans
0.00424
ProbSevere v3 reliability term
0.00013
Anvil reliability term
Brier decomposition · 3.56M common scans at a 0.43% base rate · Brier 0.0036 against 0.0080 · measured on anvil-detect-5 · a relative comparison on one cohort
The reliability term measures how far stated probabilities sit from the rate they verify at; lower is better. One cohort, one base rate, no imputation — a comparison between the two systems, not an absolute claim about either. Measured on the earlier detect generation.

The outlook is graded the same way, with its intervals printed:

Lead Area under the ROC curve Brier skill vs climatology Hail days flagged Quiet cell-days alarmed
Day 2 0.919 (0.903–0.933) +0.0831 (0.0641–0.1021) 78.6% 0.80%
Day 3 0.897 (0.876–0.915) +0.0530 (0.0355–0.0704) 74.6% 0.32%
Day 4 0.876 (0.852–0.897) +0.0390 (0.0240–0.0543) 55.0% 0.28%
Day 5 0.855 (0.830–0.878) +0.0274 (0.0156–0.0395) 44.6% 0.17%
Day 6 0.847 (0.822–0.869) +0.0219 (0.0133–0.0306) 41.7% 0.10%
Day 7 0.830 (0.805–0.853) +0.0157 (0.0081–0.0235) 33.5% 0.04%
anvil-outlook-1, panel 135 issuance dates, ~166,320 cell-days per lead, report-presence truth. Day-clustered 95% intervals in parentheses. The Brier skill score is positive at every lead served.

Every interval on this page is day-clustered. Storm scans cluster by day; a pooled interval over millions of scans reports a confidence nobody has.

Measured in the open

Gen 1 is a starting line, not a trophy. The version numbers exist so the next generation has something to beat: when a name on this page changes, it will be because the figures above moved, and the artifact behind them will say by how much. Every number here is read from one versioned campaign file at build time — none is typed into the page — so a claim and its evidence cannot drift apart without the build failing.

That standard is rarer than it should be. Before publishing this page we surveyed the commercial field for anyone else grading their own homework:

We would rather publish a number you can check than an adjective you cannot.

How these numbers were measured

  • The storm cohort. 93.6% is confirmation over 564 storms carrying at least 2 independent ground reports — the strictest truth we have, and the cohort travels with the figure wherever it is quoted. Every storm in the cohort counts, including those radar never resolved into a trackable object.
  • Corroborated truth. Every head-to-head on this page is scored in that scope: a truth row is kept only when its ground truth attributes to a storm at least 2 people reported, applied identically to all three systems by a rule that reads no system’s score.
  • Matched alarm budget. Each catch-rate contest cuts Anvil to the alarm burden the baseline itself spent — its own tracks on alarm — before counting. The ProbSevere v3 arm is measured over the tracks it scores, because it produces no value on the rest; MESH covers the full cohort, so its arm uses it. At storm grain the comparison figures are Anvil’s own record; the head-to-heads are at track grain, where the budget-matched measurement exists.
  • The nowcast ratio is pooled over 20 storm days; the day-clustered interval clears 1.0, and the separation from persistence is measured at the 30- and 60-minute horizons.
  • Two of the four are statistical. anvil-today-3 — Calibration layer. Not a trained machine-learning model. anvil-outlook-1 — Calibrated statistical model. Not a trained machine-learning model. A figure from either is not evidence about a trained model. What the same-day layer improves is calibration.
  • Horizons are scored distances. Every horizon and every lead day here is a distance ahead a model is graded at, after the fact. None of it is a statement about what reaches a person, or when, and we publish no figure that describes one.
  • Generations. The detection head-to-heads, the coverage figures and the storm cohort are measured on anvil-detect-6, the serving generation. The reliability comparison is measured on the earlier detect generation and is labelled so where it renders; the null-day audit comes from its own artifact and window, named in its caption.
  • Offline measurement. The detection and comparison figures are an offline re-scoring of the models across historical rows — the right way to obtain a sample this size. Scope: Contiguous United States only.
  • Named baselines. MESH and ProbSevere v3 belong to their respective operators and are named here as the operational baselines Anvil is measured against, on the comparison basis each figure states. No endorsement by their operators is implied.

Where to go next