STORM INTELLIGENCE · LLM-POWERED

Every hailstone.
Every storm.
Plain English.

Ask in natural language. Get cited, weather-bulletin answers with an interactive map you can embed anywhere — backed by 17 years of NOAA SPC archives.

HailMap · Storm Chat
Did hail hit 73102 last May?
Researching…
2.75"
Baseball · 2025-05-17
Inside the 1.0" contour · 27 reports
loading map
2.75" baseball hail hit ZIP 73102 on 17 May 2025.
The storm peaked west of the location with high confidence. ZIP 73102 sat inside the 1.0" contour.
Sources: 27 SPC reports · 27 NWS LSR
0
thousand storm reports indexed
0
years of NOAA SPC archive
0
avg time-to-answer
HOW IT WORKS

From question to cited map in three hops.

The agent parses your phrasing, calls the tools it needs in parallel, and returns a factual report alongside the interactive swath.

01 · ASK
Fuzzy phrasing welcome
No date pickers, no ZIP lookups. Vague locations and rough date windows are fine — the agent normalizes them.
# input
"Any bad hail near my farm
outside Lubbock last spring?"
02 · RESEARCH
Tools fire in parallel
Geocode and date-parse run speculatively while the model assembles its first turn. Storm search and hit-check follow on the same loop.
geocode_location
parse_date_range
list_recent_storms
check_hit + build_embed
03 · ANSWER
Bulletin + embed
A short, declarative weather-bulletin response with cited sources, plus a map you can embed anywhere.
# output
1.75" hail confirmed within 2.1 mi
of Lubbock on 23 Apr 2024.

High confidence · 9 SPC reports
REAL STORMS · REAL MAPS

Each map below is a live embed.

Every answer ships with a self-contained live map. Pan, zoom, click bands and pins — the same swath the agent cites, rendered on the fly.

UNDER THE HOOD

Eight deterministic tools. One agent.

Each tool is a pure function over a local SQLite database — no third-party round-trips at query time. The LLM orchestrates them with strict JSON Schema and a typed contract.

geocode_location
ZIP / lat-lon / city → coordinates. Census + Nominatim fallback.
parse_date_range
"Last May" / "spring 2024" / ISO ranges → normalized window.
list_recent_storms
Episode-grouped storms near a location, sorted by max hail size.
get_storm_details
Full per-storm record — observations, thresholds, confidence.
check_hit
Point-in-polygon against Gaussian-decay swath contours.
summarize_swaths
Aggregate stats for a region + window: count, peak, worst date.
get_historical_context
Fallback for no-match queries — auto-widening radius search.
build_embed
Produces ready-to-paste iframe HTML + preview image URL.
METHODOLOGY · PEER-REVIEWED

Every blob is a Gaussian field, calibrated to MESH.

No black box. The swath you see is a deterministic field synthesis grounded in published radar-hail research — reproducible from the raw SPC points up.

FIELD SYNTHESIS · THE CORE EQUATION
field(x,y) = maxi [ Si · 1.4 · exp( −di2 / 2σi2 ) ]
Si Reported hail diameter at observation i, in inches.
di Great-circle distance from grid cell to observation i.
σi Decay scale tied to Si via Blair et al. swath geometry.
1.4 Intensity scalar compensating for SPC threshold-increment under-reporting.

σ-vs-size calibration

BLAIR ET AL. 2017 — RADAR-VERIFIED SWATH HALF-WIDTHS
HAIL DIAMETERσ (KM)OBSERVED HALF-WIDTH
1.0″18.7~22 km
2.0″9.3~11 km
3.0″6.2~7 km
4.0″+4.4~5 km

The pipeline

RAW POINTS → DRAWN POLYGON
01
Ingest. SPC CSVs + NWS LSR archive deduped on (lat, lon, time, size); WAL-mode SQLite with bbox+date indexes.
02
Field synthesis. Gaussian decay applied to each report on a 0.015° grid (~1.7 km) with a 0.40° pad.
03
Morphological smoothing. Two-pass open-then-close buffer (Shapely) — eliminates speckle, preserves organic swath geometry.
04
Contour extraction. Iso-intensity polygons at HAAG-aligned thresholds; representative-point labels for tooltip placement.
HIGH CONFIDENCE
≥ 5 obs
Multiple corroborated reports within the cell. Ortega et al. (2009) verification standard — used for adjuster-grade evidence.
MEDIUM CONFIDENCE
2 – 4 obs
Localized cluster with cross-source agreement (SPC ∩ LSR). Suitable for triage and initial scoping.
LOW CONFIDENCE
0 – 1 obs
Extrapolated zone — flagged distinctly from measured swaths per HAAG methodology. Always disclosed in the response.
1998 Witt et al. — MESH algorithm derivation 2017 Blair et al. — Hail swath geometry from mobile radar 2009 Ortega et al. — Hail verification standard HAAG Hail-impact forensic methodology
DATA PROVENANCE

Three datasets. One source of truth.

Every claim cites its origin. Each row is reachable in milliseconds — local SQLite, no third-party round-trips at query time.

0
THOUSAND ROWS
SPC hail reports
NOAA Storm Prediction Center annual hail CSVs, 2008 to present. Verified ground reports with size, time, location.
0
THOUSAND ROWS
NWS Local Storm Reports
Trained spotters, public, and law-enforcement reports archived by Iowa Environmental Mesonet. Real-time corroboration of SPC data.
0
POLYGONS · LAZY-CACHED
NWS Severe Thunderstorm Warnings
Storm-Based Warning polygons from IEM SBW archive. Pulled on demand and cached forever — historical data is immutable.
DEVELOPER API

One POST. Full storm intelligence.

The same agent that powers the chat is available as a clean JSON API. Pick your model tier per request: fast for speed, balanced for routine queries, deep for complex multi-storm research.

Structured response — summary, embed_html, sources, trace, cost — all in one shot.
SSE streaming available on /chat/stream for chat-style integrations.
Live embed — each response includes a ready-to-paste iframe rendering an interactive swath map.
Drop-in script<script src="/embed/loader.js"> auto-injects iframes for sites that can't use them directly.
# Ask once — get a bulletin + a ready-to-embed map.
curl -X POST https://hailmap.app/storm-search \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "summarize hail in DFW this April",
    "model": "fast"
  }'

# →
{
  "summary": "**4 significant-hail days in DFW…",
  "embed": { "iframe_html": "<iframe …>" },
  "sources": [ /* SPC, NWS LSR, SBW */ ],
  "result_type": "match",
  "cost_usd": 0.012,
  "duration_ms": 7700
}
Start with a question.

Live playground, public API, no signup. Embed the first map within a minute.

Open Chat Try the Embed Builder