idle-intelligence/metar-stations
METAR Stations (Active, 7-Day Window) A worldwide list of METAR/ASOS weather stations, sourced from the Iowa Environmental Mesonet (IEM) ASOS/AWOS networks. stations.json keeps only stations that actually reported at least once in the trailing 7-day window; stations_all.json keeps the full roster, including stations that were silent over that window (some other station lists still carry these as open), with a flag for whether each one reported. Files and fields… See the full description on the dataset page: https://huggingface.co/datasets/idle-intelligence/metar-stations.
METAR Stations (Active, 7-Day Window)
A worldwide list of METAR/ASOS weather stations, sourced from the Iowa Environmental Mesonet (IEM) ASOS/AWOS networks. stations.json keeps only stations that actually reported at least once in the trailing 7-day window; stations_all.json keeps the full roster, including stations that were silent over that window (some other station lists still carry these as open), with a flag for whether each one reported.
Files and fields
stations.json, active stations only, compact rows for a browser client, one array per station:
stations_all.json, every roster station whether active or silent, same row shape as stations.json plus two trailing fields:
stations.parquet, the same rows as stations.json plus two fields used to build the list, for the Hub's table viewer:
How it was built
build_active_stations.py walks every IEM network whose id ends in ASOS (one network per country or per US state/Canadian province), pulls each network's station roster from IEM's geojson endpoint, then pulls each network's temperature (tmpf) archive over a 7-day window from IEM's asos.py endpoint. A station goes into stations.json only if it has at least one non-empty tmpf reading anywhere in that window; a station's presence in IEM's roster feed (online=true) is not treated as evidence of activity, since some roster entries stay marked online for years after they stop reporting. stations_all.json is built from a second pass over the same per-network geojson roster endpoint (kept for every station this time, not just the active ones) with the reported flag and last_report_utc taken from the already-fetched activity data, so the archive endpoint is never queried twice for the same network.
IEM lists a depth or a wrong negative elevation for 17 coastal and offshore stations (oil platforms, islands, lighthouses); the script sets these to 0 m. Stations that really are below sea level, around the Caspian Sea and in the Imperial Valley, keep their elevation.
Elevations are IEM's; 17 wrong negative values on active coastal and offshore stations are set to 0 m by the build, while silent stations keep IEM's values, a few of them wrong (helidecks, ships), which does not matter for estimates since only reporting stations are used.
Roster seen: 7,534 stations across 266 networks. Kept in stations.json (reported at least once in the 7-day window): 5,614. Silent in that window but present in stations_all.json: 1,920. Build date: 2026-09-28, window 2026-09-21 to 2026-09-28.
Source and license
Data pulled from the Iowa Environmental Mesonet (IEM), Iowa State University: https://mesonet.agron.iastate.edu/. IEM's data is public domain; attribution is appreciated (see https://mesonet.agron.iastate.edu/disclaimer.php). This dataset is released under CC0-1.0. IEM's own terms place no restriction on redistribution beyond that appreciated attribution, so CC0-1.0 is used here rather than a more restrictive license.
How to regenerate
venv/bin/python build_active_stations.pyThe window is computed from the current date each run, so re-running later produces a different 7-day window and station set. Progress checkpoints in checkpoint_rows.jsonl/checkpoint_done_networks.txt (activity) and checkpoint_roster_all.jsonl/checkpoint_roster_done_networks.txt (full roster), so an interrupted run resumes per-network instead of re-fetching from scratch.
Using your own station list
The weather-web library reads any list in the same row format; see its README (github.com/idle-intelligence/weather-web).
