Open-source archive of real-time air quality data from CPCB monitoring stations across India. Data downloaded using vayuayan.

AQI trends - last 5 days
PM2.5-based AQI for major Indian cities (mean across all stations)
Show:
Total stations
-
Monitoring stations nationwide
States/UTs
-
Complete India coverage
Last updated
-
Auto-updated 8x daily

How to use this data

Read gzipped CSV files directly from GitHub URLs using pandas:

Python
import pandas as pd # Read directly from GitHub URL url = "https://saketkc.github.io/vayuayan-archive/data/delhi__anand_vihar__anand_vihar__site_244.csv.gz" df = pd.read_csv(url, compression='gzip') # Display data print(df.head()) print(f"Total records: {len(df)}")

Use readr to load compressed data directly:

R
library(readr) # Read directly from GitHub URL url <- "https://saketkc.github.io/vayuayan-archive/data/delhi__anand_vihar__anand_vihar__site_244.csv.gz" df <- read_csv(url) # Display data head(df) print(paste("Total records:", nrow(df)))

Download files using command line:

Bash
# Download a specific station's data curl -L "https://saketkc.github.io/vayuayan-archive/data/delhi__anand_vihar__anand_vihar__site_244.csv.gz" -o data.csv.gz # Extract and view gunzip data.csv.gz head data.csv

Browse data

Daily aggregated air quality statistics at state and district level.

Loading district files...

Understanding AQI calculation

The Air Quality Index (AQI) is calculated using the Indian CPCB (Central Pollution Control Board) standards. The official AQI calculation uses eight pollutants: PM10, PM2.5, NO₂, SO₂, CO, O₃, NH₃, and Pb. For each pollutant, a sub-index is calculated from 24-hour average concentrations (8-hour for CO and O₃). The worst (maximum) sub-index determines the overall AQI.

Note: Our charts display AQI calculated from PM2.5 concentrations only, as complete pollutant data for all stations is not consistently available. The official CPCB method requires minimum 3 pollutants (with at least one being PM2.5 or PM10) and minimum 16 hours of data for accurate AQI calculation. PM2.5-based AQI provides a useful indicator but may not reflect the complete air quality picture.

AQI categories and health impacts

0-50
Good
Minimal impact. Air quality is satisfactory, and air pollution poses little or no risk.
51-100
Satisfactory
Acceptable air quality. Sensitive individuals may experience minor breathing discomfort.
101-200
Moderate
May cause breathing discomfort to children, elderly, and people with lung or heart disease.
201-300
Poor
Breathing discomfort to most people on prolonged exposure. Those with heart disease may experience discomfort even with short exposure.
301-400
Very poor
Respiratory illness on prolonged exposure. Effect can be more pronounced in people with lung and heart diseases.
401-500
Severe
Health alert: everyone may experience serious health effects. Severe impacts on people with existing diseases.

Calculation methodology

Step 1: Calculate sub-index for each pollutant using linear interpolation between health breakpoints:

Sub-Index = [(I_high - I_low) / (BP_high - BP_low)] × (C - BP_low) + I_low

Where C is the measured concentration, BP_high and BP_low are the concentration breakpoints, and I_high and I_low are the corresponding AQI values.

Step 2: The overall AQI is the maximum (worst) among all calculated sub-indices.

Requirements for valid AQI:

  • Minimum 3 pollutants must be available
  • At least one must be PM2.5 or PM10
  • Minimum 16 hours of data required for 24-hour averaging
  • 8 hours of data required for CO and O₃

Example: If PM2.5 sub-index = 150, PM10 sub-index = 120, and NO₂ sub-index = 80, the overall AQI = 150 (the worst/maximum value).