Publishing Air Quality Data on the aqicn.org / waqi.info map
Feed Templates

Publishing data on the World Air Quality Index project is free for every one. But it is also simple and straightforward: All you need to add data on the World Air Quality Index map is to provide a feed URL with the real-time information about the monitoring stations (name and location), the pollutants being measured and the real-time readings (together with the units, for instance milligrams or ppb).


Qualification Criteria

Note that, historically, the data published on the World Air Quality Index maps (aqicn.org and waqi.info) was only the official data provided by each country respective Environmental Protection Agency (see the full EPA list).

The official data refers to data monitored using professional BAM, TEOM and similar high-cost air quality monitoring stations. Those stations are not trivial to use, and do require constant maintenance and calibration by the EPA professional field-engineering teams.

However, nowadays, more affordable laser-scattering-based air quality monitoring stations are widely use as companion to the official air quality monitoring stations. Those more affordable station can cost 1000 times less than the BAM and TOEM station.

We do recommend to use the semi-professional GAIA air quality monitoring stations for this purpose. But we also accept data from other stations. Nevertheless, such particle counter-based stations need to report enhanced data feed with additional quality controls (see quality control section).

Feed format

Since almost every country has its own reporting format, the World Air Quality Index project can accept any kinds of formats for the feeds: They can be in CSV, JSON or just plain text or HTML format. You can find at the bottom of this page 3 example for CSV, HTML and JSON.

For reference, check the official feeds for Singapore or Netherlands and notice that despite they are all different, they can be ingested by our system.

For the instant air particle counters, you can either report the data via our own web server, or via the thingspeak.

Data ingestion

The World Air Quality Index system will take care of regularly checking the data from the feed, and each time an update is available, it will be processed, converted to the US EPA scale AQI values, and publish on the World Air Quality Index website within minutes.

Also, although only PM2.5, PM10, Ozone, NO2, SO2 and CO Air Quality data is published, the system does collect more pollutants for forecasting purpose: Benzen, Toluene, Ethylbenzene, NOx, THC, NMHC, PM1, Formaldehyde, Mercury, Ammonia, Methane, Hydrogen sulfide, Nitrous acid, Phenol, Naphthalene, paraxylene (p-Xylen), metaxylene (m-Xylen), etc..

It is also possible to publish meteorological data: Temperature, Atmospheric Pressure, Humidity, Precipitation, Wind Speed, Wind Direction, Solar Radiation and UVI. If not provided, we will use other relevant meteorologic information sources.

Feed Example (CSV format)

 #ID: ID_BEI_DC
#City: Beijing
#Station: Dongcheng
#Name: 东城东四
#Latitude: 39.929
#Longitude: 116.417
#Timezone: +0800
Date,PM10,PM25,CO,Ozone,Sulphur Dioxide,Nitrogen Dioxide,AmbientTemperature,RelativeHumidity,WindDirection,WindSpeed,Pressure,RainGauge
Unit,ug/m3,ug/m3,ppm,µg/m3,µg/m3,µg/m3,°C,%,°,m/s,hPa,mm
10/29/2016 13:00,16,3,,58,10,3,32,66,200,3,1001,0
10/29/2016 14:00,19,8,,57,9,4,32,64,197,2,1001,0
10/29/2016 15:00,15,9,,52,47,17,30,72,190,2,1001,0
10/29/2016 16:00,31,19,,52,34,17,30,75,191,2,1001,0
10/29/2016 17:00,31,17,,49,49,19,29,75,194,1,1002,0
10/29/2016 18:00,37,18,,45,55,25,29,73,183,1,1003,0
10/29/2016 19:00,24,13,,40,21,19,29,80,65,1,1004,0
10/29/2016 20:00,39,22,,44,4,16,28,85,7,1,1005,0
10/29/2016 21:00,24,16,,43,3,7,28,85,10,1,1005,0

Feed Example (HTML format)

This is an example based on an HTML format (direct url: publishingdata/html/):

