275 years of the world’s weather, station by station.
132,501 weather stations. 95.1 million monthly observations, from 1750 to this morning. Explore them on a map, in charts, or just ask.
The stripes above are a placeholder while the API is built — shaped like an anomaly series, but not measured from anything.- 132,501
- stations
- Every station in the GHCN-Daily inventory, on six continents.
- 95.1M
- monthly observations
- Station × element × year × month, aggregated from ~8 GB of daily records.
- 1750
- earliest record
- Through to the present — a little over 275 years of coverage.
- nightly
- full rebuild
- NOAA rewrites history, so the pipeline rebuilds everything rather than appending.
What you can do with it
The map
in progressGridded anomalies on equal-area H3 cells, scrubbable by month across 275 years. Thinly-sampled cells are drawn as thinly sampled, not filled in.
The charts
in progressWarming stripes, station timeseries with a completeness band, and year-by-month anomaly heatmaps — each against that station’s own baseline.
The chat
plannedAsk in plain language. Answers come from validated tool calls against a small typed surface, not from a model writing SQL against the database.
Read honestly, or not at all
This is raw station data. It has not been homogenised, and the station network itself has changed enormously — two-thirds of stations measure only precipitation, and coverage is heavily biased toward North America and Europe.
Anomalies, never averages
A naive global average across these stations plots the changing station mix, not the climate. Everything spatial is aggregated as a departure from each station’s own 1991–2020 baseline.
Sparse rows stay visible
A monthly mean from three observations is not a monthly mean. Every aggregate carries n_obs and completeness, and the API will not hide them from you.
Failed checks are dropped
Observations NOAA flagged as failing a quality check are excluded outright rather than marked and quietly carried forward into the aggregates.
How it gets here
01
NOAA S3
9.2 GB Parquet, public, us-east-102
Fargate + DuckDB
one pass, five aggregate stages03
S3 curated
Parquet + CSV lake04
RDS Postgres
PostGIS + h3, atomic schema swap05
Lambda in VPC
the only route to the database06
Vercel
Next.js, edge-cached
The pipeline never copies the source. NOAA’s Parquet already sits in S3 in the region the compute runs in; each nightly run re-shapes it into aggregates matched to the queries this app actually makes.
The curated tables
| Table | Grain | Rows |
|---|---|---|
stations | station | 132,501 |
monthly | station × element × year × month | 95.1M |
annual | station × element × year | 9.0M |
normals | station × element × month | 600k |
grid_monthly | H3 cell × element × year × month | 27.5M |