TornadoLookup
Home · About

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

NameTypeRequiredNotes
latfloatyesDecimal degrees, WGS84.
lngfloatyesDecimal degrees, WGS84. Negative in the western hemisphere.
radiusfloatnoMiles. 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

FieldTypeNotes
lat / lngfloatThe query point, echoed back.
radius_mifloatThe radius actually searched (after auto-expand if applicable).
expandedbooltrue if the server widened to 200mi because the requested radius was empty.
countintNumber of tornadoes returned (max 100 at default radius, 25 if expanded).
tornadoesarrayTornadoes within the radius, sorted by distance_mi ascending.
most_significantobject or nullThe 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

FieldTypeNotes
event_idintNOAA Storm Events ID. Detail page lives at /event/{event_id}.
state / state_slugstringe.g. "Missouri" / "missouri".
countystringNOAA's county or forecast-zone name. May be empty for older or zone-fcst entries.
begin_datestringYYYY-MM-DD, local date of the event.
f_scalestring"EF0""EF5" for post-2007 events, "F0""F5" for pre-2007. May be empty for unrated entries.
deaths / injuriesintDirect only — NOAA's indirect-death column is not surfaced here.
damage_propertyintUSD, point-in-time, not inflation-adjusted.
path_length_mifloatNWS-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 / lonfloatBegin point of the tornado, decimal degrees.
distance_mifloatGreat-circle distance from the query point to the tornado's begin point.
famous_namestring, optionalCurated label for ~35 well-known tornadoes — "Joplin Tornado (2011)", "Mayfield Tornado (2021)", etc. Absent for events without a curated name.

Polite use

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.