EPA Air Quality System (AQS) Scraper avatar

EPA Air Quality System (AQS) Scraper

Pricing

from $19.00 / 1,000 results

Go to Apify Store
EPA Air Quality System (AQS) Scraper

EPA Air Quality System (AQS) Scraper

Export U.S. ambient air-quality measurements from EPA's Air Quality System: daily summaries by county, hourly sample readings by monitor site, and active monitor inventory by state. Covers PM2.5, PM10, NO2, O3, CO, SO2, lead, VOCs and meteorological data from 10,000+ monitoring stations.

Pricing

from $19.00 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

ParseForge Banner

🌬️ EPA Air Quality System (AQS) Scraper

πŸš€ Export U.S. air quality measurements in seconds. Pull PM2.5, PM10, NO2, O3, CO, SO2, lead, and meteorological readings from 10,000+ EPA monitoring stations nationwide. No signup required for demo data.

πŸ•’ Last updated: 2026-05-21 Β· πŸ“Š 24 fields per record Β· 🏭 10,000+ monitoring stations Β· πŸ‡ΊπŸ‡Έ All 50 states + DC Β· πŸ§ͺ 11 pollutant parameters

The EPA AQS Scraper connects directly to the U.S. Environmental Protection Agency's Air Quality System (AQS) API and delivers real ambient air-quality data in three collection modes: daily county summaries, hourly site-level samples, and an active monitor inventory. The underlying AQS database is the authoritative federal reference for U.S. ambient air monitoring and has been maintained by the EPA and state/local agencies since the 1970s.

The data covers all 50 states, the District of Columbia, and U.S. territories. It spans criteria pollutants regulated under the Clean Air Act - PM2.5, PM10, carbon monoxide, sulfur dioxide, nitrogen dioxide, ozone, and lead - plus meteorological parameters and volatile organic compounds from over 10,000 monitoring stations. This Actor makes that data downloadable as CSV, Excel, JSON, or XML in seconds. No parsing engineering required.

🎯 Target AudienceπŸ’‘ Primary Use Cases
Environmental engineers, public health researchers, climate scientists, city planners, journalists, compliance teams, GIS analystsAQI dashboards, health impact studies, regulatory compliance reporting, air-quality mapping, trend analysis, research datasets

πŸ“‹ What the EPA AQS Scraper does

Three dataset modes in a single Actor:

  • πŸ“… Daily Summary by County. Statistical daily summaries (arithmetic mean, first max value, AQI, observation count) for any county, pollutant, and date range up to one year.
  • ⏱️ Hourly Samples by Site. Individual sample measurements with local and GMT timestamps for any specific monitoring site.
  • πŸ—ΊοΈ Active Monitor Inventory. Directory of all active or historical monitoring stations in a state, including coordinates, agency, monitor type, and operational dates.

Each record includes geographic identifiers (state, county, city, site address, CBSA), measurement metadata (units, sample duration, method, AQI), and precise coordinates (latitude/longitude).

πŸ’‘ Why it matters: the EPA AQS is the gold standard for U.S. air quality data, but navigating its raw API requires knowing parameter codes, FIPS codes, date formats, and credential setup. This Actor handles all of that so researchers, engineers, and analysts can access the data immediately without writing a single line of code.


🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset.


βš™οΈ Input

InputTypeDefaultBehavior
maxItemsinteger10Records to return. Free plan caps at 10, paid plan at 1,000,000.
endpointselectdailyDataByCountyWhich EPA dataset to export: Daily Summary, Hourly Samples, or Monitor Inventory.
parameterselect88101Pollutant parameter code (e.g. PM2.5, NO2, O3, CO).
stateCodeselect06Two-digit state FIPS code. Required for all endpoints.
countyCodetextfield037Three-digit county FIPS code. Required for dailyDataByCounty and sampleDataBySite.
siteNumbertextfield0080Four-digit site number. Required for sampleDataBySite.
startDatetextfield20240101Start date in YYYYMMDD format. Required for all endpoints.
endDatetextfield20240131End date in YYYYMMDD format. Max one year per query.
emailtextfield(demo account)Optional. Your registered EPA AQS email. Defaults to shared demo account.
accessKeytextfield(demo key)Optional. Your EPA AQS access key. Personal keys get higher quotas.

