Most sensors on this map are shown exactly as their network reports them. Two networks are humidity-corrected before display. This is what we change, and why.
Why any correction at all. Low-cost PM2.5 sensors size particles by shining a laser through the air, so in humid conditions water-swollen particles scatter more light and the sensor reads more mass than is really there. Bali runs 45–70% relative humidity, where this over-read is large. The two community networks built on Plantower modules — AirGradient and PurpleAir — publish this uncorrected figure on the open feeds we read, so we apply the standard humidity correction ourselves before showing it. Every other network on the map (Nafas, AQICN, IQAir, Smart Citizen, OpenAQ) is displayed as supplied.
The formula. We use the US EPA 2021 correction for Plantower/PurpleAir sensors — the same algorithm AirGradient applies to produce the "compensated" value on its own dashboard, which their public feed does not expose. It adjusts the raw reading using the sensor's own relative-humidity measurement, in five concentration bands. Our version is the EPA formula only; AirGradient's dashboard adds a small per-device factory calibration that is not published, so our corrected values track theirs closely but are not identical.
What it does to the numbers. The correction is mostly downward and can be substantial — in humid, smoky conditions a raw 28 µg/m³ becomes roughly 15. It is not downward everywhere: the formula carries a fixed offset, so in very clean, drier air a near-zero raw reading is lifted to about 2 µg/m³. That floor is a known property of the published regression at the bottom of its range, not a fault in the sensor; readings that low are already well within the "Good" band and the distinction has no health meaning. We publish the corrected value as-is rather than hiding this behaviour.
Provenance and reversibility. The raw figure is stored alongside every corrected reading, so the correction is fully auditable and reversible and nothing a sensor actually reported is lost. Correction began on 21 July 2026; earlier readings from these networks remain as they were recorded. PurpleAir history before that date stays uncorrected because we did not previously store the humidity needed to correct it, so a PurpleAir sensor's own record shows a small one-time step at the changeover. A · corrected tag marks any reading this has been applied to.