ParseForge Scrapers

EPA AQS Air Quality Scraper

parseforge/epa-aqs-air-quality-scraper

Developer toolsAutomationOther

Scrapes EPA Air Quality System data by pollutant, state, county, or site. Returns daily summaries, hourly samples, or active monitor lists as flat rows for CSV, JSON, Excel, or XML export.

Run this scraper See the API call
Total users
1
Monthly active
0
Total runs
102
Bookmarked
0
Rating
Not rated yet
Last modified
9 days ago

Overview

ParseForge

EPA AQS Air Quality Scraper

Scrape EPA air quality data for any pollutant, state, or county, up to a million records per run. Get daily summaries, hourly samples, or active monitor lists with parameter codes, dates, and site details. Export to CSV, JSON, Excel, or XML.

The EPA's Air Quality System holds decades of ambient monitoring data, but its API requires registration, parameter codes, and FIPS geography codes. This Actor queries the public data service directly, letting you pick a dataset, pollutant, and location, then returns every matching record in a flat, analysis-ready schema. No manual API calls or code wrangling needed.

Who uses it What they scrape EPA Air Quality System for
Environmental researchers Pull daily PM2.5 or ozone readings for a county over a year to study pollution trends.
Public health analysts Export hourly SO2 or NO2 samples near industrial sites for exposure assessments.
Data journalists Gather active monitor locations by state to map air quality monitoring coverage gaps.
Climate tech developers Feed historical CO or lead data into models that predict urban air quality.

What it does

This Actor collects EPA AQS air quality records by dataset, pollutant parameter, and geographic filters, and returns each record as a flat row.

  • πŸ“Š Three dataset endpoints: daily summaries by county, hourly samples by site, or active monitors by state.
  • 🌫️ Eleven pollutant parameters: PM2.5, PM10, CO, SO2, NO2, O3, lead, reactive nitrogen oxides, wind, and temperature.
  • πŸ—ΊοΈ Geographic filters: narrow results to a single state FIPS code, county FIPS code, or monitor site number.
  • πŸ“… Date range control: set a start and end date in YYYYMMDD format, with a one-year maximum window per query.
  • πŸ”‘ Optional personal credentials: use the shared demo account or supply your own free EPA registration for higher quotas.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with EPA Air Quality System data

πŸ“ˆ Track daily PM2.5 trends by county.

A researcher selects the daily summary dataset, PM2.5 parameter, and a California county to chart a year of fine particulate matter levels for a health study.

🏭 Audit hourly pollution near industrial sites.

A public health analyst pulls hourly SO2 samples from a monitor site near a refinery to check for exceedances during a specific month.

πŸ—ΊοΈ Map active air monitors across a state.

A journalist fetches the active monitors list for Texas to visualize which communities have ozone monitoring and which do not.

πŸ“Š Build a historical air quality database.

A climate tech startup exports a decade of daily CO and NO2 data for multiple states to train a predictive air quality model.

Why choose this scraper

What you get
No API coding The Actor handles EPA parameter codes, FIPS codes, and date formatting for you.
Flat, consistent schema Every record arrives with the same columns, ready for analysis or a database.
Up to 1M records Paid users can pull large historical datasets in a single run.
Free demo access Start with the shared EPA account; switch to your own for higher rate limits.

How it compares

No other Store actor targets EPA Air Quality System the same way, so the honest comparison is with the alternatives teams actually weigh.

EPA AQS Air Quality Scraper Build it in-house By hand
Setup Run it now, zero config Days of engineering None, but hours per pull
When EPA Air Quality System changes Maintained for you You fix it You re-learn the page
Proxies, retries, anti-bot Built in Your problem Browser only
Output Fixed JSON schema, CSV/Excel export Whatever you build Copy-paste
Cost Pay per result Engineering time Analyst hours

Configure the run

Drive the Actor from a dataset endpoint, pollutant parameter, and geographic codes, and filters run as each record is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

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

A larger pull:

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

Pricing

Pay-per-result: $0.021 per result collected. You pay only for the results written to your dataset.

