Files

6.1 KiB

EPA AQS Data Directory

This directory contains air quality data fetched from the EPA Air Quality System (AQS).

Data Files

Data files are named using the pattern:

aqs_YYYY_STATE1-STATE2_TIMESTAMP.json

Example:

aqs_2023_CA-NY-TX_2025-10-27.json

File Structure

Each data file contains:

{
  "metadata": {
    "source": "EPA Air Quality System (AQS)",
    "dataSourceId": "DS-00008",
    "fetchedAt": "ISO 8601 timestamp",
    "parameters": ["88101", "44201"],
    "states": ["CA", "NY"],
    "year": 2023
  },
  "dailyData": [
    {
      "state_code": "06",
      "county_code": "037",
      "site_num": "1103",
      "parameter_code": "88101",
      "poc": 3,
      "latitude": 34.06653,
      "longitude": -118.22676,
      "datum": "WGS84",
      "parameter_name": "PM2.5 - Local Conditions",
      "sample_duration": "24 HOUR",
      "pollutant_standard": "PM25 24-hour 2012",
      "date_local": "2023-01-01",
      "units_of_measure": "Micrograms/cubic meter (LC)",
      "event_type": "None",
      "observation_count": 1,
      "observation_percent": 100.0,
      "arithmetic_mean": 12.3,
      "first_max_value": 12.3,
      "first_max_hour": 0,
      "aqi": 51,
      "method_code": "170",
      "method_name": "BAM-1020",
      "local_site_name": "Los Angeles-North Main Street",
      "address": "1630 N. Main Street",
      "state": "California",
      "county": "Los Angeles",
      "city": "Los Angeles",
      "cbsa_name": "Los Angeles-Long Beach-Anaheim, CA"
    }
  ],
  "monitorMetadata": [
    {
      "state_code": "06",
      "county_code": "037",
      "site_number": "1103",
      "parameter_code": "88101",
      "poc": 3,
      "latitude": 34.06653,
      "longitude": -118.22676,
      "datum": "WGS84",
      "first_year_of_data": 2000,
      "last_sample_date": "2023-12-31",
      "monitor_type": "State/Local",
      "reporting_agency": "California Air Resources Board",
      "method_code": "170",
      "method_name": "BAM-1020",
      "measurement_scale": "NEIGHBORHOOD",
      "objective": "POPULATION EXPOSURE"
    }
  ],
  "summary": {
    "totalRecords": 12450,
    "stateCount": 2,
    "parameterCount": 2,
    "dateRange": {
      "start": "2023-01-01",
      "end": "2023-12-31"
    }
  }
}

Parameter Codes

Code Parameter Health Impact
88101 PM2.5 MOST CRITICAL — Fine particulate matter linked to mortality, cardiovascular disease, respiratory disease, cognitive decline
44201 Ozone (O3) Respiratory irritant, smog precursor, asthma exacerbation
42401 Sulfur Dioxide (SO2) Respiratory irritant
42101 Carbon Monoxide (CO) Cardiovascular stress
42602 Nitrogen Dioxide (NO2) Respiratory irritant, precursor to ozone/PM
81102 PM10 Coarse particulate matter, respiratory health

Air Quality Index (AQI) Interpretation

AQI Range Category Health Implications
0-50 Good Air quality satisfactory, little or no health risk
51-100 Moderate Acceptable; unusually sensitive people may experience respiratory symptoms
101-150 Unhealthy for Sensitive Groups Sensitive groups (children, elderly, respiratory/cardiovascular conditions) may experience health effects
151-200 Unhealthy Everyone may begin to experience health effects; sensitive groups more serious effects
201-300 Very Unhealthy Health alert — everyone may experience serious health effects
301+ Hazardous Health warning — emergency conditions; entire population likely affected

Environmental Health Context

Air quality is a structural determinant of wellbeing.

  • PM2.5 reduces life expectancy by months to years in polluted areas (Air Quality Life Index estimates 1.8 years lost globally)
  • Environmental injustice: Low-income communities and communities of color disproportionately exposed to air pollution
  • Involuntary exposure: You breathe ~20,000 times per day — cannot "self-care" your way out of toxic air
  • ZIP code determines exposure: Structural constraint on wellbeing (requires resources to relocate)

Data Quality Notes

  • Validation lag: 6-12 months from collection to finalized data in AQS
  • Spatial coverage: Urban bias — rural areas undermonitored
  • Environmental justice monitoring gap: Low-income communities historically undermonitored
  • FRM/FEM methods: Federal Reference/Equivalent Methods — regulatory-grade quality
  • Missing data: Instrument downtime, maintenance typically results in <10% missing data per site-year

Usage Examples

Calculate annual average PM2.5 by county

const data = await Bun.file('aqs_2023_CA_2025-10-27.json').json();
const pm25Data = data.dailyData.filter(d => d.parameter_code === '88101');

const byCounty = new Map();
for (const record of pm25Data) {
  const key = `${record.state}_${record.county}`;
  if (!byCounty.has(key)) {
    byCounty.set(key, []);
  }
  byCounty.get(key).push(record.arithmetic_mean);
}

for (const [county, values] of byCounty.entries()) {
  const avg = values.reduce((a, b) => a + b, 0) / values.length;
  console.log(`${county}: ${avg.toFixed(2)} µg/m³`);
}

Identify environmental justice hotspots (high PM2.5 areas)

const highPM25Sites = pm25Data
  .filter(d => d.arithmetic_mean > 12.0) // EPA annual standard: 12.0 µg/m³
  .map(d => ({
    site: d.local_site_name,
    city: d.city,
    county: d.county,
    latitude: d.latitude,
    longitude: d.longitude,
    pm25: d.arithmetic_mean,
  }));

// Cross-reference with Census demographic data for environmental justice analysis
  • DS-00001 — WHO Global Health Observatory (global air pollution mortality)
  • DS-00005 — CDC WONDER Mortality (air pollution-attributable deaths)
  • DS-00006 — Census ACS Social Wellbeing (demographic data for environmental justice analysis)

References