Station list:
Station ID City or County Name Station Name Local name (optional) Latitude/Longitude Timezone (optional)
ID_BEI_DC Beijing Dongcheng 东城东四 39.929/116.417 +0800
ID_BEI_WP Beijing West Park 西城官园 39.929/116.339 +0800
ID_BEI_OP Beijing Olympic Park 朝阳奥体中心 39.982/116.397 +0800
... ... ... ... ... ...
  • The "Station ID" is the unique identifier for each station, and it can just be a number (eg ID8373), or the concatenation of station city and station name (eg. "Beijing/Dongcheng").
  • By default, the station will be available via the url /city/country-name/city-name/station-name.
  • The "Station Name" must use latin characters, so the optional "Local Name" can be provided to localize the webpage.

Real-time pollutant list:
Station ID Pollutant Unit Update time Value Averaging
ID_BEI_DC PM10 mg/m3 2024-10-18T11:00:00+09:0027.8 1 hour
ID_BEI_DC PM25 mg/m3 2024-10-18T11:00:00+09:0010.8 1 hour
ID_BEI_DC Ozone mg/m3 2024-10-18T11:00:00+09:0015.2 1 hour
ID_BEI_DC Ozone mg/m3 2024-10-18T11:00:00+09:0018.2 8 hours
ID_BEI_DC Temperature Celcius 2024-10-18T11:00:00+09:0022.3 1 hour
ID_BEI_WP PM10 mg/m3 2024-10-18T11:00:00+09:0027.8 1 hour
ID_BEI_WP PM25 mg/m3 2024-10-18T11:00:00+09:0010.8 1 hour
ID_BEI_WP SO2 ppb 2024-10-18T11:00:00+09:0015.2 1 hour
ID_BEI_WP Humidiy % 2024-10-18T11:00:00+09:0088 1 hour
... ... ... ... ...
  • The "Averaging" column is use to specify the duration of the value. The most common averaging is 1 hour. It is also the preferred one, as our backend system will automatically do the 8 hour averaging computation for the Ozone and Carbon Monoxide.
  • In the case the readings are provided more frequently than every hour (for instance every 30 minutes or 10 minutes), you can either provide the raw readings for the given period, or just the hourly averaging: Our back-end system will anyway process data even between the hour.

Feed Example (JSON format)

This is an example based on JSON format (direct url: /publishingdata/json/)

..

Quality Control for particle counter sensors

For instant particule counters, such as the Plantower PMS or Nova SDS, which provide instantaneous (in few seconds) particulate matter readings, the data is usually reported every minute. This data is usually computed based on several "averaged" readings from a one or two minute period.

The use of averaging is however not good enough, especially for failing sensors (or sensor close of end-of-life). Therefore, for such sensors, it is required to provide additional metrics, such as the median, min, max, and standard-deviation. See for example the readings object in the below JSON data feed.

..

You can use the following arduino-compatible code to collect those metrics:

class Accumulator 
{ 
    #define OUTPUT_BUFFER_SIZE 120 
    char buffer[OUTPUT_BUFFER_SIZE]; 
 
    #define MAXACCVALUES 120 
    int vals[MAXACCVALUES]; 
 
    int count = 0; 
 
public: 
    Accumulator() 
    { 
        reset(); 
    } 
 
    void reset() 
    { 
        count = 0; 
        for (int i=0;i< MAXACCVALUES;i++)  
        { 
            vals[i]=0; 
        } 
    } 
 
    bool hasData()  
    { 
        return count!=0; 
    } 
 
    std::string output()  
    { 
        if (!hasData()) return std::string("{}"); 
 
        sprintf(buffer, OUTPUT_BUFFER_SIZE, "{\"min\":%d,\"max\":%d,\"median\":%d,\"average\":%.1f,\"stddev\":%.1f,\"count\":%d}",  
            vmin(), vmax(), median(), average(), stddev(), count); 
 
        return std::string(buffer); 
 
    } 
 
