Open data · Open source · Open hardware
Air quality data,
by the people, for the people.
- Sensors
- Regions
- Readings
Why this exists
Air is free. So the data about it should be too.
Official monitoring is sparse — often one reference station for an entire city, and none at all for most of the world. The measurements that do exist are frequently behind a licence, a login, or a per-request price. Meanwhile thousands of people already own a sensor sitting on a windowsill, measuring the air where they actually live, and that reading goes nowhere.
openaqi is the plumbing between the two. Everything it produces is public: the readings, the code that collects them, the thresholds they are graded against, and the reasoning behind every decision.
Free to read, free to reuse
A key, a generous quota, and no payment tier that unlocks the real numbers. Attribution is all we ask. If a number costs money to see, it is not public health information.
Get a free API key →Nothing you have to trust
The agent that runs on your machine is open source, because nobody should run a closed binary that phones home with their location. So is the client library. Read it, build it, change it.
Read the agent's source →Starting with one device, on purpose
UniFi Protect air quality sensors today — the hardware we run ourselves and can test against. Support widens one device at a time, because a reading carries no proof of what produced it, and a map where one sensor sets an area's number has to earn the benefit of the doubt.
See what is supported →How it works
One person, one sensor, ten minutes
That is the whole unit of contribution. Enough people doing it is the entire dataset — there is no fleet we own, no hardware we sell, and no step where we measure anything ourselves.
Someone runs a sensor
A UniFi Protect air quality sensor, read by one open-source binary on a Raspberry Pi, a NAS, or any box that is already on — it buffers locally and survives the network going down.
curl -sSL openaqi.net/install.sh | shReadings join everyone else's
Inside a ~5 km cell, where one person's sensor becomes part of an area rather than a point. This is the step that turns a private curiosity into public information.
POST /v1/readingsAnyone can use it
The map, the API, the raw history — free, with attribution and no permission needed. Graded against published health thresholds, so green genuinely means the air is fine.
GET /api/v1/air?lat=&lon=Privacy
Your sensor knows where it is. The network never does.
Rather than ask you to trust a list of promises, here is the actual data. Everything your sensor sends, and everything anyone else can read back. Neither one says where you are.
POST /v1/readings
Authorization: Bearer oaq_…
{
"readings": [
{ "ts": "2026-08-02T09:00:00Z",
"metric": "pm2p5", "value": 8.4 },
{ "ts": "2026-08-02T09:00:00Z",
"metric": "co2", "value": 612 }
]
}No latitude. No longitude. No device name, no home network, no address. Where a reading came from is worked out from the rough location you gave once when you signed up, and only ever as an area.
{
"cell": "608693241486770175",
"centre": { "lat": 37.32, "lon": -121.92 },
"coverage": { "sensors": 3 },
"metrics": [
{ "metric": "pm2p5", "value": 8.1,
"severity": "good" }
]
}centre is the middle of that 5.2 km² area — not of anything you own. Three separate sensors went into this number, and none of them can be picked back out of it.
Everything above is verifiable from the outside — the API, the agent and the reasoning are all public.
What we measure
Graded against published standards
Every threshold cites its source. Where no standard exists, we say so instead of inventing one.
One sensor is a curiosity.
A thousand is a public record.
If you already own an air quality sensor, you are ten minutes from adding your neighbourhood to the map.