EPA AQS

The EPA Air Quality System provides measurements from air quality monitoring stations across the United States. Both an email and API key are required — register at https://aqs.epa.gov/data/api/signup?email=your@email.com.

MetaData(EPAAQS())
MetaData("EPA_AQS_KEY", "10 req/min", :air_quality, Dict(Symbol("14129") => "Lead TSP (µg/m³)", Symbol("44201") => "Ozone (ppm)", Symbol("42101") => "Carbon Monoxide (ppm)", Symbol("42602") => "Nitrogen Dioxide (ppb)", Symbol("88101") => "PM2.5 - Local Conditions (µg/m³)", Symbol("81102") => "PM10 (µg/m³)", Symbol("42401") => "Sulfur Dioxide (ppb)", Symbol("88502") => "PM2.5 - Non-FRM (µg/m³)"), :point, "Station-based", "US", :timeseries, Day(1), "Varies by station (decades)", "Public Domain", "https://aqs.epa.gov/aqsweb/documents/data_api.html", Dict("DataFrames" => "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"))

Setup

Set both environment variables:

ENV["EPA_AQS_EMAIL"] = "your@email.com"
ENV["EPA_AQS_KEY"]   = "your-api-key"

Bounding Box Query

using GeoInterface.Extents: Extent

plan = DataAccessPlan(EPAAQS(),
    Extent(X=(-87.0, -86.7), Y=(33.3, 33.6)),
    Date(2023, 6, 1), Date(2023, 6, 30);
    parameters = [Symbol("88101")])  # PM2.5
files = fetch(plan)

By State / County / Site

Query using FIPS codes (the extent argument is ignored):

# All ozone monitors in Wake County, NC
plan = DataAccessPlan(EPAAQS(), (0.0, 0.0),
    Date(2023, 1, 1), Date(2023, 12, 31);
    parameters = [Symbol("44201")],
    state = "37", county = "183")

# Specific site
plan = DataAccessPlan(EPAAQS(), (0.0, 0.0),
    Date(2023, 1, 1), Date(2023, 12, 31);
    parameters = [Symbol("88101")],
    state = "37", county = "183", site = "0014")

Date ranges spanning multiple calendar years are automatically split into per-year requests (an EPA API constraint).

Options

Keyword Type Default Description
service Symbol :dailyData :sampleData, :dailyData, or :annualData
parameters Vector{Symbol} [Symbol("88101")] Up to 5 EPA parameter codes
state String "" 2-digit state FIPS code
county String "" 3-digit county FIPS code
site String "" 4-digit AQS site number

Variables (Parameter Codes)

Code Pollutant
88101 PM2.5 - Local Conditions (µg/m³)
88502 PM2.5 - Non-FRM (µg/m³)
81102 PM10 (µg/m³)
44201 Ozone (ppm)
42101 Carbon Monoxide (ppm)
42401 Sulfur Dioxide (ppb)
42602 Nitrogen Dioxide (ppb)
14129 Lead TSP (µg/m³)