Example 1 - Daily PM2.5 summary for Los Angeles County:

{
"endpoint": "dailyDataByCounty",
"parameter": "88101",
"stateCode": "06",
"countyCode": "037",
"startDate": "20240101",
"endDate": "20240131",
"maxItems": 100
}

Example 2 - Active PM2.5 monitors in California:

{
"endpoint": "monitorsByState",
"parameter": "88101",
"stateCode": "06",
"startDate": "20240101",
"endDate": "20240131",
"maxItems": 500
}

⚠️ Good to Know: The Actor uses a shared demo EPA account by default. Demo credentials have low rate limits and may return limited results. For production use, register a free account at https://aqs.epa.gov/data/api/signup and supply your own email + access key. The EPA AQS API accepts a maximum date range of one year per query.


πŸ“Š Output

FieldTypeDescription
stateCodestringTwo-digit state FIPS code
countyCodestringThree-digit county FIPS code
siteNumberstringFour-digit monitoring site number
stateNamestringFull state name
countyNamestringFull county name
cityNamestringCity where the monitor is located
localSiteNamestringEPA-assigned local site name
siteAddressstringStreet address of the monitor
parameterCodestringEPA parameter code (e.g. 88101)
parameterNamestringFull pollutant name
pocnumberParameter occurrence code (distinguishes co-located monitors)
datumstringCoordinate datum (NAD83, WGS84)
pollutantStandardstringNAAQS standard the measurement applies to (daily only)
sampleDurationstringAveraging period (e.g. 24 HOUR, 1 HOUR)
unitsstringUnit of measure
valuenumberMeasured concentration or reading
datestringMeasurement date (YYYY-MM-DD)
timestringMeasurement time in local timezone (hourly only)
datetimeLocalstringCombined local date-time (hourly only)
datetimeGmtstringCombined GMT date-time (hourly only)
aqinumberAir Quality Index (daily only)
observationCountnumberNumber of valid observations (daily only)
eventTypestringExceptional event type (daily only)
methodstringSampling method description
latitudenumberMonitor latitude
longitudenumberMonitor longitude
cbsaCodestringCore Based Statistical Area code
cbsaNamestringCBSA name
openDatestringMonitor open date (monitors endpoint only)
closeDatestringMonitor close date if inactive (monitors endpoint only)
monitoringAgencystringAgency operating the monitor (monitors endpoint only)
monitorTypestringMonitor classification (e.g. SLAMS, monitors endpoint only)
measurementScalestringGeographic measurement scale (monitors endpoint only)
sampleFrequencystringSample collection frequency (hourly only)
qualifierstringData qualifier flags (hourly only)
methodTypestringFRM/FEM classification (hourly only)
scrapedAtstringISO timestamp when the record was collected
errorstringError message if extraction failed

Sample records (dailyDataByCounty, PM2.5, Los Angeles 2024-01-01):

