SourcesThe data family
airdata.dev
Free, versioned daily and yearly Air Quality Index figures for US counties from 1980, built from EPA's AirData and AirNow, with each row marked validated or preliminary.
What it is
airdata.dev is a free public-data site for US air quality. It republishes the Environmental Protection Agency’s county Air Quality Index (AQI) figures as plain files and a simple API, with no key or signup. Like this site, it’s run by Eric Ness.
It joins two EPA sources. The validated history comes from EPA’s AirData files, which draw on the Air Quality System (AQS), EPA’s regulatory database. The days since EPA’s last AirData release come from AirNow, EPA’s real-time reporting system. Every row says which one it came from.
What it measures
The site has two datasets.
- Daily air quality index by county. The daily AQI for every US county with an EPA monitor, from 1980 to yesterday. Each row gives the AQI, its category (Good to Hazardous), the pollutant behind it, the monitoring site behind it, how many sites reported, and a
validatedflag. Rows up to EPA’s latest AirData release are validated. Later days are preliminary AirNow data, cover only ozone, PM2.5, PM10 and carbon monoxide, and never replace a validated row. Updated daily. - Yearly air quality summary by county. EPA’s yearly AQI summary for each county with a monitor, from 1980: days in each AQI category, the highest, 90th-percentile and median daily AQI, and how many days each pollutant set the AQI. Updated every six months, and the latest year is partial until EPA’s next release completes it.
What the site adds: the validated and preliminary days joined into one daily series, one place-ID scheme shared with its sister sites (us-county- plus the five-digit FIPS code), files in JSON, CSV and Parquet, a version for every update, and checks before each one is published. If a check fails, the last good version stays live. It also builds ten yearly indicators, such as the 90th-percentile AQI and the days ozone set the AQI, which visualizedata.org charts.
What it misses
Most counties have no monitor. The site covers counties with an EPA monitor, not every county. In the yearly file tested on 2026-11-14, 984 counties had a 2025 row, out of the more than 3,200 counties and equivalents the site’s place list covers. A county with no row has no data, not clean air.
A county AQI is one monitor’s worst reading. The county figure is the highest AQI among its monitors that day. EPA notes that many areas monitor some pollutants but not all, so a county’s AQI only reflects what is measured there. EPA also dropped sulfur dioxide from its county AQI report in 2021, because SO2 is too local to stand for a whole county.
Recent days are not checked yet. EPA says AirNow data get preliminary checks but not the full validation used for AQS, and AirNow is meant for public reporting, not regulatory use. For those preliminary days, airdata.dev works out the county AQI itself, as the highest site AQI reported to AirNow. Even AirData’s current-year figures are preliminary until May 1 of the next year, and EPA warns that comparing them with past years may not be valid. EPA refreshes its AirData files twice a year, in June and December.
It’s a copy. For anything high-stakes, such as a regulatory question, check the figure against EPA’s own AirData tools.
How to access it
1Browse the datasets
Start at airdata.dev/datasets/. Each dataset page shows its coverage, schema, license, credit line and every endpoint, with a chart.
2Download the whole dataset
Each dataset is one CSV or Parquet file, at /v1/{dataset}/download/{dataset}.csv (or .parquet). For example, https://api.airdata.dev/v1/county-aqi-annual/download/county-aqi-annual.csv is the full yearly summary. Parquet keeps column types and is much smaller.
3Call the API
The base URL is https://api.airdata.dev/v1. The catalog at /v1/catalog lists each dataset with its current version and coverage. Each series for each place is its own small file, at /v1/{dataset}/{series}/{location}.json (or .csv).
For example, https://api.airdata.dev/v1/county-aqi-annual/summary/us-county-06037.csv returns the yearly summary for Los Angeles County. Tested on 2026-11-14, it returned years from 1980 to 2026, with 2026 still partial (120 days). The daily file for the same county, /v1/county-aqi-daily/aqi/us-county-06037.csv, ran to 2026-11-13, with the latest days marked validated: false.
4Read the docs
The docs cover the URL scheme, place IDs, formats, versions, caching and errors. The API reference lists the exact URLs. Without a key you can make 120 requests a minute from one IP address, so download the bulk file for large pulls. The status page shows whether each dataset is current.
How to cite it
Cite the version you used, and credit EPA with the exact text given on each dataset page and the sources page. For validated data, that credit names the US Environmental Protection Agency’s Air Quality System Data Mart. Preliminary rows carry a longer credit line to the agencies that own the AirNow data, noting the values are not yet validated.
Every update gets a version ID: the publish date plus the start of a hash, such as 2026-10-26.271cefd8c0. Put it after the dataset ID with @ to pin it, and a pinned URL always returns the same data. The site says to cite the monthly snapshots, the first version of each month, because those are kept permanently. Other versions may be removed after 30 days. /v1/{dataset}/versions lists them.
A worked example, for Los Angeles County in the October 2026 snapshot:
US Environmental Protection Agency, Air Quality System Data Mart, annual AQI summary for Los Angeles County, CA. Retrieved via airdata.dev, county-aqi-annual version 2026-10-26.271cefd8c0, https://api.airdata.dev/v1/county-aqi-annual@2026-10-26.271cefd8c0/summary/us-county-06037.csv, accessed 14 November 2026.
If your result uses preliminary days, say so in the text.
Sources & further reading
End of page · Back to top