How it works
Where every number comes from
Where each number comes from, and what it can and cannot tell you. The FAQ has the short answers.
The number on Today
If a CPCB continuous station within 25 km reported in the last 3 hours, you see that station. Each station measures up to seven pollutants (PM2.5, PM10, nitrogen dioxide, sulphur dioxide, ozone, ammonia, carbon monoxide) every 15 minutes and sends hourly values to CPCB.
CPCB turns each pollutant into a sub-index from 0 to 500 using India's breakpoints. The AQI is the highest sub-index, and it needs at least three pollutants, one of them PM2.5 or PM10. This is CPCB's rule; the same "worst pollutant sets the number" rule is used in the United States and most other countries.
Right now is the latest hour: the highest of CPCB's latest-hour sub-indices. CPCB official 24-hour AQI, shown under it, averages the last 24 hours (8 hours for ozone and carbon monoxide). The official figure is what bulletins and news use. It is smoother and usually lower than the evening peak, which is why we lead with the latest hour and always show both.
PM2.5 in µg/m³ is worked out from CPCB's sub-index with the same breakpoints in reverse, so it matches what CPCB reports. CPCB's real-time data is provisional and can be revised later.
Why another app shows a different number
Apps can disagree without any of them being wrong. Most differ in one of four ways:
- Time window. Many show CPCB's 24-hour AQI; we lead with the latest hour, which is higher in the evening and lower in the afternoon.
- Scale. International apps often use the US AQI, where the same air gets a much higher number than on India's scale.
- Source. Some show a model or satellite estimate for a grid square instead of the nearest station.
- Station. The "nearest station" can differ, and a station 3 km away can read very differently from one beside a highway.
Where there is no station
Most of India is more than 25 km from a station. There we show an estimate for your 500 m square from Google's Air Quality service, which combines models, satellite data and monitors. We take Google's hourly concentrations, turn PM2.5 and PM10 into India's AQI with CPCB's rules, and mark the card with a dashed outline and Google's credit line. If Google is unavailable, we use the Copernicus CAMS model through Open-Meteo, scaled to the satellite record for that place and month. We say "not available" only if every source is down.
The gases (ozone, NO₂, SO₂, CO) are listed with the estimate but not counted in its number. Models read ozone over India far too high: on the Konkan coast they can show 4 to 6 times what nearby stations measure, which alone would push a clean village to "Very poor".
The next 4 days come from Google's hourly forecast for the same square, or for the station's spot when a station gives the reading. If Google is unavailable we use the CAMS forecast. Like the estimate, the forecast's AQI is worked out from PM2.5 and PM10.
An estimate is not a measurement. It can miss a local source such as a burning dump or a busy junction, and it is usually a couple of hours behind.
History
Station history from 2009 comes from the XKDR India Air Quality Database (CPCB hourly data, CC BY 4.0) to September 2025, then OpenAQ and our own hourly copy of CPCB's live feed from October 2026. Each value records where it came from.
- Hourly values are labelled by the hour they start, in IST.
- A day needs 16 or more measured hours, or it is shown as not enough data. Missing is never zero.
- Monthly and yearly values are means of daily means. A year is hatched when under 75% of its days were measured.
- City values are the mean of the stations reporting that day, so the mix of stations changes. Where a city has stations that reported throughout, a "same stations" view removes that effect.
- Every averaged point also shows its peak, so a single bad night is not hidden by the average.
Data quality, shown the same way everywhere
Latest hour in, with enough pollutants for CPCB's AQI rule.
An AQI is shown, but a pollutant is missing; drawn faded.
No reading for 3 hours or more. The old value is greyed with its age and never used for advice.
Stuck at one value for 4 or more hours, or at the instrument's upper limit (PM readings near 1,000 µg/m³).
The station does not measure this pollutant.
Under 16 hours in a day, or under 75% of days in a year.
No longer running. Its record stays browsable.
A model value for a place with no station nearby, dashed outline.
The station check
For each station with 4 or more good years between 2016 and 2019, we learn how its monthly PM2.5 normally relates to the satellite-based estimate for its 1 km square (Washington University's SatPM2.5, V6.GL.03). From that relationship we draw an 80% expected range for every later month.
The method and its settings were chosen on 2016 to 2018 only and then tested once. On 2019, held out, 84% of months fell inside the 80% range; with whole regions held out, 85%. A station gets a verdict only when 8 or more of its last 12 checked months (2023 to 2024) fall on one side of the range. On held-out data that rule flagged 1 to 2% of stations that were treated as honest, and it catches a 50% under-reading in 86% of cases.
106 stations in 16 states have a verdict. 171 newer stations are compared with checked stations 25 to 50 km away and get a range without a verdict, because borrowed ranges gave wrong verdicts 6% of the time. Stations with not enough overlapping data say "No comparison available".
What the check cannot do
- It is monthly and historical. Satellite PM2.5 runs one to two years behind (now to December 2024). It cannot check today's reading.
- Not every station can be checked. The station's own range needs a 2016 to 2019 reference period.
- It is not fully independent. The satellite estimate is partly calibrated with ground monitors, including CPCB's, so it is a strong check, not proof.
- It cannot say why a station differs. Recalibration, relocation, nearby works or processing can all move a station's readings, and CPCB does not publish station moves. We list possible reasons and never state intent.
- A satellite square is 1 km; a station is a point. The reference relationship absorbs fixed siting differences, not changes in siting.
Right of reply
If you run a station, or think a number here is wrong, write to hello@abhijitvaidya.in. Corrections to our data are listed on What changed, with the date and release.