[
{
"stateCode": "06",
"countyCode": "037",
"siteNumber": "4008",
"stateName": "California",
"countyName": "Los Angeles",
"cityName": "Long Beach",
"localSiteName": "Long Beach-Route 710 Near Road",
"siteAddress": "5895 Long Beach Blvd.",
"parameterCode": "88101",
"parameterName": "PM2.5 - Local Conditions",
"poc": 1,
"datum": "NAD83",
"pollutantStandard": "PM25 24-hour 2006",
"sampleDuration": "24 HOUR",
"units": "Micrograms/cubic meter (LC)",
"value": 30.7,
"date": "2024-01-01",
"aqi": 91,
"observationCount": 1,
"eventType": "No Events",
"method": "R & P Model 2025 PM-2.5 Sequential Air Sampler w/VSCC - Gravimetric",
"latitude": 33.859662,
"longitude": -118.200707,
"cbsaCode": "31080",
"cbsaName": "Los Angeles-Long Beach-Anaheim, CA",
"scrapedAt": "2026-05-21T10:00:00.000Z",
"error": null
},
{
"stateCode": "06",
"countyCode": "037",
"siteNumber": "4008",
"stateName": "California",
"countyName": "Los Angeles",
"cityName": "Long Beach",
"localSiteName": "Long Beach-Route 710 Near Road",
"siteAddress": "5895 Long Beach Blvd.",
"parameterCode": "88101",
"parameterName": "PM2.5 - Local Conditions",
"poc": 1,
"datum": "NAD83",
"pollutantStandard": "PM25 24-hour 2006",
"sampleDuration": "24 HOUR",
"units": "Micrograms/cubic meter (LC)",
"value": 16.7,
"date": "2024-01-02",
"aqi": 65,
"observationCount": 1,
"eventType": "No Events",
"method": "R & P Model 2025 PM-2.5 Sequential Air Sampler w/VSCC - Gravimetric",
"latitude": 33.859662,
"longitude": -118.200707,
"cbsaCode": "31080",
"cbsaName": "Los Angeles-Long Beach-Anaheim, CA",
"scrapedAt": "2026-05-21T10:00:01.000Z",
"error": null
},
{
"stateCode": "06",
"countyCode": "013",
"siteNumber": "0002",
"stateName": "California",
"countyName": "Contra Costa",
"cityName": "Concord",
"localSiteName": "Concord",
"siteAddress": "2956-A TREAT BOULEVARD",
"parameterCode": "88101",
"parameterName": "PM2.5 - Local Conditions",
"poc": 1,
"datum": "WGS84",
"openDate": "1999-01-08",
"closeDate": null,
"monitoringAgency": "Bay Area Air Quality Management District",
"monitorType": "SLAMS",
"measurementScale": "NEIGHBORHOOD",
"method": "R & P Model 2025 PM-2.5 Sequential Air Sampler w/VSCC - Gravimetric",
"latitude": 37.936013,
"longitude": -122.026154,
"cbsaCode": "41860",
"cbsaName": "San Francisco-Oakland-Hayward, CA",
"scrapedAt": "2026-05-21T10:00:02.000Z",
"error": null
}
]

✨ Why choose this Actor

FeatureDetail
πŸ›οΈ Authoritative sourceConnects directly to the EPA's official AQS API - the federal gold standard for U.S. ambient air quality data
πŸ§ͺ 11 pollutant parametersPM2.5, PM10, NO2, O3, CO, SO2, lead, VOCs, reactive nitrogen oxides, wind, and temperature
πŸ—ΊοΈ 3 collection modesDaily county summaries, hourly site samples, and active monitor inventory in one Actor
πŸ“ 10,000+ stationsFull coverage of all state, local, and federal air monitoring networks
πŸ‡ΊπŸ‡Έ 50 states + DCEvery U.S. jurisdiction with FIPS-coded filters
πŸ“¦ Instant exportCSV, Excel, JSON, and XML via Apify dataset download with no extra steps
πŸ”‘ No key requiredDemo credentials built-in for immediate use; personal keys unlock higher quotas
πŸ’° Pay only for resultsPay-per-event pricing - you are billed only for records actually delivered

πŸ“ˆ How it compares to alternatives

MethodSetup timeEPA accessStructured outputFilters
This Actor~2 minDirect APIYesState, county, site, parameter, date
Manual API calls30-60 minDirectManualRequires knowing all FIPS and param codes
Data.gov downloads10-20 minBulk CSVPartialLimited, no per-county/site filter
Third-party AQI APIs5-10 minAggregated onlyYesLimited historical depth
Python/R scripts1-4 hoursDirectCustomFull, but requires coding

