How the figures are made

Every figure on PlainClimate comes from a named public file: NOAA's 1991-2020 U.S. Climate Normals, NOAA's station records served by the Regional Climate Centers, and NOAA's statewide climate series. Each page names its station, the file and the period, and links the file so the figure can be checked.

First published · revised

What you can check

A place page shows the climate of one NOAA weather station: the station that keeps the place's official record where the National Weather Service names one (usually the main airport), otherwise the station whose name and position match the place. The station's name, its NOAA identifier, its coordinates, its elevation and, where the Census Bureau's center of the place is a fair center (a ZIP code's center lies within 3 km of it), its distance from that center are printed under the heading. The source line under each section links the NOAA file the section reads, so a reader can open the same numbers at the source.

The sources

  • NOAA NCEI U.S. Climate Normals, 1991-2020 (released May 2021; 23 stations reissued in 2023): monthly, daily, hourly and annual normals, counts of days above and below thresholds, and the probabilities of the first and last frost. NOAA's own description of the method is in its calculation methodology.
  • The Applied Climate Information System (ACIS) of the NOAA Regional Climate Centers: each station's monthly history since its record began (highest and lowest temperature with dates, mean temperature, precipitation, snowfall), and the National Weather Service's threaded city records, which join the stations a city has used since the 1800s.
  • NOAA's statewide series (nClimDiv): monthly statewide temperature and precipitation since 1895, computed by NOAA from a five-kilometer grid of station data.
  • The Census Bureau's population estimates and Gazetteer files: the place a station represents, its population and its center, and the centers of ZIP Code Tabulation Areas for the frost lookup.

The controls

A scripted pipeline loads each file into one database. It stops when a file arrives shorter than expected, and it checks figures against the source: before this version was published, the monthly and annual normals of three stations were compared field by field with NOAA's files: 198 of 201 values matched, and the three that differed (the growing season) were fixed in the pipeline. A record high or low is shown only when the station has at least twenty complete years and only when the reading is plausible against the station's own normals for that month: a record more than 45 degrees above the month's normal high, or below it, is left out instead of being shown or corrected. A recent year is shown only with all twelve months complete. Statewide figures are NOAA's area-weighted values, not averages of PlainClimate's stations. The growing season is NOAA's own median length, not the gap between two median dates.

Each class of page has its own checks. PlainClimate's data editor (a role carried out with AI agents and scripts, as described below) runs them before every release of the database and records the date here:

What is checked on each kind of page, and when it was last checked
PagesWhat is checkedLast checked
Places and stations (6,409)Each place is matched to the station where the National Weather Service keeps its official climate record (the threaded city records, resolved to their stations through ACIS), and otherwise to a station named for it within its area; a station 10 miles or more from a town is never used for it. A test asserts the official sites of named cities (Chicago O'Hare, Cleveland Hopkins, Cincinnati at CVG). Normals are compared field by field with NOAA's files for sample stations, record highs and lows against the known values of named cities, a sample of every class is opened by a script that fails on an error or a wrong index tag, and every page that has had search visits is opened before each release.October 8, 2026
Stations shown on a town's page (838)A station a few miles from a town that has its own page appears on that page with its own figures; its former address forwards there. The rule is re-run on every rebuild.October 8, 2026
Months of a place (11,916)A month page exists for places whose station keeps hourly normals, places of 100,000 or more people and places with 20,000 or more monthly searches for their name, where the daily normals cover the whole year and the monthly temperature and precipitation normals are complete; elsewhere the month is a row of the place's own table.October 8, 2026
Places of 50,000+ without a station (430)NOAA's gridded normals are read at the cell holding the Census center of the place and of each of its ZIP areas; a test compares the grid with the normals of five big-city airports before each release (highs within about 1°F, lows 1-6°F cooler on the grid, as the pages say). The nearest station records are listed with distance, direction and elevation; snow comes from the nearest record that keeps a snowfall normal, named.October 8, 2026
States, rankings and analysesStatewide values are NOAA's; a test asserts known values (Iowa's statewide normal, Chicago's growing season). Every figure an analysis states is read from the database, never typed.October 8, 2026
Layout and readingEvery kind of page at five screen widths and in both themes, for text that overflows, is too small, too faint or too close to tap.October 8, 2026

How the pages are made

The pages are written by templates that read the database when a page is opened. Every sentence about a place is built from that place's figures, so the wording changes with the numbers: a place with no frost says so, a place with no month between 65 and 85 degrees says which month comes closest. PlainClimate is built with AI tools: they produced the code, the templates and the explanatory text of the guides and analyses; the numbers in them come from database queries, and each analysis states its method and its limits. The figures are checked by automated tests against the source files rather than read page by page, which is why every page shows where its numbers come from and how to verify them.

What the figures cannot tell you

PlainClimate covers climate and nothing else: it publishes no population trends, prices, schools or safety figures, a place's population appears only as context (on its station plate and in the lists of nearby places) and to set which places a ranking or month page includes. A normal describes the average of thirty years at one thermometer. It is not a forecast and it does not say what any single day or year will bring. A station can sit miles from the center of the place it represents and hundreds of feet higher or lower, and the climate can change over that distance, especially near coasts and mountains. Hourly figures such as humidity, wind and cloud exist only for the first-order stations NOAA keeps them for. Recent years come from raw station observations that NOAA has not adjusted for changes of instrument or site, while the normals are adjusted. A place without a station of its own has no figures of its own: a place of 50,000 or more has a page with NOAA's own gridded normals for its center and each of its ZIP areas (an interpolation NOAA publishes, labelled as such) beside its nearest station records, with the distance, direction and elevation of each, and nothing blended by PlainClimate; a smaller place is listed on its nearest record's page; the search and the ZIP lookup point to the nearest stations.

Updates and corrections

The normals change once a decade; the next set covers 2001-2030. The station histories and the statewide series are refreshed when the database is rebuilt; the current edition runs through August 2026. The date a page gives search engines (its sitemap date and its date modified) is the day its content last changed: each rebuild compares what every page shows with the last edition and moves the date only where something changed. If a figure looks wrong, write to hello@plainclimate.com with the page and the figure; the correction is traced to its source, fixed in the pipeline so it stays fixed, and noted on the corrections page.