Global, hyperlocal, and accurate air quality data
Track global pollution exposure across seven critical pollutants and multiple AQI standards.
Ambee aggregates raw environmental data from satellite and ground observations, meteorological models, historical datasets, and emission inventories.
Station-only
Satellite-only
Model-only
High
Low
High
High
High
Medium
Low
Medium
High
Medium
Medium
High
Yes
No
No
Some
Full
Limited
No
Limited
Track global pollution exposure across seven critical pollutants and multiple AQI standards.

Air quality changes by location, season, and emission source. We fuse data from multiple sources, calibrate against ground truth, and deliver data that's globally consistent and locally precise.
Ambee aggregates raw environmental data from satellite and ground observations, including augmenting inputs from Ambee’s proprietary sensor network, meteorological models, historical datasets, and emission inventories like land use, vegetation, fires etc.
All inputs are mapped to a unified framework, aligned by timestamp, and normalized for compatibility across varying resolutions and formats.
Ambee Climate Engine’s machine learning models prioritize reliable sources, calibrate across inputs, fill spatial gaps, and account for terrain and weather.
Each ground station is systematically excluded, its readings predicted using surrounding data, then verified against actual measurements. This repeats for every station.
Automated monitoring runs consistency checks and benchmarks outputs against the ground truth.
Ambee's air quality data is continuously validated against ground monitoring stations across four major regions. The report here compares the accuracy of Ambee's air quality data against a leading competitor.
Ambee achieves over 90% accuracy across all regions, measured as 100% minus MAPE (mean absolute percentage error), the average deviation between predictions and ground measurements.

Ambee's error rates run up to 5x lower than leading providers across all regions. RMSE (root mean squared error) measures accuracy by the average magnitude of errors, with larger deviations penalized more heavily.

Comprehensive. Hyperlocal. Global. Accurate.
Typical providers
Limited countries/regions
AQI, PM2.5, PM10, NO2, SO2, CO, O3
3-6 pollutants
Up to 4 days (hourly)
3-7 days
2010 onwards
2 years
Sub-kilometer resolution (<1km) available upon request.
1km - 15km
Hourly, daily, and custom intervals
Hourly or daily
Can be mapped to any lat/lon or geographically bounded area
City or station level
US EPA, UK DAQI, Indian AQI, European CAQI, and additional global standards
Single standard
(typically US EPA)
Present conditions refresh hourly. Forecasts refresh daily
Daily
Trigger campaigns when air quality levels increase demand for air purifiers, masks, or allergy relief products.

Provide detailed routing guidance around high-pollution zones to protect driver health.

Automate purification cycles and maintenance schedules based on real-time outdoor pollution levels.

Automatically cycle building ventilation systems based on outdoor air quality to maintain indoor air standards and reduce energy costs.

Alert users with respiratory conditions when pollution levels exceed safe thresholds for their precise location.

