Skip to content

HURDAT2 best tracks

Available since v0.12.0 as noaa:hurdat2. The National Hurricane Center publishes its complete best-track database as two anonymous plain-text files, one for the Atlantic basin and one for the northeast and north-central Pacific. There is no query interface of any kind: no records API, no per-storm files, no server-side subsetting. The only sensible asset is one whole file per basin, so HURDAT2 is the first usdata dataset whose value lives in the reader rather than the query.

Selecting a basin

basin is atlantic (the default) or pacific, matched case-insensitively. revision optionally names one revision by its date, such as 2026-02-27; see below. Any other parameter, a location or bbox, variables, and text queries are rejected with an error rather than silently ignored, because none of them can change which bytes are downloaded.

Dates are rejected too. Every revision contains the complete record for its basin, so a start/end pair would select nothing; recording a requested window as the asset's time bounds would misdescribe the cached file in the lockfile and provenance sidecar. Asset time bounds instead report the data span named in the filename (1851 through the last completed Atlantic season, 1949 onward for the Pacific). Filter the parsed time column locally. capabilities are all false.

Revisions and filenames

The data directory keeps past revisions, not only the current pair: it listed 41 HURDAT2 data files on 2026-09-12, the oldest a Pacific file revised 2017-04-13. How far back it reaches is the NHC's choice, so treat it as an archive that happens to be deep rather than a complete history. Filenames embed the data span and a revision date, such as hurdat2-1851-2025-02272026.txt and hurdat2-nepac-1949-2025-02272026.txt. The basin token is nepac for the Pacific and either atl or absent for the Atlantic. Revision dates are MMDDYY or MMDDYYYY — never YYYYMMDD — and one Pacific name carries a trailing disambiguating letter, so resolution parses the date rather than sorting filenames as text. Text order genuinely disagrees with revision order: within the 1851-2020 span, 020922 is 2022-02-09 and 052921 is 2021-05-29, so the newer file sorts below the one it supersedes. The newest data span wins first, then the newest revision of that span; names that are not real dates, files for the other basin, and non-local links are ignored.

revision replaces "newest" with one revision date, compared after parsing, so 2026-02-27 selects hurdat2-1851-2025-02272026.txt for the Atlantic basin. A date that no listed file of the basin carries is an error naming the newest revisions, never a fallback to another file. Name a revision when the newest one cannot be read (see opening the file), or to make a first pull choose the same file every time; after that the lockfile pins it anyway.

The complete filename is the stable asset ID, and the URL, original bytes, size, and checksum are preserved. The directory reports approximate sizes (6.8M), so asset size is left unknown rather than guessed. A lockfile restores its pinned URL without listing current revisions, so pull --force is what moves to a newer revision once the NHC publishes one.

Upstream revisions

Agencies revise files in place. A locked restore downloads each pinned URL and fails with a checksum mismatch when the bytes have changed; accept the new bytes for chosen entries with pull --update, or re-resolve the whole manifest with pull --force. A lockfile detects changed data; it does not archive it. Keep the cache with the manifest and lockfile. See provenance and drift.

Opening the file

FetchedAsset.open() uses the pandas extra and selects the hurdat2 reader from the dataset id or the hurdat2-*.txt filename, so it needs no arguments. It returns one row per best-track point:

Column Meaning
storm_id ATCF-style basin, cyclone number, and year, such as AL042021
name Storm name, or UNNAMED
time Track-point time, UTC
record_identifier L landfall, I intensity peak, P pressure minimum, and the other documented codes; missing on ordinary records
status TD, TS, HU, EX, SD, SS, LO, WV, or DB
latitude, longitude Signed decimal degrees, longitude in [-180, 180]; the source hemisphere letters become signs
max_wind_kt Maximum sustained 1-minute surface wind, knots
min_pressure_mb Minimum central pressure, millibars
r34_ne_nm … r64_nw_nm Twelve wind radii: the 34, 50, and 64 kt maximum extent in each quadrant, nautical miles
max_wind_radius_nm Radius of maximum wind, nautical miles

The documented missing sentinels become NaN: -999 anywhere, and the -99 maximum wind left unassigned on a non-developing depression. The NHC format reference ties -99 to 1967; in the current Atlantic file it in fact appears 57 times, all on TD records between 1971 and 1987, and never in the Pacific file. Wind radii were best-tracked only from 2004 and the radius of maximum wind only from 2021, so those columns are mostly NaN in earlier decades; revisions published before 2021 omit the radius-of-maximum-wind field entirely and the reader fills it with NaN. Numeric columns use float dtype so those gaps are representable; units are in the column names rather than a synthesized units map. Text columns keep source strings, and a blank record identifier or status becomes missing rather than an empty string.

Parsing follows the file's own structure: a header line such as AL011851, UNNAMED, 14, is followed by exactly the number of track-point lines it declares. A count that does not match, a line with the wrong number of fields, an unparseable timestamp or coordinate, or text where a measurement belongs raises Hurdat2FormatError from usdata.readers (a ValueError) naming the line, rather than returning a partly parsed table.

