Public API
TornadoLookup serves its core lookup data as plain JSON. If you want to programmatically pull every tornado within N miles of a point, hit a single endpoint and get back the same data the lookup page uses — including the curated famous-event names where applicable.
No authentication, no API keys, no signup. Please cache responses and don't hammer the endpoint — see the polite-use notes at the bottom.
Endpoint
GET https://tornadolookup.com/api/nearby
Parameters
| Name | Type | Required | Notes |
|---|---|---|---|
lat | float | yes | Decimal degrees, WGS84. |
lng | float | yes | Decimal degrees, WGS84. Negative in the western hemisphere. |
radius | float | no | Miles. Default 50. Max 250. If the requested radius returns zero tornadoes, the server expands automatically to 200mi and sets expanded: true. |
Example — tornadoes within 20 miles of Joplin, Missouri
curl 'https://tornadolookup.com/api/nearby?lat=37.07&lng=-94.51&radius=20'
Response, abbreviated for readability:
{
"lat": 37.07,
"lng": -94.51,
"radius_mi": 20,
"expanded": false,
"count": 100,
"most_significant": {
"event_id": 296617,
"state": "Missouri",
"state_slug": "missouri",
"county": "Jasper",
"begin_date": "2011-05-22",
"f_scale": "EF5",
"deaths": 161,
"injuries": 1150,
"damage_property": 2800000000,
"path_length_mi": 8.8,
"lat": 37.056,
"lon": -94.5701,
"distance_mi": 3.45,
"famous_name": "Joplin Tornado (2011)"
},
"tornadoes": [
{ "event_id": 1167423, "begin_date": "2024-05-06",
"f_scale": "EF1", "deaths": 0, "distance_mi": 0.69, ... },
...
]
}
Top-level response
| Field | Type | Notes |
|---|---|---|
lat / lng | float | The query point, echoed back. |
radius_mi | float | The radius actually searched (after auto-expand if applicable). |
expanded | bool | true if the server widened to 200mi because the requested radius was empty. |
count | int | Number of tornadoes returned (max 100 at default radius, 25 if expanded). |
tornadoes | array | Tornadoes within the radius, sorted by distance_mi ascending. |
most_significant | object or null | The deaths-DESC top event in the radius, surfaced separately when it (a) clears the SPC significance bar (≥1 death or EF3+) and (b) is not already the closest result. Useful for highlighting headline events that would otherwise hide behind a closer F0. |
Each tornado object
| Field | Type | Notes |
|---|---|---|
event_id | int | NOAA Storm Events ID. Detail page lives at /event/{event_id}. |
state / state_slug | string | e.g. "Missouri" / "missouri". |
county | string | NOAA's county or forecast-zone name. May be empty for older or zone-fcst entries. |
begin_date | string | YYYY-MM-DD, local date of the event. |
f_scale | string | "EF0"–"EF5" for post-2007 events, "F0"–"F5" for pre-2007. May be empty for unrated entries. |
deaths / injuries | int | Direct only — NOAA's indirect-death column is not surfaced here. |
damage_property | int | USD, point-in-time, not inflation-adjusted. |
path_length_mi | float | NWS-recorded path length. NOAA splits long paths across counties, so a single tornado can have multiple rows; this endpoint preserves the raw rows rather than aggregating. |
lat / lon | float | Begin point of the tornado, decimal degrees. |
distance_mi | float | Great-circle distance from the query point to the tornado's begin point. |
famous_name | string, optional | Curated label for ~35 well-known tornadoes — "Joplin Tornado (2011)", "Mayfield Tornado (2021)", etc. Absent for events without a curated name. |
Polite use
- Responses include
Cache-Control: public, max-age=3600. Please honor it — caching for an hour is plenty for almost any client. - This is a single-binary Go server on one VPS. If you need to pull tens of thousands of points, say hi first — we'll send you a SQLite snapshot or a static dump rather than have you hit the API in a loop.
- Data is the NOAA Storm Events Database, public domain. The
famous_nameannotations are TornadoLookup's; everything else is NOAA's. - No SLA, no warranty, no guarantee the schema won't change. We try to be backwards-compatible but reserve the right to add fields.
A working consumer
tornado-near.wick — a 50-line program in Wick (a tiny Lisp) that hits this endpoint for five cities and prints the most significant historical tornado within 20 miles of each. A working example of how the response shape composes.