The Python + localhost app is the main version.
This page is provided for convenient viewing without installation. For the fuller experience and better results when testing the API, download and use the main app: it makes on-demand requests, supports more device controls, and offers authorized hourly access. Both editions depend on the same upstream sensor data; the main app does not improve sensor accuracy.
Web limitations: five fixed devices, public latest readings only, and scheduled snapshots instead of live browser-to-API requests. No private tokens, hourly history, or device additions. Internet is required; Python is not required for visitors.
Testing and demo only: this independent app tests AirGradient API connections. Software, labels, calculations and source readings may contain mistakes; check the original records before relying on results.
Air Quality Data map
Published readings by location · select a marker for its device · no street tiles
Map loading. Device readings are also available in the cards and tables.
Latest published Air Quality Data by device
Loading the published snapshot…
Collection is scheduled about every 15 minutes. GitHub delays and outages can make it older. Reloading does not request fresh readings from AirGradient.
Air Quality Data parameters and original records
Published JSON ↗API-reported NO₂ and O₃ are displayed in ppb when supplied. Negative values are preserved and flagged; zero alone does not establish accuracy. Cards and map popups list all returned measurements. N/A = known unsupported; N/D = expected or returned field with no data; — = not reported, support unknown. Raw PM₂.₅ is displayed; no AQI is calculated in this web preview. A stale label means the measurement is over 20 minutes old. The source may already be delayed when collected.
What to expect
- Measurement time comes from the device/API. Collection time tells you when GitHub last fetched that record. All displayed times are UTC.
- Failed collection may retain an earlier reading, explicitly labelled with its original timestamps. Zero remains zero; missing data is never replaced with an invented value.
- The page reloads published JSON every five minutes while open. Publishing schedules are approximate; a collection gap over 45 minutes is flagged.
- GitHub can disable scheduled jobs after 60 days without repository activity. If updates stop, check the collection workflow or use the main app.
- Unknown parameter units remain unspecified. NOx/VOC indices and raw electrode signals must not be confused with the separate API-reported NO₂/O₃ concentration fields. This is a demonstration, not an official AirGradient product.