How AQI is computed, how seasons are defined, and what to keep in mind when interpreting the numbers. A transparent look at our environmental monitoring science.
The number we display is a 4-of-8 composite AQI: the worst sub-index across PM2.5, PM10, NO₂, and O₃ (8-hour max), computed with CPCB's official breakpoint tables and its ≥ 16 valid hours per day rule. It is close to — but not identical to — the number CPCB would publish for the same day.
The official India AQI uses 8 pollutants (PM2.5, PM10, NO₂, O₃, CO, SO₂, NH₃, Pb). We use 4. NH₃ and Pb are not served by Open-Meteo; CO and SO₂ we deliberately exclude because CAMS Global's accuracy for boundary-layer gaseous species is questionable.
Open-Meteo provides modeled CAMS values, not station observations. The point estimate at a city centroid is not what a CAAQMS station measures.
Read it as a 4-of-8 CPCB-style AQI — close enough for trends and comparisons across cities and seasons, not a substitute for the official daily bulletin.
Open-Meteo serves Copernicus CAMS. Resolution is CAMS Europe (~0.1°, ~11 km) where available; for most Indian cities the served product is CAMS Global (~0.4°, ~40 km).
Hill cities (Shimla, Srinagar, Dehradun, Guwahati) and coastal cities can diverge meaningfully from station readings; treat the trend as more reliable than the absolute value.
For each pollutant a sub-index is computed by linear interpolation between CPCB's breakpoint thresholds; the composite AQI for the day is the worst sub-index across pollutants, provided at least 3 sub-indices are available and at least one is PM2.5 or PM10 (CPCB's minimum-pollutant rule). Daily aggregates of PM2.5, PM10 and NO₂ are 24-hour means; for O₃ we compute the maximum of all 8-hour rolling means ending in the day.
Hourly pollutant concentrations from monitoring stations
Linear interpolation using CPCB breakpoint tables
24-hour rolling mean for PM, 8-hour max for O₃
Worst sub-index across all available pollutants
| PM2.5 (24-h avg, μg/m³) | AQI Sub-Index | Category |
|---|---|---|
| 0 – 30 | 0 – 50 | Good |
| 31 – 60 | 51 – 100 | Satisfactory |
| 61 – 90 | 101 – 200 | Moderate |
| 91 – 120 | 201 – 300 | Poor |
| 121 – 250 | 301 – 400 | Very Poor |
| 251 – 500 | 401 – 500 | Severe |
| PM10 (24-h avg, μg/m³) | AQI Sub-Index | Category |
|---|---|---|
| 0 – 50 | 0 – 50 | Good |
| 51 – 100 | 51 – 100 | Satisfactory |
| 101 – 250 | 101 – 200 | Moderate |
| 251 – 350 | 201 – 300 | Poor |
| 351 – 430 | 301 – 400 | Very Poor |
| 431 – 600 | 401 – 500 | Severe |
Fine Particulate Matter
Coarse Particulate Matter
Nitrogen Dioxide
Ozone
Sulphur Dioxide
Carbon Monoxide
The dashboard uses IMD's standard four-season classification. For Indian cities the monsoon is usually the cleanest period and post-monsoon to mid-winter the worst.
A daily cron job at 02:00 IST re-runs the pipeline for every city in the registry, downloads fresh hourly data from Open-Meteo, recomputes the dashboard JSON and commits the diff.
The frontend is a fully static export — your browser only ever fetches JSON from the same origin, never a third-party API. All processing happens server-side.
This dashboard uses real-time air quality data obtained from the Open-Meteo Air Quality API alongside other verified environmental monitoring sources, ensuring transparency and scientific accuracy.