πŸš€ How to use

  1. Create a free account - Create a free account w/ $5 credit
  2. Open the Actor - Search "EPA AQS" in the Apify Store or use the direct link.
  3. Select your dataset - Choose Daily Summary, Hourly Samples, or Monitor Inventory.
  4. Set your filters - Pick state, county, pollutant parameter, and date range.
  5. Run - Click Start. Results appear in the dataset within seconds.
  6. Export - Download as CSV, Excel, JSON, or XML from the dataset page.

πŸ’Ό Business use cases

Environmental compliance monitoring

Regulatory teams and legal departments use daily PM2.5 and NO2 summaries to verify compliance with NAAQS standards, prepare air quality reports, and support permit applications. The daily county endpoint returns observation counts and validity flags that document data completeness.

Public health and epidemiology research

Researchers correlating air pollution exposure with health outcomes need clean, date-aligned measurement series. This Actor produces ready-to-join datasets keyed by FIPS codes that merge directly with census health data, hospital admissions records, and mortality tables.

Real estate and urban planning

Developers and planners assessing site suitability often need historical AQI profiles for neighborhoods. Daily summaries by county with AQI fields let analysts build multi-year exposure profiles and support environmental impact statements.

Journalism and advocacy

Reporters covering environmental justice stories need current and historical pollution data tied to specific communities. The monitor inventory endpoint identifies which neighborhoods have - and which lack - monitoring infrastructure, a key data point in coverage of monitoring gaps.


πŸ”Œ Automating EPA AQS Scraper

Connect this Actor to your existing stack without writing code:

  • Make (Integromat) - schedule a weekly run and push results to Google Sheets or Airtable automatically.
  • Zapier - trigger on Actor completion and forward new records to Slack, Notion, or a database.
  • Apify Scheduler - run daily on a cron schedule to maintain a rolling air quality dataset.
  • Apify API - call the Actor programmatically from Python, Node.js, or any HTTP client and retrieve results as JSON.
  • Webhooks - send a POST notification to your server the moment each run completes.

🌟 Beyond business use cases

Academic research

Climate scientists and atmospheric chemists use AQS data to validate dispersion models, analyze long-term concentration trends, and calibrate low-cost sensor networks against federal reference monitors.

Citizen science and advocacy

Community air quality groups use monitor inventory data to identify monitoring deserts - areas with no nearby EPA stations - and build cases for new monitors in underserved neighborhoods.

Educational projects

Data journalism students and GIS courses use this Actor to build choropleth maps, time-series charts, and exposure analyses without navigating the raw EPA API or decoding FIPS schemas.

Open data and journalism tools

Open-data journalists and data aggregators use the Actor to keep local environmental dashboards current, pairing it with census data to show per-capita exposure by income bracket or demographic group.


πŸ€– Ask an AI assistant about this scraper

You can ask your AI assistant questions like:

  • "What fields does the EPA AQS daily summary endpoint return?"
  • "How do I get hourly ozone readings for a specific monitoring site?"
  • "What is the difference between dailyDataByCounty and sampleDataBySite?"
  • "Show me how to use the Apify API to run the EPA AQS scraper and retrieve results."
  • "What FIPS code does Los Angeles County use?"

This Actor is designed for straightforward integration. The output schema is consistent and well-documented above.


❓ Frequently Asked Questions

❓ Do I need an EPA account to use this Actor?

No. The Actor ships with shared demo credentials that work immediately. For production use or higher data volumes, register a free account at aqs.epa.gov/data/api/signup.

❓ What is the maximum date range per query?

The EPA AQS API accepts a maximum of one calendar year per query. For multi-year datasets, run the Actor once per year and combine the outputs.

❓ Why are some fields null in certain records?