Results collected Approximate cost
100 results $2.10
1,000 results $21.00
10,000 results $210.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the EPA AQS Air Quality Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to EPA Air Quality System through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/epa-aqs-air-quality-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting no results?

Check that your state code, county code, and date range are valid for the selected dataset. The EPA API returns empty datasets when no monitoring occurred for that pollutant in that location and time window. Try a wider date range or a different pollutant.

I get an error about an invalid parameter code.

Use the dropdown in the Actor input to select a valid EPA parameter code. Manually typed codes may not match the AQS service. The dropdown lists all supported pollutants with their correct codes.

The run stops early with fewer records than my maxItems setting.

The EPA API may return fewer records than requested if the date range or geographic area has limited monitoring data. This is normal. Try expanding your date range or selecting a different location.

I hit a rate limit or quota error.

The shared demo account has limited quotas. Register for a free personal account on the EPA AQS data mart, then supply your own email and access key in the Actor's Credentials section for higher limits.

FAQ

Question Answer
What is the EPA AQS data service? It is the U.S. Environmental Protection Agency's Air Quality System, a repository of ambient air pollution measurements from thousands of monitoring sites across the country.
Do I need an EPA account to use this Actor? No. The Actor includes a shared demo account and access key. For higher request quotas, you can register for a free personal account on the EPA AQS data mart website and supply your own email and key.
Which pollutants can I scrape? You can select from PM2.5, PM10, carbon monoxide, sulfur dioxide, nitrogen dioxide, ozone, lead, reactive oxides of nitrogen, wind, and temperature using their EPA parameter codes.
How do I find the right FIPS code for my state or county? The Actor provides a dropdown of state FIPS codes with names. County codes are three-digit numbers you can look up on the EPA AQS site or the U.S. Census Bureau's FIPS code reference.
What is the maximum date range I can query? The EPA AQS API limits each request to a one-year window. Set your start and end dates in YYYYMMDD format, keeping them within 365 days of each other.
How many records can I get in one run? Free users are limited to 10 records for preview. Paid Apify users can set a maximum up to 1,000,000 records per run.
What format does the output data come in? The Actor returns a flat dataset you can export to CSV, JSON, Excel, or XML from the Apify platform.
Can I get hourly air quality measurements? Yes. Select the 'Hourly Samples by Site' endpoint and provide a site number to retrieve hourly concentration readings for your chosen pollutant.
Does this Actor work for locations outside the United States? No. The EPA AQS data service covers only U.S. states, territories, and tribal lands.

Related actors

Browse the full ParseForge collection for more scrapers.

πŸ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by U.S. Environmental Protection Agency. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

Input

FieldTypeWhat it doesDefault
maxItems integer Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000 10
endpoint string (3 options) Which EPA AQS dataset to export. dailyDataByCounty
parameter string (11 options) EPA parameter code for the pollutant. 88101
stateCode string (51 options) Two-digit state FIPS code. Required for monitorsByState and dailyDataByCounty. 06
countyCode string Three-digit county FIPS code (required for dailyDataByCounty). Example: '037' for Los Angeles County, CA. 037
siteNumber string Four-digit monitor site number (required for sampleDataBySite). 0080
startDate string Start date in YYYYMMDD format. 20240101
endDate string End date in YYYYMMDD format. Max one year per query. 20240131
email string Optional. Defaults to the shared demo account. For higher quotas, register a free account at the EPA AQS data service and supply your own email + access key. not set
accessKey string Optional. Defaults to the shared demo key. Personal access key issued by the EPA AQS data service when you registered. not set

Pricing

from $19.00 per 1,000 results

Charged forWhat it isPrice each
result Single result in the default dataset. $0.019 to $0.021

Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.

API

One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.

POST Β· run and get results
curl -X POST "https://api.apify.com/v2/acts/parseforge~epa-aqs-air-quality-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "helloWorld": 123
  }'

Examples

Input that runs as-is.

input.json
{
  "helloWorld": 123
}

Reviews

No reviews yet. Be the first.

Issues

We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.

Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.

Related scrapers

Run EPA AQS Air Quality Scraper on Apify All scrapers