Global City Air Quality
Daily air-quality readings across 10 pollutants (PM2.5, PM10, PM1, NO2, NO, NOx, O3, SO2, CO, black carbon) for ~227 major world cities' reference stations, 2021-2026 - cleaned from OpenAQ's station→sensor→measurement API into one tidy long Parquet. The assembling (per-station sensor alignment) is the tedious part.
- Source
- OpenAQ
- Licence
- Redistributable open data
- Updates
- Daily
- Data through
- 2026-07-27
- Quality
- QC clean · 0 failures
- Format
- Apache Parquet + dictionary
Safe to train on
Built only from a named, redistributable official source under a documented open licence - not scraped web data. No copyright grey zone, no personal data. Ships machine-readable Croissant metadata (ML Commons - loads in Hugging Face / Kaggle / Google), an AI training-licence manifest documenting source, licence and provenance for your model's data governance, and a machine-readable data dictionary (drop it into an agent / RAG prompt so the model knows every column) - all inspectable before you buy.
What's included
- Daily readings across 10 pollutants (PM2.5/PM10/PM1/NO2/NO/NOx/O3/SO2/CO/black carbon), ~227 major cities, 2021-2026
- One representative reference station per city; tidy long format
- city × pollutant × day; flat + partitioned by city
- Source: OpenAQ (CC-BY-4.0) - health, ESG/proptech, insurance, smart-city use
Schema
| Column | Type | Description | Filled | Distinct |
|---|---|---|---|---|
| zone | str | City | 100.0% | 233 |
| ts | timestamp (UTC) | Day | 100.0% | 2,028 |
| pollutant | str | Pollutant (PM2.5, NO2, O3, …) | 100.0% | 10 |
| value | float | Daily mean concentration | 100.0% | 3,087 |
| unit | str | Unit (µg/m³ or ppm) | 100.0% | 3 |
| res_min | int | Cadence in minutes (daily) | 100.0% | 1 |
Sample & preview
Every purchase ships as Apache Parquet with a data dictionary and the full QC report. A free sample (first rows + schema) is downloadable here - confirm fit before you buy. Source: OpenAQ (redistributable open data; attribution passes through - see our Licence).
Don't trust screenshots - drop the sample into your notebook right now.
import pandas as pd df = pd.read_parquet("global-city-air-quality_sample.parquet") df.info() # typed columns, gap-aware, ready to join⬇ Download free Parquet sample or CSV for Excel
Coverage: 233 zones
Abidjan · Abu_Dhabi · Accra · Addis_Ababa · Adelaide · Ahmedabad · Algiers · Almaty · Amman · Amsterdam · Ankara · Antwerp · Astana · Athens · Atlanta · Auckland · Austin · Baku · Bandung · Bangalore · Bangkok · Barcelona · Basel · Beijing · Beirut · Belgrade · Berlin · Bilbao · Bogota · Boston · Bratislava · Bremen · Brisbane · Bristol · Brno · Brussels · Bucharest · Budapest · Buenos_Aires · Busan · Cairo · Calgary · Cali · Cape_Town · Cardiff · Chengdu · Chennai · Chicago · Chongqing · Cleveland · Cluj-Napoca · Cologne · Colombo · Copenhagen · Cork · Daegu · Dakar · Dalian · Dallas · Davao · Delhi · Denver · Detroit · Dhaka · Dresden · Dubai · Dublin · Durban · Dusseldorf · Edinburgh · Edmonton · Eindhoven · Faisalabad · Florence · Frankfurt · Gdansk · Geneva · Genoa · Ghent · Glasgow · Gothenburg · Guadalajara · Guangzhou · Guatemala_City · Guayaquil · Hamburg · Hanoi · Harare · Helsinki · Ho_Chi_Minh_City · Hong_Kong · Hyderabad · Incheon · Indore · Islamabad · Istanbul · Izmir · Jaipur · Jakarta · Jeddah · Johannesburg · Kampala · Kanpur · Karachi · Kathmandu · Katowice · Khartoum · Kigali · Kolkata · Krakow · Kuala_Lumpur · Kuwait_City · Kyoto · Lagos · Lahore · Las_Vegas · Leeds · Leipzig · Liege · Lisbon · Liverpool · Ljubljana · Lodz · London · Los_Angeles · Lucknow · Lusaka · Lyon · Madrid · Malaga · Malmo · Manama · Manchester · Manila · Maputo · Marrakesh · Marseille · Medan · Medellin · Melbourne · Mexico_City · Miami · Milan · Minneapolis · Monterrey · Montreal · Mumbai · Munich · Muscat · Nagoya · Nagpur · Nairobi · Nanjing · Nantes · Naples · New_York · Nice · Nuremberg · Osaka · Oslo · Ottawa · Palermo · Paris · Patna · Perth · Philadelphia · Phnom_Penh · Phoenix · Pittsburgh · Portland · Porto · Poznan · Prague · Pretoria · Pune · Qingdao · Quito · Reykjavik · Riga · Rio_de_Janeiro · Riyadh · Rome · Rotterdam · Sacramento · Salt_Lake_City · San_Diego · San_Francisco · San_Jose · Santiago · Sao_Paulo · Sapporo · Seattle · Seoul · Seville · Shanghai · Shenyang · Shenzhen · Singapore · Sofia · Split · St._Louis · Stockholm · Stuttgart · Surat · Sydney · Taipei · Tallinn · Tashkent · The_Hague · Thessaloniki · Timisoara · Tokyo · Toronto · Toulouse · Turin · Utrecht · Valencia · Vancouver · Varna · Vienna · Vilnius · Washington · Winnipeg · Wroclaw · Wuhan · Xian · Yangon · Yerevan · Yokohama · Zagreb · Zaragoza · Zhengzhou · Zurich
Related datasets
Country Electricity Carbon Intensity, Emissions & Generation
Clean per-country yearly electricity carbon intensity (gCO2/kWh), power-sector CO2 emissions (mtCO2) and total generation (TWh) for ~215 countries, 2000-present. Tidy, analysis-ready long format from Ember's bulk release - no parsing the 49 MB taxonomy file.
EU ETS Verified Emissions & Allowances by Country
Country-level annual EU Emissions Trading System figures - verified emissions, total allocated allowances, and surrendered units, 2005-2025 - cleaned from the EEA's EUTL database. Country totals correctly summed over leaf activities (no rollup double-counting).
European GHG Emissions
Every European country's greenhouse-gas footprint in one clean Parquet: national total GHG emissions (excluding LULUCF) plus the CO2, methane and nitrous-oxide components, all in million tonnes of CO2-equivalent - from Eurostat's official EEA-sourced inventory, one row per country × gas × year since 1990. The series behind every net-zero target and climate dashboard; joins to energy, carbon-price and macro on country code.