---
name: nhc-hurdat2-ingestion
description: "How to get NOAA NHC Best Track (HURDAT2) data into a pandas DataFrame and Parquet: access, the request, the format, limits, quirks and terms."
---

# Download NOAA NHC Atlantic HURDAT2 track text

Source entry: https://signal-lab.qdt.ai/datasets/nhc-hurdat2
Provider: https://www.nhc.noaa.gov/data/
Checked against the provider's documentation: 2026-11-06

## Access
- No key. HTTPS GET of the HURDAT2 text file from nhc.noaa.gov.

## Request
```bash
curl -L -o hurdat2-atlantic.txt 'https://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2024-040425.txt'
```

## Format
Comma-delimited HURDAT2 text: storm header lines then six-hourly track rows.

## Load into pandas and Parquet
Needs Python 3 with requests, pandas and pyarrow.
```python
"""NOAA NHC HURDAT2 Atlantic HURDAT2 track -> pandas -> Parquet. No key."""
import requests
import pandas as pd
URL = "https://www.nhc.noaa.gov/data/hurdat/hurdat2-1851-2024-040425.txt"
r = requests.get(URL, timeout=120)
r.raise_for_status()
rows = []
storm_id = storm_name = None
for line in r.text.splitlines():
    if line.startswith(("AL", "EP", "CP")):
        parts = [p.strip() for p in line.split(",")]
        storm_id, storm_name = parts[0], parts[1]
        continue
    if not line.strip() or storm_id is None:
        continue
    parts = [p.strip() for p in line.split(",")]
    if len(parts) < 7:
        continue
    rows.append({"storm_id": storm_id, "name": storm_name, "ymd": parts[0], "hhmm": parts[1], "status": parts[3], "lat": parts[4], "lon": parts[5], "wind_kt": parts[6]})
df = pd.DataFrame(rows)
df.to_parquet("hurdat2_atlantic.parquet", index=False)
print(len(df), "track rows from", df["storm_id"].nunique(), "storms")

```
Run by us on 2026-11-06 (python 3 | pandas | requests). Result: Atlantic HURDAT2 text returned HTTP 200 on 2026-11-06 (~6.8 MB for the checked 1851–2024 file URL).

## Limits
- Not stated numeric rate limit on the checked NHC pages.

## Quirks
- Filename/date suffix under nhc.noaa.gov/data/hurdat/ can change when NHC posts a revised season file; use the links on https://www.nhc.noaa.gov/data/.
- NE/NC Pacific HURDAT2 is a separate file on the same NHC data page.

## Terms and attribution
- NWS disclaimer: information on NWS Web pages "are in the public domain, unless specifically noted otherwise, and may be used without charge for any lawful purpose."
- HURDAT2 is the comma-delimited six-hourly HURDAT2 track format described on the NHC data page.
- Terms page: https://www.weather.gov/disclaimer

## Sources
- https://www.nhc.noaa.gov/data/: "Best Track Data (HURDAT2)"
- https://www.weather.gov/disclaimer: "are in the public domain, unless specifically noted otherwise, and may be used without charge for any lawful purpose"

## Help improve this skill
Missing a source, or see something to improve? Call the MCP tool suggest_source or feedback (or POST /api/suggest or /api/feedback). Reviewed ideas: https://signal-lab.qdt.ai/agent-suggestions

Information for educational purposes only. Free tiers, limits and licenses belong to the providers and may change; check the provider's own terms before using the data.