Archived revisions read the same way, which is what makes a restored lockfile useful. Two differences show up only in older files. Data lines published before the 2021 season carry 20 values and a terminating comma instead of 21, so max_wind_radius_nm is NaN. And some revisions write a position east of Greenwich in the unwrapped 0-360 west convention, continuing a track from 3.3W to 358.0W; the reader normalizes that to 2.0, the value the NHC itself published for the same point in a later revision. Of the 43 files listed on 2026-09-23, 41 parse. The Pacific revision of 2023-04-27 has a date written C0091018, which the next revision corrects. The newest Atlantic revision, 2026-09-12, has two typos its predecessor did not: a missing comma (63.3N 7.5E) and a latitude written 38.83, which could be 38.8N or 38.3N. Both raise rather than parse to a guess, and the error names the file and the revision parameter; revision: 2026-02-27 reads the previous Atlantic revision, which the examples pin until the NHC corrects the file.

The file takes no reader options, so it is opened with open(), not open_csv(). Opening is local: it never re-fetches, decompresses into the cache, or changes provenance, which is copied into frame.attrs["usdata"].

Scientific limits

HURDAT2 is a post-season reanalysis, not an observation archive. Coverage and accuracy degrade going back in time: storms were missed and intensities underanalyzed before aircraft reconnaissance (1944 in the western Atlantic) and before routine satellite imagery (late 1960s), so counting storms per decade measures observing systems as much as climate. Positions and intensities are best-track estimates at each time, wind radii are quadrant maxima rather than a wind field, and record_identifier marks why an asynoptic record exists rather than enumerating impacts. Continental U.S. landfalls are marked for 1851-1970 and 1991 onward; international landfalls only for 1951-1970 and 1991 onward. Track points for WV and DB status give a lower-tropospheric vorticity center, not a surface center. The Pacific file covers the northeast and north-central Pacific only; it is not a global archive. IBTrACS merges these files with every other agency's tracks into one worldwide record.

Field meanings, record codes, and era-by-era caveats are documented in the NHC Atlantic format reference and northeast Pacific format reference. The manifest example fetches the Atlantic file and reads it locally. The design decision records the whole-file and reader contract.

See the service research notes for dated upstream probes.

Metadata sources

Every value in the catalog entry's resolution, cadence, citation, terms, variables, and limits comes from one of these pages. A field the agency does not publish is left empty rather than estimated.

  • Resolution and variables: the NHC Atlantic and northeast Pacific format references, read through the reader's column table above.
  • Updates and citation: the NHC data page, which records the 2026-02-27 revision adding the 2025 season and asks that Landsea and Franklin (2013) be referenced.
  • Terms: the NWS disclaimer.
  • Latency is empty: HURDAT2 is a post-season reanalysis and the NHC states no lag.

All NOAA datasets.

Reference

noaa:hurdat2 · Released · Included since usdata 0.12. HURDAT2 Atlantic and Pacific Best Tracks.

At a glance

Parameters

Pass these as --param name=value to the CLI, as params: entries in a manifest, or as keyword arguments to build_query.

Parameter Meaning
basin Best-track basin: 'atlantic' (default) or 'pacific'.
revision Revision date of the file to select, such as 2026-02-27; the newest revision by default.

Variables

Variable Units Meaning
storm_id — ATCF-style basin, cyclone number, and year, such as AL042021
name — Storm name, or UNNAMED
time UTC Track-point time
record_identifier — Landfall (L), intensity peak (I), pressure minimum (P), and the other codes
status — TD, TS, HU, EX, SD, SS, LO, WV, or DB
latitude degrees_north Track-point latitude
longitude degrees_east Track-point longitude in [-180, 180]
max_wind_kt knots Maximum sustained 1-minute surface wind
min_pressure_mb millibars Minimum central pressure
r34_ne_nm nautical miles 34 kt wind extent, northeast quadrant
r34_se_nm nautical miles 34 kt wind extent, southeast quadrant
r34_sw_nm nautical miles 34 kt wind extent, southwest quadrant
r34_nw_nm nautical miles 34 kt wind extent, northwest quadrant
r50_ne_nm nautical miles 50 kt wind extent, northeast quadrant
r50_se_nm nautical miles 50 kt wind extent, southeast quadrant
r50_sw_nm nautical miles 50 kt wind extent, southwest quadrant
r50_nw_nm nautical miles 50 kt wind extent, northwest quadrant
r64_ne_nm nautical miles 64 kt wind extent, northeast quadrant
r64_se_nm nautical miles 64 kt wind extent, southeast quadrant
r64_sw_nm nautical miles 64 kt wind extent, southwest quadrant
r64_nw_nm nautical miles 64 kt wind extent, northwest quadrant
max_wind_radius_nm nautical miles Radius of maximum wind, best-tracked from 2021

Catalog facts

  • Availability: since 0.12
  • Domain: Tropical cyclones
  • Spatial resolution: Best-track positions in tenths of a degree
  • Temporal resolution: Six-hourly synoptic times, plus asynoptic records for landfalls and extremes
  • Updates: Annually, after each season's post-storm reanalysis; the 2025 season was added on 2026-02-27
  • Terms of use: https://www.weather.gov/disclaimer
  • Citation: Landsea, C. W. and J. L. Franklin, 2013: Atlantic Hurricane Database Uncertainty and Presentation of a New Database Format. Mon. Wea. Rev., 141, 3576-3592
  • Catalog date range: 1851-01-01 to open-ended
  • Coverage varies by station, product, and date; the range above does not guarantee observations.
  • Upstream documentation
  • License: US Government Work (public domain)
  • Transport: http
  • Adapter: usdata.providers.noaa.hurdat2:Hurdat2