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.

Open data

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
Open source

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
Open hardware

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.

01

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 | sh
02

Readings 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/readings
03

Anyone 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.

What leaves your machineopenaqi-agent --dry-run · the complete payload
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.

What the world can readGET /v1/air?lat=…&lon=… · the complete response
{
  "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.

AQIVOCidxPM1.0µg/m³PM2.5µg/m³PM4.0µg/m³PM10µg/m³CO₂ppmeCO₂ppmCOppmNO₂ppbOzoneppbSO₂ppbH₂SppbFormaldehydeppbBenzeneppbRadonBq/m³Humidity%NoisedBAUV indexidx
Good
Fair
Elevated
Poor
Severe

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.