Hurricane category by wind speed
Enter a sustained wind and get its hurricane category: 100 mph is Category 2, the 96–110 mph band, with a plain description of the damage it typically brings. Works in mph, knots, km/h or m/s. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Wind speed
- 100 mph
- Wind speed mph
- 100 mph
- Wind speed kn
- 86.8976241901
- Wind speed kmh
- 160.9344
- Wind speed ms
- 44.704
Tropical cyclones are ranked by sustained wind speed on the Saffir-Simpson Hurricane Wind Scale, the same language emergency managers, broadcasters, and coastal households use when a named storm strengthens. Category numbers are not abstract labels: each band corresponds to a published wind range and a typical damage narrative that helps people compare a forecast max wind or a buoy report against historical events. This capability accepts a sustained wind magnitude in miles per hour, knots, kilometres per hour, or metres per second, converts it to statute mph with fixed international factors, and returns the matching category key, human label, numeric category, hurricane flag, wind-range strings, and a concise damage description.
How the Saffir-Simpson categories work
The Saffir-Simpson Hurricane Wind Scale ranks Atlantic and eastern North Pacific tropical cyclones by their peak one-minute sustained surface wind. Your reading is first converted to miles per hour and then placed in a band: tropical storm from 39 to 73 mph, Category 1 up to 95, Category 2 from 96 to 110, Category 3 up to 129, Category 4 up to 156 and Category 5 from 157 mph upward. Each band comes with a short description of the damage it usually causes, so a forecast number becomes something a household can picture.
When to use it and common mistakes
Use it to compare an advisory's maximum sustained wind with past storms, to label a headline or a graphic, or to teach how the categories climb. The most frequent mistake is entering a gust instead of the sustained wind, which pushes the category too high. Another is mixing up knots and miles per hour: 100 mph is Category 2, while 100 knots is a stronger storm. The category describes wind only, not the height of the storm surge. Implausibly high readings are refused as typing errors rather than given a category.
What you can do with it
Coastal preparedness education
Websites map a forecast max sustained wind to Category 1–5 labels and damage blurbs so residents compare scenarios without decoding raw mph tables.
Journalism and CMS automation
Newsrooms convert advisory wind speeds into stable category keys for headlines, graphics, and structured data fields in multilingual articles.
FAQ
What hurricane categories does this lookup use?
Saffir-Simpson wind bands after conversion to mph: tropical storm 39–73, Category 1 74–95, Category 2 96–110, Category 3 111–129, Category 4 130–156, Category 5 ≥ 157.
Which wind units are supported?
The response always includes converted mph, knots, km/h, and m/s magnitudes for display.
Is the hurricane category lookup free?
The browser tool runs free on your device.
Does this calculate storm surge height?
No. It classifies sustained wind speed on the Saffir-Simpson wind scale and returns typical damage language. Surge height depends on bathymetry, tide, track, and size—not wind category alone.
What category is a 100 mph hurricane?
A sustained wind of 100 mph is Category 2, the band from 96 to 110 mph, or 83 to 95 knots. Winds at this level are extremely dangerous and can cause major roof and siding damage even to well-built frame homes.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/weather/storm-surge-category-lookup \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"wind_speed":100}'const res = await fetch("https://api.kit.forhosting.com/weather/storm-surge-category-lookup", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"wind_speed": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/weather/storm-surge-category-lookup",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"wind_speed": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/weather/storm-surge-category-lookup", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"wind_speed":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"wind_speed":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/weather/storm-surge-category-lookup", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"wind_speed": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "weather.storm_surge_category_lookup",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Winds below the tropical-storm threshold fail with invalid_input unless you opt into sub-categories for tropical depressions. The path is pure table logic—no forecast model, no network call, no clock—so education tools, insurance demos, and prepaid API clients pin identical JSON in tests.
Saffir-Simpson bands, inputs, and the tropical-storm threshold
The Saffir-Simpson Hurricane Wind Scale classifies Atlantic and eastern North Pacific tropical cyclones by peak one-minute sustained surface winds. After conversion to statute miles per hour, tropical storm spans thirty-nine through seventy-three miles per hour, Category one covers seventy-four through ninety-five, Category two ninety-six through one hundred ten, Category three one hundred eleven through one hundred twenty-nine, Category four one hundred thirty through one hundred fifty-six, and Category five begins at one hundred fifty-seven miles per hour and has no upper bound in this product. Optional unit defaults to mph and also accepts kn, kt, knots, km/h, and m/s with common spellings. Practical upper bound after conversion is four hundred miles per hour so classroom typos fail loudly. Tropical depression is the band strictly below thirty-nine miles per hour; that label is returned only when include_subcategories is true. If include_subcategories is false or omitted and the converted speed is still below thirty-nine miles per hour, the request fails with invalid_input and a message that names the tropical storm threshold, so callers do not silently treat a depression as a storm. Required field wind_speed is a non-negative finite number; aliases speed, wind, sustained_wind, and v are accepted. Optional include_subcategories accepts boolean true or false and common string forms. Identical inputs always yield identical JSON because the algorithm never touches the network, a model, a clock, or a random generator. Missing fields, negative winds, unknown units, and non-finite values all fail with invalid_input and are not charged.
Reading the response fields and how units convert
Conversion uses fixed international definitions: one statute mile is one thousand six hundred nine point three four four metres, one international knot is one nautical mile of one thousand eight hundred fifty-two metres per hour, and metres per second scale by three thousand six hundred over the statute-mile factor. On success the response echoes wind_speed and unit, then reports wind_speed_mph, wind_speed_kn, wind_speed_kmh, and wind_speed_ms so dashboards can show several columns without reimplementing conversion factors. Category is a stable machine key among tropical_depression, tropical_storm, category_1 through category_5, while category_label is the matching human phrase for UI chips and reports. Category_number is zero for depression and tropical storm and one through five for hurricanes; is_hurricane is true only for categories one through five so filters can separate named hurricanes from pre-hurricane tropical cyclones. Wind_range_mph and wind_range_kn restate the published band for the selected category, and damage carries a short typical-damage narrative aligned with National Hurricane Center style summaries for that band—not a site-specific forecast. Scale is always Saffir-Simpson Hurricane Wind Scale and method is always saffir_simpson_wind_category so downstream code can branch without sniffing shapes. Do not confuse this endpoint with Beaufort force converters, crosswind component tools, or numerical weather prediction—those answer different search intents and different physics.
API usage, pricing, product workflows, and practical limits
Call the free in-browser hurricane category lookup for classroom demos, coastal preparedness pages, and quick personal checks without reimplementing threshold tables in every spreadsheet. Prefer consistent units; if your UI collects knots from marine products, send unit kn rather than converting by hand. Keep expectations educational: this is a wind-band classification tool, not a storm-surge height model, track forecast, or evacuation order, and people under watches or warnings should follow official National Weather Service and emergency-management guidance rather than any single automated label alone. Send a JSON body with required wind_speed and optional unit and include_subcategories. Use the prepaid API when a newsroom CMS, insurance quote prototype, travel-risk SaaS, emergency-management worksheet, or school LMS needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with your own source of sustained wind—advisory text, ASOS observations, or scenario inputs—then store category alongside the raw magnitude for dashboards and export CSV columns for wind_speed_mph, category, and damage. Authors shipping SDKs can map category and is_hurricane into colour bands and alert thresholds—the same ordered labels students and broadcasters learn from Saffir-Simpson teaching materials.
Integration use cases
Classroom and exam auto-grading
Meteorology courses pin expected Saffir-Simpson JSON for given wind speeds and reject depression-range answers unless sub-categories are enabled.
Technical questions
What happens if wind speed is below tropical storm strength?
By default the request fails with invalid_input and a message about the tropical storm threshold (39 mph / 34 kn). Set include_subcategories=true to classify those winds as tropical depression instead.