Instantly integrate Ambee air quality data into any workflow, available in any format, including NetCDF, GRIB, CSV, Parquet, and more.
const http = require("https");
const options = {
"method": "GET",
"hostname": "api.ambeedata.com",
"port": null,
"path": "/latest/by-lat-lng?lat=12.9889055&lng=77.574044",
"headers": {
"x-api-key": "API_KEY",
"Content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();const http = require('https');
const options = {
method: 'GET',
hostname: 'api.ambeedata.com',
port: null,
path: '/latest/by-lat-lng?lat=12.9889055&lng=77.574044',
headers: {
'x-api-key': 'API_KEY',
'Content-type': 'application/json'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.ambeedata.com/latest/by-lat-lng?lat=12.9889055&lng=77.574044")
.get()
.addHeader("x-api-key", "API_KEY")
.addHeader("Content-type", "application/json")
.build();
Response response = client.newCall(request).execute();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.ambeedata.com/latest/by-lat-lng?lat=12.9889055&lng=77.574044"),
Headers =
{
{ "x-api-key", "API_KEY" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ambeedata.com/latest/by-lat-lng?lat=12.9889055&lng=77.574044"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "API_KEY")
req.Header.Add("Content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ambeedata.com/latest/by-lat-lng?lat=12.9889055&lng=77.574044",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-type: application/json",
"x-api-key: API_KEY"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.ambeedata.com/latest/by-lat-lng?lat=12.9889055&lng=77.574044")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'API_KEY'
request["Content-type"] = 'application/json'
response = http.request(request)
puts response.read_bodyimport http.client
conn = http.client.HTTPSConnection("api.ambeedata.com")
headers = {
'x-api-key': "API_KEY",
'Content-type': "application/json"
}
conn.request("GET", "/forecast/by-lat-lng?lat=12.9889055&lng=77.574044", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))const http = require('https');
const options = {
method: 'GET',
hostname: 'api.ambeedata.com',
port: null,
path: '/forecast/by-lat-lng?lat=12.9889055&lng=77.574044',
headers: {
'x-api-key': 'API_KEY',
'Content-type': 'application/json'
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on('data', function (chunk) {
chunks.push(chunk);
});
res.on('end', function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.ambeedata.com/forecast/by-lat-lng?lat=12.9889055&lng=77.574044")
.get()
.addHeader("x-api-key", "API_KEY")
.addHeader("Content-type", "application/json")
.build();
Response response = client.newCall(request).execute();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://api.ambeedata.com/forecast/by-lat-lng?lat=12.9889055&lng=77.574044"),
Headers =
{
{ "x-api-key", "API_KEY" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ambeedata.com/forecast/by-lat-lng?lat=12.9889055&lng=77.574044"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "API_KEY")
req.Header.Add("Content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ambeedata.com/forecast/by-lat-lng?lat=12.9889055&lng=77.574044",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Content-type: application/json",
"x-api-key: API_KEY"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.ambeedata.com/forecast/by-lat-lng?lat=12.9889055&lng=77.574044")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'API_KEY'
request["Content-type"] = 'application/json'
response = http.request(request)
puts response.read_body{
"message": "success",
"lat": 40,
"lng": -77,
"timezone": "America/New_York",
"data": [
{
"CO": 0.386,
"NO2": 7.546,
"OZONE": 23.401,
"PM10": 18.525,
"PM25": 6.897,
"SO2": 0.454,
"AQI": 38,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 7,
"category": "Good"
},
"unixTs": 1782192346,
"timestamp": "2026-06-23T05:00:00.000Z",
"localTime": "2026-06-23T01:25:46-04:00"
}
]
}{
"message": "success",
"lat": 40,
"lng": -77,
"timezone": "America/New_York",
"data": [
{
"CO": 0.168,
"NO2": 4.441,
"OZONE": 31.187,
"PM10": 27.154,
"PM25": 6.133,
"SO2": 0.267,
"AQI": 33,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 6,
"category": "Good"
},
"timestamp": "2026-06-23T06:00:00.000Z",
"unixTs": 1782194400
},
{
"CO": 0.161,
"NO2": 3.476,
"OZONE": 28.305,
"PM10": 28.022,
"PM25": 6.374,
"SO2": 0.257,
"AQI": 33,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 6,
"category": "Good"
},
"timestamp": "2026-06-23T07:00:00.000Z",
"unixTs": 1782198000
},
{
"CO": 0.157,
"NO2": 2.579,
"OZONE": 26.604,
"PM10": 31.903,
"PM25": 7.27,
"SO2": 0.247,
"AQI": 38,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 7,
"category": "Good"
},
"timestamp": "2026-06-23T08:00:00.000Z",
"unixTs": 1782201600
},
{
"CO": 0.153,
"NO2": 2.185,
"OZONE": 23.233,
"PM10": 42.93,
"PM25": 9.624,
"SO2": 0.235,
"AQI": 52,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 10,
"category": "Moderate"
},
"timestamp": "2026-06-23T09:00:00.000Z",
"unixTs": 1782205200
},
{
"CO": 0.149,
"NO2": 2.048,
"OZONE": 28.213,
"PM10": 46.167,
"PM25": 10.436,
"SO2": 0.226,
"AQI": 52,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 10,
"category": "Moderate"
},
"timestamp": "2026-06-23T10:00:00.000Z",
"unixTs": 1782208800
},
{
"CO": 0.144,
"NO2": 1.898,
"OZONE": 28.508,
"PM10": 50.602,
"PM25": 11.422,
"SO2": 0.214,
"AQI": 54,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 11,
"category": "Moderate"
},
"timestamp": "2026-06-23T11:00:00.000Z",
"unixTs": 1782212400
},
{
"CO": 0.139,
"NO2": 1.608,
"OZONE": 25.466,
"PM10": 29.144,
"PM25": 6.615,
"SO2": 0.203,
"AQI": 38,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 7,
"category": "Good"
},
"timestamp": "2026-06-23T12:00:00.000Z",
"unixTs": 1782216000
},
{
"CO": 0.136,
"NO2": 1.421,
"OZONE": 27.067,
"PM10": 16.193,
"PM25": 3.775,
"SO2": 0.192,
"AQI": 25,
"aqiInfo": {
"pollutant": "O3",
"concentration": 27,
"category": "Good"
},
"timestamp": "2026-06-23T13:00:00.000Z",
"unixTs": 1782219600
},
{
"CO": 0.133,
"NO2": 1.123,
"OZONE": 27.817,
"PM10": 12.173,
"PM25": 2.983,
"SO2": 0.178,
"AQI": 26,
"aqiInfo": {
"pollutant": "O3",
"concentration": 28,
"category": "Good"
},
"timestamp": "2026-06-23T14:00:00.000Z",
"unixTs": 1782223200
},
{
"CO": 0.13,
"NO2": 0.844,
"OZONE": 29.489,
"PM10": 11.05,
"PM25": 2.712,
"SO2": 0.16,
"AQI": 27,
"aqiInfo": {
"pollutant": "O3",
"concentration": 29,
"category": "Good"
},
"timestamp": "2026-06-23T15:00:00.000Z",
"unixTs": 1782226800
},
{
"CO": 0.127,
"NO2": 0.681,
"OZONE": 31.707,
"PM10": 14.057,
"PM25": 3.222,
"SO2": 0.139,
"AQI": 30,
"aqiInfo": {
"pollutant": "O3",
"concentration": 32,
"category": "Good"
},
"timestamp": "2026-06-23T16:00:00.000Z",
"unixTs": 1782230400
},
{
"CO": 0.125,
"NO2": 0.514,
"OZONE": 32.642,
"PM10": 18.046,
"PM25": 4.113,
"SO2": 0.116,
"AQI": 31,
"aqiInfo": {
"pollutant": "O3",
"concentration": 33,
"category": "Good"
},
"timestamp": "2026-06-23T17:00:00.000Z",
"unixTs": 1782234000
},
{
"CO": 0.122,
"NO2": 0.422,
"OZONE": 36.362,
"PM10": 22.872,
"PM25": 5.214,
"SO2": 0.101,
"AQI": 33,
"aqiInfo": {
"pollutant": "O3",
"concentration": 36,
"category": "Good"
},
"timestamp": "2026-06-23T18:00:00.000Z",
"unixTs": 1782237600
},
{
"CO": 0.119,
"NO2": 0.394,
"OZONE": 47.061,
"PM10": 22.045,
"PM25": 5.09,
"SO2": 0.108,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 47,
"category": "Good"
},
"timestamp": "2026-06-23T19:00:00.000Z",
"unixTs": 1782241200
},
{
"CO": 0.116,
"NO2": 0.394,
"OZONE": 51.17,
"PM10": 19.161,
"PM25": 4.395,
"SO2": 0.132,
"AQI": 47,
"aqiInfo": {
"pollutant": "O3",
"concentration": 51,
"category": "Good"
},
"timestamp": "2026-06-23T20:00:00.000Z",
"unixTs": 1782244800
},
{
"CO": 0.116,
"NO2": 0.427,
"OZONE": 49.221,
"PM10": 15.176,
"PM25": 3.504,
"SO2": 0.166,
"AQI": 45,
"aqiInfo": {
"pollutant": "O3",
"concentration": 49,
"category": "Good"
},
"timestamp": "2026-06-23T21:00:00.000Z",
"unixTs": 1782248400
},
{
"CO": 0.117,
"NO2": 0.527,
"OZONE": 49.379,
"PM10": 12.125,
"PM25": 2.999,
"SO2": 0.198,
"AQI": 45,
"aqiInfo": {
"pollutant": "O3",
"concentration": 49,
"category": "Good"
},
"timestamp": "2026-06-23T22:00:00.000Z",
"unixTs": 1782252000
},
{
"CO": 0.118,
"NO2": 0.763,
"OZONE": 47.382,
"PM10": 12.145,
"PM25": 2.946,
"SO2": 0.224,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 47,
"category": "Good"
},
"timestamp": "2026-06-23T23:00:00.000Z",
"unixTs": 1782255600
},
{
"CO": 0.121,
"NO2": 1.392,
"OZONE": 39.355,
"PM10": 9.169,
"PM25": 2.256,
"SO2": 0.247,
"AQI": 36,
"aqiInfo": {
"pollutant": "O3",
"concentration": 39,
"category": "Good"
},
"timestamp": "2026-06-24T00:00:00.000Z",
"unixTs": 1782259200
},
{
"CO": 0.125,
"NO2": 2.238,
"OZONE": 33.053,
"PM10": 13.928,
"PM25": 3.158,
"SO2": 0.266,
"AQI": 31,
"aqiInfo": {
"pollutant": "O3",
"concentration": 33,
"category": "Good"
},
"timestamp": "2026-06-24T01:00:00.000Z",
"unixTs": 1782262800
},
{
"CO": 0.126,
"NO2": 2.623,
"OZONE": 29.828,
"PM10": 14.072,
"PM25": 3.184,
"SO2": 0.276,
"AQI": 28,
"aqiInfo": {
"pollutant": "O3",
"concentration": 30,
"category": "Good"
},
"timestamp": "2026-06-24T02:00:00.000Z",
"unixTs": 1782266400
},
{
"CO": 0.126,
"NO2": 2.771,
"OZONE": 27.744,
"PM10": 13.828,
"PM25": 3.129,
"SO2": 0.282,
"AQI": 26,
"aqiInfo": {
"pollutant": "O3",
"concentration": 28,
"category": "Good"
},
"timestamp": "2026-06-24T03:00:00.000Z",
"unixTs": 1782270000
},
{
"CO": 0.126,
"NO2": 2.828,
"OZONE": 26.41,
"PM10": 13.957,
"PM25": 3.229,
"SO2": 0.289,
"AQI": 24,
"aqiInfo": {
"pollutant": "O3",
"concentration": 26,
"category": "Good"
},
"timestamp": "2026-06-24T04:00:00.000Z",
"unixTs": 1782273600
},
{
"CO": 0.124,
"NO2": 2.693,
"OZONE": 24.254,
"PM10": 16.085,
"PM25": 3.714,
"SO2": 0.299,
"AQI": 22,
"aqiInfo": {
"pollutant": "O3",
"concentration": 24,
"category": "Good"
},
"timestamp": "2026-06-24T05:00:00.000Z",
"unixTs": 1782277200
},
{
"CO": 0.123,
"NO2": 2.505,
"OZONE": 22.849,
"PM10": 18.909,
"PM25": 4.275,
"SO2": 0.323,
"AQI": 22,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 4,
"category": "Good"
},
"timestamp": "2026-06-24T06:00:00.000Z",
"unixTs": 1782280800
},
{
"CO": 0.123,
"NO2": 2.385,
"OZONE": 22.236,
"PM10": 19.954,
"PM25": 4.584,
"SO2": 0.355,
"AQI": 27,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 5,
"category": "Good"
},
"timestamp": "2026-06-24T07:00:00.000Z",
"unixTs": 1782284400
},
{
"CO": 0.124,
"NO2": 2.524,
"OZONE": 21.206,
"PM10": 21.152,
"PM25": 4.922,
"SO2": 0.388,
"AQI": 27,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 5,
"category": "Good"
},
"timestamp": "2026-06-24T08:00:00.000Z",
"unixTs": 1782288000
},
{
"CO": 0.125,
"NO2": 2.742,
"OZONE": 21.105,
"PM10": 25.088,
"PM25": 5.724,
"SO2": 0.417,
"AQI": 33,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 6,
"category": "Good"
},
"timestamp": "2026-06-24T09:00:00.000Z",
"unixTs": 1782291600
},
{
"CO": 0.127,
"NO2": 2.995,
"OZONE": 22.843,
"PM10": 24.257,
"PM25": 5.689,
"SO2": 0.432,
"AQI": 33,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 6,
"category": "Good"
},
"timestamp": "2026-06-24T10:00:00.000Z",
"unixTs": 1782295200
},
{
"CO": 0.128,
"NO2": 2.714,
"OZONE": 28.413,
"PM10": 24.072,
"PM25": 5.601,
"SO2": 0.425,
"AQI": 33,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 6,
"category": "Good"
},
"timestamp": "2026-06-24T11:00:00.000Z",
"unixTs": 1782298800
},
{
"CO": 0.124,
"NO2": 1.745,
"OZONE": 37.894,
"PM10": 25.115,
"PM25": 5.845,
"SO2": 0.465,
"AQI": 35,
"aqiInfo": {
"pollutant": "O3",
"concentration": 38,
"category": "Good"
},
"timestamp": "2026-06-24T12:00:00.000Z",
"unixTs": 1782302400
},
{
"CO": 0.122,
"NO2": 1.218,
"OZONE": 43.768,
"PM10": 21.075,
"PM25": 4.928,
"SO2": 0.54,
"AQI": 41,
"aqiInfo": {
"pollutant": "O3",
"concentration": 44,
"category": "Good"
},
"timestamp": "2026-06-24T13:00:00.000Z",
"unixTs": 1782306000
},
{
"CO": 0.115,
"NO2": 0.786,
"OZONE": 46.745,
"PM10": 16.063,
"PM25": 3.736,
"SO2": 0.535,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 47,
"category": "Good"
},
"timestamp": "2026-06-24T14:00:00.000Z",
"unixTs": 1782309600
},
{
"CO": 0.111,
"NO2": 0.565,
"OZONE": 48.748,
"PM10": 12.277,
"PM25": 3.067,
"SO2": 0.453,
"AQI": 45,
"aqiInfo": {
"pollutant": "O3",
"concentration": 49,
"category": "Good"
},
"timestamp": "2026-06-24T15:00:00.000Z",
"unixTs": 1782313200
},
{
"CO": 0.109,
"NO2": 0.459,
"OZONE": 48.414,
"PM10": 12.033,
"PM25": 2.939,
"SO2": 0.382,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 48,
"category": "Good"
},
"timestamp": "2026-06-24T16:00:00.000Z",
"unixTs": 1782316800
},
{
"CO": 0.108,
"NO2": 0.412,
"OZONE": 47.957,
"PM10": 11.049,
"PM25": 2.68,
"SO2": 0.337,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 48,
"category": "Good"
},
"timestamp": "2026-06-24T17:00:00.000Z",
"unixTs": 1782320400
},
{
"CO": 0.109,
"NO2": 0.399,
"OZONE": 48.229,
"PM10": 11.144,
"PM25": 2.793,
"SO2": 0.305,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 48,
"category": "Good"
},
"timestamp": "2026-06-24T18:00:00.000Z",
"unixTs": 1782324000
},
{
"CO": 0.109,
"NO2": 0.408,
"OZONE": 48.986,
"PM10": 13.885,
"PM25": 3.129,
"SO2": 0.285,
"AQI": 45,
"aqiInfo": {
"pollutant": "O3",
"concentration": 49,
"category": "Good"
},
"timestamp": "2026-06-24T19:00:00.000Z",
"unixTs": 1782327600
},
{
"CO": 0.11,
"NO2": 0.424,
"OZONE": 48.08,
"PM10": 16,
"PM25": 3.716,
"SO2": 0.274,
"AQI": 44,
"aqiInfo": {
"pollutant": "O3",
"concentration": 48,
"category": "Good"
},
"timestamp": "2026-06-24T20:00:00.000Z",
"unixTs": 1782331200
},
{
"CO": 0.111,
"NO2": 0.469,
"OZONE": 49.266,
"PM10": 17.004,
"PM25": 3.869,
"SO2": 0.269,
"AQI": 45,
"aqiInfo": {
"pollutant": "O3",
"concentration": 49,
"category": "Good"
},
"timestamp": "2026-06-24T21:00:00.000Z",
"unixTs": 1782334800
},
{
"CO": 0.113,
"NO2": 0.579,
"OZONE": 51.116,
"PM10": 17.025,
"PM25": 3.839,
"SO2": 0.267,
"AQI": 47,
"aqiInfo": {
"pollutant": "O3",
"concentration": 51,
"category": "Good"
},
"timestamp": "2026-06-24T22:00:00.000Z",
"unixTs": 1782338400
},
{
"CO": 0.115,
"NO2": 0.809,
"OZONE": 51.428,
"PM10": 17.08,
"PM25": 3.837,
"SO2": 0.27,
"AQI": 47,
"aqiInfo": {
"pollutant": "O3",
"concentration": 51,
"category": "Good"
},
"timestamp": "2026-06-24T23:00:00.000Z",
"unixTs": 1782342000
},{
"CO": 0.13,
"NO2": 2.633,
"OZONE": 41.503,
"PM10": 4.228,
"PM25": 4.093,
"SO2": 0.292,
"AQI": 39,
"aqiInfo": {
"pollutant": "O3",
"concentration": 42,
"category": "Good"
},
"timestamp": "2026-06-25T00:00:00.000Z",
"unixTs": 1782345600
},{
"CO": 0.151,
"NO2": 5.164,
"OZONE": 41.229,
"PM10": 21.081,
"PM25": 4.848,
"SO2": 0.363,
"AQI": 38,
"aqiInfo": {
"pollutant": "O3",
"concentration": 41,
"category": "Good"
},
"timestamp": "2026-06-25T01:00:00.000Z",
"unixTs": 1782349200
},{
"CO": 0.161,
"NO2": 6.438,
"OZONE": 36.538,
"PM10": 30.015,
"PM25": 6.827,
"SO2": 0.438,
"AQI": 38,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 7,
"category": "Good"
},
"timestamp": "2026-06-25T02:00:00.000Z",
"unixTs": 1782352800
},{
"CO": 0.172,
"NO2": 7.702,
"OZONE": 35.06,
"PM10": 33.927,
"PM25": 7.774,
"SO2": 0.518,
"AQI": 44,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 8,
"category": "Good"
},
"timestamp": "2026-06-25T03:00:00.000Z",
"unixTs": 1782356400
}, {
"CO": 0.185,
"NO2": 9.191,
"OZONE": 32.739,
"PM10": 33.995,
"PM25": 7.799,
"SO2": 0.582,
"AQI": 44,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 8,
"category": "Good"
},
"timestamp": "2026-06-25T04:00:00.000Z",
"unixTs": 1782360000
},{
"CO": 0.195,
"NO2": 10.272,
"OZONE": 32.81,
"PM10": 35.026,
"PM25": 7.982,
"SO2": 0.658,
"AQI": 44,
"aqiInfo": {
"pollutant": "PM2.5",
"concentration": 8,
"category": "Good"
},
"timestamp": "2026-06-25T05:00:00.000Z",
"unixTs": 1782363600
}
]
}Sign up for an Ambee account and generate your API key from the dashboard.
Select the endpoint based on what you need: present conditions, historical data, or forecasts.
Specify the location using latitude/longitude coordinates, postal codes, city names, or country codes.
Include your API key in the request header and call the endpoint. You'll receive AQI and all seven pollutant concentrations in JSON format.
Common questions about Ambee's air quality data
The air quality index (AQI) measures air pollution levels in a location based on air quality data. It ranges from 1 to 500; anything exceeding 500 is considered fatal.
Copy and paste the API key provided on the dashboard to successfully request air quality data via air quality API calls. You will get the AQ data in the respective set of records.
Air quality data can be used to prevent respiratory health ailments, determine the best times for marketing products such as anti-pollution masks, understand the hyper-local environment in the area, and schedule regular HVAC maintenance.
Air quality forecasting is the process of predicting air pollution levels to protect public health. The air quality forecast involves giving an early warning against harmful air pollutants.
A good air quality index is when the air pollution data gives an AQI level of less than 50. The lower the AQI, the better the air quality.
Ambee combines 60+ sources (satellites, sensors, monitors) and ISO-certified processes to achieve 98% correlation with ground monitors (2023 study).
Yes! Use our Accuracy Dashboard to compare Ambee’s real-time data with monitors in your region.
We fill gaps using satellite data and machine learning.
Ambee’s data pipelines are ISO 9001 certified, and our AQI aligns with EPA standards.
