kvlak limn

Environment · EPA AirData · Annual AQI by County

Days of Bad Air

Every monitored county in America gets a daily air-quality reading. Stack a year of them and a hard map appears: a handful of western counties choke on more than a hundred unhealthy days, while most of the country now breathes clean almost all year. This is where the bad air still is, what is in it, and how far it has fallen.

~1,000 monitored counties covering 1980-2024 Illustrative
147days worst county: Riverside, CA
4,016 bad-air days logged nationwide, 2024
996 counties with an EPA monitor
74% fewer bad-air days per county since 1990

The atlas of bad air

Mean bad-air days / county · 2024

Shade every state by how many unhealthy days its typical monitored county logged, and the country splits in two. The West and the desert Southwest carry nearly all the weight; a wide band of the interior and the eastern seaboard barely registers. Air quality in America is not a national condition - it is a regional one.

Alabama: 2.1 bad-air days/county (PM2.5)Alaska: 2.7 bad-air days/county (PM2.5)Arizona: 13.1 bad-air days/county (Ozone)Colorado: 5.6 bad-air days/county (Ozone)Florida: 1.5 bad-air days/county (Ozone)Georgia: 3 bad-air days/county (Ozone)Indiana: 2.6 bad-air days/county (Ozone)Kansas: 1.8 bad-air days/county (Ozone)Maine: 1 bad-air days/county (Ozone)Massachusetts: 1.5 bad-air days/county (Ozone)Minnesota: 1.7 bad-air days/county (PM2.5)New Jersey: 2.7 bad-air days/county (Ozone)North Carolina: 2.2 bad-air days/county (Ozone)North Dakota: 1.3 bad-air days/county (PM2.5)Oklahoma: 2.5 bad-air days/county (Ozone)Pennsylvania: 3.3 bad-air days/county (Ozone)South Dakota: 1.3 bad-air days/county (PM2.5)Texas: 4.9 bad-air days/county (Ozone)Wyoming: 3.5 bad-air days/county (Ozone)Connecticut: 2.8 bad-air days/county (Ozone)Missouri: 2.6 bad-air days/county (Ozone)West Virginia: 2 bad-air days/county (PM2.5)Illinois: 2.9 bad-air days/county (Ozone)New Mexico: 5.1 bad-air days/county (Ozone)Arkansas: 2 bad-air days/county (Ozone)California: 22.4 bad-air days/county (Ozone)Delaware: 1.1 bad-air days/county (Ozone)District of Columbia: 3 bad-air days/county (Ozone)Hawaii: 1.4 bad-air days/county (PM2.5)Iowa: 1.7 bad-air days/county (PM2.5)Kentucky: 2.3 bad-air days/county (Ozone)Maryland: 2.9 bad-air days/county (Ozone)Michigan: 2.5 bad-air days/county (Ozone)Mississippi: 1.8 bad-air days/county (Ozone)Montana: 3.8 bad-air days/county (PM2.5)New Hampshire: 1.2 bad-air days/county (Ozone)New York: 2.4 bad-air days/county (Ozone)Ohio: 3.1 bad-air days/county (Ozone)Oregon: 4.6 bad-air days/county (PM2.5)Tennessee: 2.3 bad-air days/county (Ozone)Utah: 8.4 bad-air days/county (Ozone)Virginia: 2.2 bad-air days/county (Ozone)Washington: 4 bad-air days/county (PM2.5)Wisconsin: 1.9 bad-air days/county (Ozone)Nebraska: 1.4 bad-air days/county (PM2.5)South Carolina: 2.1 bad-air days/county (Ozone)Idaho: 6 bad-air days/county (PM2.5)Nevada: 6.2 bad-air days/county (Ozone)Vermont: 0.8 bad-air days/county (Ozone)Louisiana: 1.9 bad-air days/county (Ozone)Rhode Island: 1.2 bad-air days/county (Ozone)
Bad-air days / county
  • under 2
  • 2 - 4
  • 4 - 6
  • 6 - 10
  • 10 or more
  • no monitor

Fill = the state's mean bad-air days across its monitored counties, on a single-hue teal density ramp. Grey states have no reporting monitor - that is a data gap, not clean air. Hover a state for its figure; the table below is the source of truth.

