
OpenAQ
Let AI connect your sources for you
Skip the manual setup — run this in your project and the wizard auto-detects your databases and APIs and connects them to PostHog.

Connect OpenAQ to PostHog to sync your data into the PostHog data warehouse for analysis and modeling.
Enter your OpenAQ API key to pull global air-quality data into the PostHog Data warehouse.
You can create a free API key from your OpenAQ Explorer account.
The free tier is limited to 60 requests per minute. The measurement tables fetch data per sensor, so syncing them against a broad set of locations makes many requests — they're off by default; enable only the sensors you need.
Configuration
| Option | Type | Required |
|---|---|---|
API key | password | Yes |
Linking OpenAQ to PostHog
- Go to the Data pipeline page in PostHog
- Click New source and select OpenAQ
- Fill in the required configuration fields
- Click Next, select the tables you want to sync, and then press Import
Supported tables
| Table | Description | Sync method | Incremental field | Primary key |
|---|---|---|---|---|
locations | Monitoring locations (stations) that report air-quality measurements. | Full refresh | — | id |
parameters | Pollutants and other parameters measured across the network (e.g. PM2.5, O3, NO2). | Full refresh | — | id |
countries | Countries with at least one monitoring location in the network. | Full refresh | — | id |
providers | Organizations that supply air-quality data to OpenAQ. | Full refresh | — | id |
instruments | Instrument models used by monitoring locations. | Full refresh | — | id |
manufacturers | Manufacturers of the instruments used across the network. | Full refresh | — | id |
owners | Entities that own monitoring locations. | Full refresh | — | id |
licenses | Data licenses that govern how each provider's data may be used. | Full refresh | — | id |
sensors | Sensors materialized from each location's embedded sensor list. Full refresh only | Full refresh | — | id |
measurements | Fetched per sensor across all locations — request-heavy, so off by default | Incremental, Full refresh | datetime_from | sensor_id, datetime_from |
measurements_hourly | Fetched per sensor across all locations — request-heavy, so off by default | Incremental, Full refresh | datetime_from | sensor_id, datetime_from |
measurements_daily | Fetched per sensor across all locations — request-heavy, so off by default | Incremental, Full refresh | datetime_from | sensor_id, datetime_from |