Some fields are endpoint-specific. time, datetimeLocal, and datetimeGmt are only populated for hourly sample data. openDate, closeDate, monitoringAgency, and monitorType are only populated for the monitor inventory endpoint. aqi, observationCount, and pollutantStandard are only populated for daily summaries.

❓ What pollutant codes are supported?

The Actor supports 11 parameter codes: PM2.5 FRM (88101), PM2.5 non-FRM (88502), PM10 (81102), CO (42101), SO2 (42401), NO2 (42602), O3 (44201), Lead (14129), Reactive NOx (42600), Wind (WIND), and Temperature (TEMP).

❓ How do I find the FIPS code for my county?

FIPS codes are standardized federal identifiers. The state FIPS is the two-digit code (06 = California, 48 = Texas). County FIPS is three digits (037 = Los Angeles County). You can look them up at the U.S. Census Bureau or use the stateCode dropdown which lists all 51 jurisdictions.

❓ How do I find a specific site number?

Use the monitorsByState endpoint first to get a list of all monitoring sites in your target state. The siteNumber field in those records can then be used as input for the sampleDataBySite endpoint.

❓ What is the AQI field?

The Air Quality Index is the EPA's standardized 0-500 scale for communicating pollution levels to the public. It is calculated from the concentration and varies by pollutant. It is only available in the daily summary endpoint.

❓ What does POC mean?

Parameter Occurrence Code distinguishes multiple monitors measuring the same pollutant at the same site. POC 1 is usually the primary monitor. Most use cases can filter to POC 1.

❓ Can I get data for all counties in a state at once?

The EPA AQS API requires county-level filtering for daily summaries. To collect all counties in a state, run the Actor once per county or use the monitorsByState endpoint to first identify which counties have monitoring stations for your parameter.

❓ How current is the data?

The EPA AQS database is updated continuously as state and local agencies submit data. Recent data (last 60-90 days) may be preliminary. Finalized data is typically available within 90 days of the measurement date.

❓ Is the data free?

Yes. The EPA AQS is a public federal database. Access is free with registration. This Actor charges only for the compute and data transfer on Apify's platform.

❓ What does CBSA mean?

Core Based Statistical Area - the U.S. Census Bureau's classification for metropolitan and micropolitan statistical areas. The cbsaCode and cbsaName fields identify the broader urban region a monitoring site belongs to.


πŸ”Œ Integrate with any app

Export your dataset and connect it to the tools you already use:

  • Google Sheets - paste the JSON/CSV link into the IMPORTDATA formula
  • Power BI / Tableau - connect via the Apify dataset REST endpoint
  • Python pandas - pd.read_json("https://api.apify.com/v2/datasets/{id}/items")
  • R / tidyverse - jsonlite::fromJSON(url) or use httr
  • PostgreSQL / MySQL - load the CSV export with COPY or LOAD DATA
  • Zapier - trigger on Actor finish, push rows to Google Sheets, Airtable, or Slack
  • Make (Integromat) - schedule runs and route records to any connected app
  • Apify API - /v2/acts/parseforge~epa-aqs-air-quality-scraper/runs with POST

ActorDescription
OurAirports Global Airport Database ScraperExport 85,000+ airports, heliports, and airfields worldwide with ICAO, IATA, GPS coordinates, and service status
FAA Aircraft Registry ScraperFull FAA N-number aircraft registry with ownership, type, status, and airworthiness data
FINRA BrokerCheck ScraperExport FINRA-registered broker and firm records including disclosures, licenses, and employment history

πŸ’‘ Pro Tip: browse the complete ParseForge collection to find scrapers for government databases, financial data, and public records that pair well with environmental datasets.

Need help or found a bug? Open an issue on the Apify Community Forum.


Disclaimer: This Actor retrieves publicly available data from the U.S. EPA Air Quality System API. All data is sourced directly from the EPA and is subject to the EPA's terms of use. ParseForge is not affiliated with the U.S. Environmental Protection Agency. Measurement values, especially recent data, may be preliminary and subject to revision by the EPA.