The 8 worst states in a table (the map's source of truth)
StateBad-air days / countyCountiesTop pollutant
California 22.4 52 Ozone
Arizona 13.1 13 Ozone
Utah 8.4 17 Ozone
Nevada 6.2 12 Ozone
Idaho 6 22 PM2.5
Colorado 5.6 24 Ozone
New Mexico 5.1 15 Ozone
Texas 4.9 45 Ozone

The worst-hit counties

Bad-air days · 2024

One row per county, ranked by days over an AQI of 100. Southern California and its inland valleys own the top of the board outright - eight of the worst ten counties sit downwind of Los Angeles, where sun, traffic, and mountains trap the smog. The bar is the count; the tag is the pollutant that drove the most of those days.

  1. 01 Riverside CA 147 Ozone med 87
  2. 02 San Bernardino CA 144 Ozone med 87
  3. 03 Los Angeles CA 133 Ozone med 80
  4. 04 Tulare CA 111 Ozone med 71
  5. 05 Kern CA 94 Ozone med 72
  6. 06 Fresno CA 79 Ozone med 67
  7. 07 Maricopa AZ 73 Ozone med 77
  8. 08 Pinal AZ 70 Ozone med 77
  9. 09 El Paso TX 63 Ozone med 67
  10. 10 Cameron TX 61 PM2.5 med 61
  11. 11 San Diego CA 52 Ozone med 71
  12. 12 Imperial CA 50 Ozone med 63
  13. 13 Boise ID 49 PM2.5 med 48
  14. 14 Harris TX 47 PM2.5 med 61
  15. 15 Salt Lake UT 43 Ozone med 54

Bar length = bad-air days on a shared scale (max 147, Riverside). The tag names the pollutant behind the most of those days and is always text-labeled, so colour is never the sole signal. med = the county's median AQI across the year.

Two kinds of bad air

Chronic vs acute · 16 counties

Not every bad-air county is bad the same way. Read left-to-right for the everyday load - the median day's AQI. Read bottom-to-top for how often the air turns unhealthy. And the bigger the bubble, the worse that county's single peak day. Riverside sits high and right: bad most days. A clean county with one giant bubble was simply caught under wildfire smoke once.

0 40 80 120 160 30405060708090 median AQI (everyday load) → bad-air days → San Bernardino, CA: 144 bad-air days, median AQI 87, peak 593 (Ozone) El Paso, TX: 63 bad-air days, median AQI 67, peak 431 (Ozone) Maricopa, AZ: 73 bad-air days, median AQI 77, peak 261 (Ozone) Los Angeles, CA: 133 bad-air days, median AQI 80, peak 230 (Ozone) Salt Lake, UT: 43 bad-air days, median AQI 54, peak 230 (Ozone) Riverside, CA: 147 bad-air days, median AQI 87, peak 213 (Ozone) Harris, TX: 47 bad-air days, median AQI 61, peak 201 (PM2.5) Denver, CO: 24 bad-air days, median AQI 48, peak 165 (Ozone) Cook, IL: 21 bad-air days, median AQI 47, peak 158 (Ozone) King, WA: 8 bad-air days, median AQI 35, peak 158 (PM2.5) San Francisco, CA: 6 bad-air days, median AQI 34, peak 152 (PM2.5) District of Columbia, DC: 10 bad-air days, median AQI 45, peak 141 (Ozone) Fulton, GA: 12 bad-air days, median AQI 44, peak 132 (Ozone) Suffolk, MA: 4 bad-air days, median AQI 39, peak 118 (Ozone) Baldwin, AL: 0 bad-air days, median AQI 40, peak 90 (PM2.5) Clay, AL: 0 bad-air days, median AQI 29, peak 75 (PM2.5) San BernardinoRiversideHarrisSan FranciscoBaldwin
Ozone-ledPM2.5-led bubble = peak AQI

Each bubble is one county; area scales with its worst single day (peak AQI 75-593). Colour marks the dominant pollutant and is always text-labeled. Values below.

The 16 counties in a table (the chart's source of truth)
CountyMedian AQIBad-air daysPeak AQITop pollutant
Riverside, CA 87 147 213 Ozone
San Bernardino, CA 87 144 593 Ozone
Los Angeles, CA 80 133 230 Ozone
Maricopa, AZ 77 73 261 Ozone
El Paso, TX 67 63 431 Ozone
Harris, TX 61 47 201 PM2.5
Salt Lake, UT 54 43 230 Ozone
Denver, CO 48 24 165 Ozone
Cook, IL 47 21 158 Ozone
Fulton, GA 44 12 132 Ozone
District of Columbia, DC 45 10 141 Ozone
King, WA 35 8 158 PM2.5
San Francisco, CA 34 6 152 PM2.5
Suffolk, MA 39 4 118 Ozone
Baldwin, AL 40 0 90 PM2.5
Clay, AL 29 0 75 PM2.5

The long cleanup

Mean bad-air days / county · 1990-2024

Here is the story the atlas hides. The typical monitored county went from about 15.1 bad-air days a year in 1990 to roughly 4 in 2024 - a 74% fall, even as the monitoring network nearly doubled. Cleaner fuels, catalytic converters, and a wave of coal-plant retirements read here as one long slide down. The curve is flattening now: the easy wins are spent.

0 4 8 12 16 19901995200020052010201520202024 1990: 15.1 bad-air days/county (834 counties)1995: 14.2 bad-air days/county (980 counties)2000: 15.3 bad-air days/county (1104 counties)2005: 10.4 bad-air days/county (1150 counties)2010: 6.4 bad-air days/county (1076 counties)2015: 5.1 bad-air days/county (1040 counties)2020: 4.6 bad-air days/county (1010 counties)2024: 4 bad-air days/county (996 counties) 15.1 4

One marker per reporting year; the wash beneath the line is decoration, not a second series. Y axis = mean bad-air days across every monitored county that year. 834 counties reported in 1990; 996 in 2024.

An uneven recovery

Bad-air days / county by region · 1990-2024

The national line falls, but the cleanup was not shared equally. The Northeast and the industrial Midwest nearly solved their bad air; the desert Southwest and Mountain West flattened out; and the West Coast barely moved, held up by a fire season that keeps rewriting the gains. Same scale on every panel - the dashed line is the 2024 national average.

West Coast Ozone
24 11

Sun cooks tailpipe and industrial exhaust into summer ozone; wildfire smoke drives the particle spikes. The one region where bad air barely fell.

Southwest Ozone
15 9

Fierce sun and windblown desert dust split the bad days between ozone and coarse particles almost evenly.

Mountain West PM2.5
12 8

Winter inversions cap valley bowls, trapping woodsmoke and dust close to the ground, so fine particles lead the bad days.

Industrial Midwest Ozone
18 3

Coal retirements and scrubbers gutted the old smog: power plants and highway corridors still push a milder summer ozone.

Gulf & Southeast Ozone
11 3

Petrochemical plants and busy ports keep ozone first, with coastal PM2.5 a close and rising second.

Northeast Corridor Ozone
21 2

The seaboard's cleanup is the sharpest on the map. Ozone blown up the I-95 spine is nearly all that remains.

Small multiples on one shared vertical scale (0-26 days), so a taller line means dirtier air. The dashed line marks the 4-day national average for 2024; a region riding above it is still doing worse than the country as a whole.

What's in the bad air

Share of bad days by driver · 2024

A bad-air day is credited to whichever pollutant pushed the index highest. Two culprits do almost all the damage: summertime ozone (50.6%) and fine-particle PM2.5. Add coarse PM10 and particle pollution accounts for 48% of bad days; every other regulated pollutant, together, barely clears one percent.

Ozone: 50.6% of bad days Ozone 50.6% PM2.5: 45.3% of bad days PM2.5 45.3% PM10: 3% of bad days Other: 1.1% of bad days
Ozone 50.6%PM2.5 45.3%PM10 3%Other 1.1%

One 100%-wide bar; segment width = that pollutant's share of the nation's bad-air days, with a 2px gap between slots. Other folds the two trace gases: NO2 0.9% and CO 0.2%. Colour is always paired with a text label.

The driver flips by region

Ozone needs sun and traffic; particles come from fire, woodsmoke, and winter inversions. So which pollutant leads is really a map of geography and season - the same bad-air day means something different in a Los Angeles July and a Salt Lake January.

West Coast Ozone

Sun cooks tailpipe and industrial exhaust into summer ozone; wildfire smoke drives the particle spikes. The one region where bad air barely fell.

Mountain West PM2.5

Winter inversions cap valley bowls, trapping woodsmoke and dust close to the ground, so fine particles lead the bad days.

Southwest Ozone

Fierce sun and windblown desert dust split the bad days between ozone and coarse particles almost evenly.

Industrial Midwest Ozone

Coal retirements and scrubbers gutted the old smog: power plants and highway corridors still push a milder summer ozone.

Northeast Corridor Ozone

The seaboard's cleanup is the sharpest on the map. Ozone blown up the I-95 spine is nearly all that remains.

Gulf & Southeast Ozone

Petrochemical plants and busy ports keep ozone first, with coastal PM2.5 a close and rising second.

A year on the dial

Los Angeles County, California · 2024

Abstract counts become a calendar you can feel. Each arc is a run of days from Los Angeles County's 366 monitored days in 2024, coloured by the EPA's six official air-quality bands. Most of the ring is green and yellow - but 133 days crossed into unhealthy territory, and that slice is what this whole page is counting.

Good (AQI 0-50): 70 days, 19% Moderate (AQI 51-100): 163 days, 45% Unhealthy for Sensitive Groups (AQI 101-150): 108 days, 30% Unhealthy (AQI 151-200): 22 days, 6% Very Unhealthy (AQI 201-300): 3 days, 1% 133 bad-air days of 366
  • Good AQI 0-50 70 d
  • Moderate AQI 51-100 163 d
  • Unhealthy for Sensitive Groups AQI 101-150 108 d
  • Unhealthy AQI 151-200 22 d
  • Very Unhealthy AQI 201-300 3 d
  • Hazardous AQI 301+ 0 d

Each ring segment is proportional to that band's share of the year; the six colours are the EPA's canonical AQI scale, and every band carries its AQI range and day count in the key. The Los Angeles 2024 split is an illustrative stand-in, summing to the county's real bad-day total.

The long tail

Monitored counties by bad-air days · 2024

Line up all 996 monitored counties by how many unhealthy days they logged and the inequality is stark. The median county had just 2 bad-air days all year. Nearly six hundred had two or fewer. The burden lives in the thin tail on the right - the 68 counties with more than twenty bad days that the headlines are really about.

0 100 200 300 300 counties had 0 bad-air days 300 0 286 counties had 1-2 bad-air days 286 1-2 168 counties had 3-5 bad-air days 168 3-5 108 counties had 6-10 bad-air days 108 6-10 66 counties had 11-20 bad-air days 66 11-20 34 counties had 21-40 bad-air days 34 21-40 20 counties had 41-70 bad-air days 20 41-70 10 counties had 71-100 bad-air days 10 71-100 4 counties had 100+ bad-air days 4 100+ bad-air days in the year → median county

Each column counts the monitored counties whose 2024 bad-air-day total fell in that range; every count is labeled so the short tail stays readable. Columns deepen with severity on the same teal ramp as the atlas. Buckets are illustrative stand-ins shaped to the real 2024 distribution.

Methodology

Notes on the Data

The figures on this page derive from EPA AirData - Annual AQI by County (2024 reporting year (file dated 2025-12-04)). EPA compiles a daily Air Quality Index for each monitored county from its criteria-pollutant network, then publishes one annual "AQI by County" row per county: how many days landed in each AQI band, the year's peak and median AQI, and how many days each pollutant was the one driving the index. A bad-air day on this page is any day with an AQI of 101 or higher - the point where the air is officially unhealthy for sensitive groups or worse.

What's real, what's a stand-in

Everything here is badged Illustrative. The numbers are hand-authored stand-ins shaped to real 2024 EPA values: the worst-county counts, the national pollutant shares, and the long downward trend are drawn from the actual annual files, while others are curator estimates - the state means behind the atlas, the per-county Good-day shares, the regional pollutant splits and their year-by-year recovery lines, the county-count distribution, and the Los Angeles dial. None has yet been machine-ingested through this site's pipeline. The swap-point is documented and exact: src/lib/source.ts already declares the real 18-column schema, and dropping the EPA zip into data/raw/ regenerates this same JSON - leaderboard, atlas, trend, scatter, histogram and all - as Full. We never present curated numbers as real.

What you're not seeing

AirData only covers counties with an EPA monitor - roughly a thousand of the country's ~3,200 counties. A blank county on the atlas means "no monitor," not "clean air." The AQI also credits each day to a single dominant pollutant, so a smoky day that was also ozone-heavy counts once. And a county's daily index reflects its worst monitor, not an average resident's exposure - people near a freeway or a fire breathe worse than the county line suggests.


Generated 2026-07-06 00:00 UTC. Source: EPA AirData - Annual AQI by County.