    void add(int val) 
    { 
        if (count==MAXACCVALUES-1) { 
          for (int i = 0; i < MAXACCVALUES - 1; i++) { 
            vals[i] = vals[i + 1]; 
            } 
            count --; 
        } 
        vals[count++]=val; 
    } 
 
    float stddev()  
    { 
        if (!hasData()) return -1; 
        int u  =avg(); 
        int t = 0; 
        for (int i=0;ivals[j]) { 
                    float t = vals[j]; 
                    vals[j]=vals[i]; 
                    vals[i]=t; 
                } 
  
            } 
        } 
        return vals[count/2]; 
    } 
 
    float avg()  
    { 
        if (!hasData()) return -1; 
        float t = 0; 
        for (int i=0;ivals[i]) { 
                t=vals[i]; 
            } 
        } 
        return t; 
    } 
 
    float vmax()  
    { 
        if (!hasData()) return -1; 
        float t = vals[0]; 
        for (int i=0;it) { 
                t=vals[i]; 
            } 
        } 
        return t; 
    } 
};

Know any Air Quality station in your surroundings?
Participate with your own air quality monitoring station

Our GAIA air quality monitors are very easy to set up: You only need a WIFI access point and a USB compatible power supply.

Once connected, your real time air pollution levels are instantaneously available on the maps and through the API.

The station comes with a 10-meter water-proof power cable, a USB power supply, mounting equipment and an optional solar panel.

درباره اندازه گیری کیفیت و آلودگی هوا:

درباره سطوح کیفیت هوا

- مقادیر شاخص کیفیت هوا (AQI).سطوح نگرانی سلامت
0 - 50 خوب کیفیت هوا رضایتبخش است و آلودگی هوا کم یا بدون خطر است
51 -100 در حد متوسط کیفیت هوا قابل قبول است با این حال، برای بعضی از آلاینده ها ممکن است نگرانی سلامت متوسط برای تعداد بسیار کمی از افرادی که به طور غیر منتظره ای نسبت به آلودگی هوا حساس هستند، وجود داشته باشد.
101-150 ناسالم برای گروه های حساس سلامتی گروه های حساس ممکن است تحت تاثیر قرار بگیرد.عموم مردم احتمالا تحت تاثیر قرار نخواهند گرفت.
151-200 ناسالم همه ممکن است اثرات آلودگی بر سلامتیشان را احساس کنند؛ اعضای گروه های حساس ممکن است اثرات منفی جدی تری بر سلامتی شان احساس کنند.
201-300 خیلی ناسالم هشدارهای بهداشتی در شرایط اضطراری. کل جمعیت بیشتر احتمال دارد تحت تأثیر قرار گیرد.
300+ خطرناک هشدار سلامت: هرکس ممکن است اثرات جدی سلامتی را تجربه کند

برای اطلاعات بیشتر در مورد کیفیت هوا و آلودگی، موضوع کیفیت هوا در ویکی‌پدیا یا راهنمای airnow برای کیفیت هوا و سلامت شما را بررسی کنید.

برای توصیه های بهداشتی بسیار مفید دکتر پکن ریچارد سنت سیر، وبلاگ www.myhealthbeijing.com را بررسی کنید.


اطلاعیه درمورد شرایط استفاده: تمام اطلاعات کیفیت هوا در زمان انتشار تایید نشده است و با توجه به عدم اطمینان از کیفیت این اطلاعات ممکن است بدون اطلاع قبلی در هر زمانی اصلاح شود. پروژه شاخص کیفیت جهانی هوا با استفاده از تمام مهارت ها و مراقبت های معقول در انتشار محتویات این اطلاعات، تحت هیچ شرایطی شاخص کیفیت جهانی هوا تیم پروژه یا نمایندگان آن برای هر گونه از دست دادن، آسیب یا آسیب ناشی از عرضه اطلاعات مسئولیتی را قبول نمی‌کنند.



Settings


Language Settings:


Temperature unit:
Celcius