Thirty on the app. Sky the color of a blood orange, smoke thick enough to taste. A Seattle resident asked exactly that, in a thread that pulled 734 upvotes: how is this 30 AQI? By the end of the thread, residents had worked out every real answer between them. None of those answers was “the number is fake.”
This page collects the answers in one place. It explains where our number comes from, and names the five reasons a reading can split from what you’re seeing and smelling. The reverse case gets equal time — clear sky, bad number. And it states plainly what we do when our own pipeline goes down. Every city page on this site links here under the line “how we measure, and why this can disagree with your senses.” This is that answer, not a disclaimer bolted onto one.
Where the number on this page actually comes from
Four sources feed this site. Each is good at a different part of the job.
EPA AirNow supplies the official US AQI. It’s calculated from certified government monitors and published per station, not per city — a distinction the next section explains.
Open-Meteo supplies pollutant concentrations, the UV index, and pollen. But only European pollen. It doesn’t cover US pollen at all, so until a paid US pollen provider is under contract, a pollen module on this site will say so instead of faking a number.
OpenAQ aggregates official reference-grade monitoring data into one open API — much of it drawn from the same government feeds AirNow uses. It’s useful for cross-checking a reading, not as a standalone source.
PurpleAir runs the opposite model: thousands of privately owned, low-cost sensors. They’re dense enough to fill the gaps between government stations that sit miles apart. That density is real. It’s also where PurpleAir’s own weaknesses live — the next section covers them.
None of the four is the single correct source on its own. Reconciling what each is good at, and where each is known to go wrong, is most of what this page actually is.
The five reasons our number can disagree with what you’re sensing
Five separate mechanisms can put a different number on your screen than the sky is showing. One Seattle thread caught all five, without setting out to.
AirNow’s 24-hour average dilutes a bad hour. One commenter, explaining a similar mismatch in Texas, put it plainly: the standard for PM2.5 is a 24-hour average — “not helpful for short duration spikes or sudden increases.” A genuinely bad hour gets stretched across 23 calmer ones. By the time it becomes today’s headline figure, it’s already diluted.
IQAir can lag, and it can borrow a neighboring station’s reading. A resident traced this directly during the Seattle smoke event: “IQAir sensor seems to be sourcing from Auburn that was green, while eastside was already 100+. There are some delays in the data coming through.” The nearest station an app pulls from may not be near you at all.
PurpleAir’s default map counts indoor sensors as outdoor air. Another commenter on the same thread caught it: “One problem with PurpleAir’s default map is it includes indoor sensors, such as the one northeast of Auburn. If you select the settings option, you can deselect indoor.” Fold one indoor reading into a neighborhood average, and that average drifts toward whatever that one room happens to be doing.
Ozone and particles get read on two different screens. A Texas resident asked “who is lying” between a weather app and airnow.gov. Two replies gave two separate mechanisms, not one: “each screenshot is looking at different parameters, one is looking at particulate and the other is ozone.” One monitor “could be a calibrated and certified EPA monitor”; the other “could be a citizen scientist monitor, like a Purple Air monitor.” Same place, same moment. Two pollutants, two instrument classes.
Smoke aloft is the fifth, and it’s the community’s own addition. In the Seattle thread, the top reply was two words: “Smoke aloft mostly.” Another resident named the exact sensory trap: “Usually when it stays aloft I don’t notice an aroma. I guess the odor molecules must be diffusing downward, but the particulate is not.” Smoke a few thousand feet up can smell strong and look worse than a ground-level monitor will ever register — that monitor sits well below it.
None of these five make either number fake. One reply on that same Texas thread put the wrong lesson into words, so we can push back on it directly: “whichever one makes you more fearful is the one that’s lying.” It usually isn’t. It’s usually one of these five.
Four sources, none of them correct on its own.
It also runs the other way: clear sky, bad number
Every mechanism above runs one direction — the instrument looks worse than your senses do. The reverse happens just as often, and it gets almost no attention.
Ground-level ozone is invisible and odorless. One Denver commenter put it bluntly on a thread about his own city’s ozone: spreading awareness is hard “because it’s mostly invisible and odorless.” Telling people they’re breathing a toxic invisible gas, he added, “is a sure way to kill the vibe. But it must be done.” A clear sky and a clean-smelling morning tell you nothing about ozone specifically.
Pollen isn’t in the AQI at all, in either direction. Across roughly a hundred community posts about pollen in our research, AQI didn’t come up once. Not because people don’t know the acronym — because pollen genuinely runs on a separate index, built from separate data. A good AQI reading says nothing about tree or grass pollen that day.
Valley Fever spores are the same story, and the stakes are higher. The fungus lives in topsoil across the Southwest. Wind and dust loft it into the air, independent of PM2.5 or ozone levels. AQI doesn’t measure it at any level. A calm, moderate AQI day during a dusty windstorm can still be a Valley Fever exposure day. A good number is not clearance to breathe deep if the wind is kicking up dust where you are.
The station-distance problem
A monitoring station miles from where you’re standing under-reports whichever side of the metro sits farthest from it. Government reference monitors are sparse by design — expensive to run, certified, and placed to represent a region, not a neighborhood. One Texas resident found their town sitting in what a commenter called “a dead zone between Dallas and Marshall.” Real distance, real consequence: a working reading a few dozen miles away has no way of knowing what’s happening in the gap.
That’s why every city page on this site is built to carry a station line: the named monitoring station behind that page’s number, its distance from the metro centroid, and the density of nearby PurpleAir sensors filling the space around it. Each row is meant to carry six fields: city, station name, distance in miles, nearby PurpleAir sensor count, update cadence, averaging window. That’s enough for you to reconcile our number against AirNow’s or IQAir’s, instead of guessing that one of us is wrong.
That table ships once station coverage is verified, city by city, not before. We’d rather publish two dozen cities with a checked, real distance on each than a longer list padded with distances nobody confirmed. If a station later turns out to be too far out to trust, that’s exactly what the corrections log below exists for.
Why we can show a 30-day history — and what it doesn’t include yet
We store our own measurements starting the day a city’s page goes live. That’s the entire reason a 30-day chart, and a “days above AQI 100” counter, can exist on this site at all. IQAir, AccuWeather and aqicn all keep history somewhere. aqicn puts it in a separate historical database. IQAir puts it behind its app. AccuWeather gives you the past hour. What none of them puts on the city page itself is that city’s own multi-week series, with a plain count of its days above 100.
The honest version of that advantage: history only runs as far back as our own collection does. A city added to the site this month shows a chart with a few days in it, not thirty. Its “days above 100 in the last 12 months” counter starts at whatever we’ve actually measured — not a backfilled estimate standing in for months we didn’t collect. We won’t render a partial month as a full year. A short chart on a newly added city is what real collection looks like in its first weeks. It isn’t a bug, and we won’t pad it to look complete before it is.
How we write the verdict
Two different scales sit behind every verdict on this site, and we label which is which every time. The EPA writes the AQI color bands and the language attached to them. It classifies 101–150 as Unhealthy for Sensitive Groups, 201–300 as Very Unhealthy, and so on. We quote that wording directly — see airnow.gov for the source itself. We don’t upgrade it into a verdict about your specific lungs. “EPA classifies X as Y” and “X is dangerous for you” are different claims. Only the first one is ours to make.
The second scale isn’t the EPA’s at all. It’s community-observed, and we say so every time we use it. Runners discussing their own thresholds online converge loosely around 110. Parents converge around 100 — roughly the point a park trip actually gets cancelled. One asthmatic runner logged 156 of their own runs against AQI and found their personal cutoff at 60. That’s close to a 1.8x spread across three ordinary people, breathing the exact same air, because no single number was ever built to describe three different bodies. During active wildfire smoke, several of the same posters independently drop their own threshold about one EPA band lower than usual. We fold both scales into the three-state verdict on a city page: go, short and unloaded, don’t go. We never present the community numbers as an official standard. They’re the closest thing to real-world calibration this vertical has, and they’re not ours to claim as medical fact.
A third layer sits below both, and it isn’t ours to set either: the thresholds institutions actually run on. We have three, and every one of them came from a person describing their own school or centre — not from a statute. A Washington teacher keeps all kids inside above 75, with 80 as “the absolute limit.” A Minnesota parent puts their child’s centre at 100. A Wisconsin parent went and read the state licensing regulations and found nothing about air quality in them at all. That’s three reports, not three state policies, and we label them that way rather than promoting them into law because they’d read better as law. Where we later confirm a published state rule we’ll name it and date it. Where we haven’t found one, we say so instead of guessing at a number a daycare might actually be using.
What happens when the pipeline goes down
weather.com’s own air-quality pages have a known failure mode: several render the literal words “No Data” where a reading should be. We built the opposite rule on purpose. When our pipeline can’t reach AirNow, Open-Meteo, OpenAQ or PurpleAir, or when a reading is too old to trust, the page says “we don’t know right now.” Never a number from six hours ago, dressed up as current.
A visible “Updated” tag, with its month and year, only appears on the page when something behind it actually changed. Refreshing the date without refreshing the substance is a separate problem, and we’re deliberately not creating it. If you land on a page and the verdict is missing, that’s the pipeline telling you the truth instead of guessing on your behalf. Check back later, or set an alert instead of refreshing manually.
Corrections
We will get a station wrong, a distance wrong, or a threshold mislabeled at some point. A real audience of instrument-owning readers checks numbers like these against their own gear, and they should. Every dated correction goes on the public corrections log, permanently, never edited away quietly. A corrected page carries a dated link back to that log, so you see the history rather than a clean surface pretending nothing changed.
Read the corrections policy, or see what this project is and isn’t — including what we don’t claim. No lab. No sensors we operate ourselves. No medical staff. We measure continuously over time, from sources we credit by name. We don’t test anything, and we won’t tell you we do.
Where the numbers come from
| EPA AirNow | the official US AQI by stationWeak at: often a 24-hour average, so a sharp plume is diluted |
|---|---|
| PurpleAir | a dense private sensor network — real hyperlocal coverageWeak at: indoor sensors pollute the default map if unfiltered |
| Open-Meteo | pollutants, UV, and European pollen, no key requiredWeak at: does not cover US pollen |
| OpenAQ | raw station measurements worldwide, with historyWeak at: coverage varies by region |