Air Quality, AQI, Pollen & UV Scraper (Global) avatar

Air Quality, AQI, Pollen & UV Scraper (Global)

Pricing

from $7.56 / 1,000 air quality results

Go to Apify Store
Air Quality, AQI, Pollen & UV Scraper (Global)

Air Quality, AQI, Pollen & UV Scraper (Global)

Get live air quality for any city or coordinates: US AQI and European AQI with category labels, PM2.5, PM10, ozone, NO2, SO2, CO, dust, pollen and UV, plus forecast and optional 92-day history. Export to JSON, CSV or Excel.

Pricing

from $7.56 / 1,000 air quality results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Air Quality, AQI, Pollen & UV Scraper (Global)

Air Quality, AQI, Pollen & UV Scraper (Global)

Here is one real result, with every field the actor returns (Krakow, Poland, with the history and AI advisory add-ons on):

{
"input": "Krakow, Poland",
"resolvedName": "Krakow",
"country": "Poland",
"admin1": "Lesser Poland",
"latitude": 50.1,
"longitude": 19.9,
"timezone": "Europe/Warsaw",
"elevation": 214,
"observedTime": "2026-08-21T11:00",
"us_aqi": 51,
"usAqiCategory": "Moderate",
"european_aqi": 27,
"euAqiCategory": "Fair",
"dominantPollutant": "PM2.5",
"pm2_5": 13,
"pm10": 17.3,
"ozone": 67,
"nitrogen_dioxide": 15.6,
"sulphur_dioxide": 5.5,
"carbon_monoxide": 207,
"ammonia": null,
"dust": 6,
"aerosol_optical_depth": 0.24,
"uv_index": 3.6,
"uv_index_clear_sky": 5,
"alder_pollen": null,
"birch_pollen": null,
"grass_pollen": null,
"mugwort_pollen": null,
"olive_pollen": null,
"ragweed_pollen": null,
"pollenRisk": null,
"forecastDays": 1,
"forecast": [
{ "time": "2026-08-21T00:00", "us_aqi": 50, "pm2_5": 9.1 },
{ "time": "2026-08-21T01:00", "us_aqi": 50, "pm2_5": 7.4 },
{ "time": "2026-08-21T02:00", "us_aqi": 49, "pm2_5": 7.7 }
],
"historyDays": 92,
"historyStart": "2026-05-21",
"historyEnd": "2026-08-20",
"avgUsAqi": 58.6,
"maxUsAqi": 139,
"avgPm2_5": 13.8,
"maxPm2_5": 26,
"daysExceedingUsAqi100": 1,
"worstDay": "2026-08-06",
"worstDayUsAqi": 139,
"aiRiskLevel": "moderate",
"aiSensitiveGroupsAdvice": "Children, elderly, asthmatics, and pregnant individuals should limit prolonged outdoor exertion.",
"aiOutdoorActivityAdvice": "Outdoor exercise is generally safe but should be limited for sensitive groups.",
"aiMaskRecommended": false,
"aiWindowVentilationAdvice": "Ventilation is acceptable, but consider limiting it during high pollution times.",
"source": "Open-Meteo Air Quality",
"observedAt": "2026-08-21T09:28:59.035Z",
"error": null
}

The most complete air quality scraper available. It returns both the US AQI and the European AQI with human-readable category labels, the dominant pollutant, every major pollutant (PM2.5, PM10, ozone, NO2, SO2, CO, ammonia, dust, aerosol optical depth), UV index, optional European pollen counts, an hourly forecast, and an optional 92-day pollution history, for any city name or coordinate pair on Earth in a single call. Most AQI tools give you one number; this one gives you the full picture plus a forecast.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

Pass a list of locations. Each item can be a plain place name such as Los Angeles, United States or Paris (the actor geocodes it for you at no charge) or a latitude,longitude pair such as 34.05,-118.24. For every location the actor fetches the current air quality and writes one normalized record with:

  • US AQI and European AQI, each with a plain-English category label (Good, Moderate, Unhealthy, and so on).
  • The dominant pollutant driving the highest AQI subindex.
  • Every major pollutant concentration: PM2.5, PM10, ozone, nitrogen dioxide, sulphur dioxide, carbon monoxide, ammonia, dust, aerosol optical depth.
  • UV index (and clear-sky UV index).
  • An optional hourly forecast of US AQI and PM2.5 for up to 7 days.
  • Optional European pollen counts (alder, birch, grass, mugwort, olive, ragweed) plus a pollen risk label.
  • An optional 92-day pollution history summary and an optional AI health advisory.

Missing source values are returned as null, never invented. Numbers are parsed and rounded so you can sort and filter without extra work.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the current air quality and a 2-day forecast for two cities.

{
"locations": ["Los Angeles, United States", "Beijing, China"],
"forecastDays": 2
}

Every field except locations is optional. To add European pollen counts, set includePollen to true. To add the 92-day history and the AI advisory (paid plans), set includeHistory and aiHealthAdvisory to true.

Input reference

FieldTypeRequiredDefaultDescription
locationsstring[]yes(none)Locations to fetch. Each item is a place name (Paris, Los Angeles, United States) or a latitude,longitude pair (34.05,-118.24). Names are geocoded automatically at no charge.
forecastDaysintegerno1Days of hourly US AQI and PM2.5 forecast to include per location (0 to 7). 0 returns only the current snapshot.
includePollenbooleannofalseAdd pollen counts (alder, birch, grass, mugwort, olive, ragweed) and a pollen risk label. Pollen is available for Europe only; elsewhere these fields are null.
includeHistorybooleannofalseAdd-on. Add a 92-day air-quality history summary per location. Billed per location only when a real history series is returned. Paid Apify plans only.
aiHealthAdvisorybooleannofalseAdd-on. Add an AI-written health advisory per location. Billed per location only when a usable advisory is produced. Paid Apify plans only.
maxResultsintegerno10Maximum locations to return in one run. Free Apify plans are capped at 10.

Output reference

One dataset item per location. Types are string, number, integer, boolean, array, or null when a source value is absent.

FieldTypeDescription
inputstringThe location string you passed in.
resolvedNamestringResolved place name from geocoding.
countrystringCountry of the resolved location.
admin1stringState or region of the resolved location.
latitudenumberLatitude used for the query.
longitudenumberLongitude used for the query.
timezonestringIANA timezone of the location.
elevationnumberElevation in meters.
observedTimestringLocal time of the current observation.
us_aqinumberUS Air Quality Index.
usAqiCategorystringUS AQI category: Good, Moderate, Unhealthy for Sensitive Groups, Unhealthy, Very Unhealthy, Hazardous.
european_aqinumberEuropean Air Quality Index.
euAqiCategorystringEuropean AQI category: Good, Fair, Moderate, Poor, Very Poor, Extremely Poor.
dominantPollutantstringPollutant driving the highest AQI subindex.
pm2_5numberFine particulate matter PM2.5 in ug/m3.
pm10numberCoarse particulate matter PM10 in ug/m3.
ozonenumberOzone (O3) in ug/m3.
nitrogen_dioxidenumberNitrogen dioxide (NO2) in ug/m3.
sulphur_dioxidenumberSulphur dioxide (SO2) in ug/m3.
carbon_monoxidenumberCarbon monoxide (CO) in ug/m3.
ammonianumberAmmonia (NH3) in ug/m3 (Europe only).
dustnumberDust concentration in ug/m3.
aerosol_optical_depthnumberAerosol optical depth at 550 nm.
uv_indexnumberUV index.
uv_index_clear_skynumberUV index assuming clear sky.
alder_pollennumberAlder pollen in grains/m3 (pollen add-on, Europe).
birch_pollennumberBirch pollen in grains/m3 (pollen add-on, Europe).
grass_pollennumberGrass pollen in grains/m3 (pollen add-on, Europe).
mugwort_pollennumberMugwort pollen in grains/m3 (pollen add-on, Europe).
olive_pollennumberOlive pollen in grains/m3 (pollen add-on, Europe).
ragweed_pollennumberRagweed pollen in grains/m3 (pollen add-on, Europe).
pollenRiskstringPollen risk label: None, Low, Moderate, High, Very High.
forecastDaysintegerNumber of forecast days requested.
forecastarrayHourly forecast points (time, us_aqi, pm2_5) for the requested window.
historyDaysintegerDays covered by the history summary (history add-on).
historyStartstringFirst day in the history window (history add-on).
historyEndstringLast day in the history window (history add-on).
avgUsAqinumberAverage daily US AQI over the history window (history add-on).
maxUsAqinumberMax US AQI over the history window (history add-on).
avgPm2_5numberAverage daily PM2.5 over the history window (history add-on).
maxPm2_5numberMax daily-average PM2.5 over the history window (history add-on).
daysExceedingUsAqi100integerCount of history days with a max US AQI above 100 (history add-on).
worstDaystringWorst day in the history window (history add-on).
worstDayUsAqinumberMax US AQI on the worst day (history add-on).
aiRiskLevelstringAI-assessed risk level (AI advisory add-on).
aiSensitiveGroupsAdvicestringAI advice for sensitive groups (AI advisory add-on).
aiOutdoorActivityAdvicestringAI outdoor activity advice (AI advisory add-on).
aiMaskRecommendedbooleanWhether the AI recommends a mask (AI advisory add-on).
aiWindowVentilationAdvicestringAI window ventilation advice (AI advisory add-on).
sourcestringData source.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a location that cannot be resolved or fetched, a single item with a populated error field is written and not charged.

Example output record

Real record from a live run (input {"locations": ["Paris, France"], "includePollen": true}):

{
"input": "Paris, France",
"resolvedName": "Paris",
"country": "France",
"latitude": 48.85,
"longitude": 2.35,
"timezone": "Europe/Paris",
"us_aqi": 23,
"usAqiCategory": "Good",
"european_aqi": 18,
"euAqiCategory": "Good",
"dominantPollutant": "PM2.5",
"pm2_5": 4.6,
"grass_pollen": 0.5,
"birch_pollen": 0,
"ragweed_pollen": 2.1,
"pollenRisk": "Low",
"uv_index": 3.1,
"source": "Open-Meteo Air Quality",
"error": null
}

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~air-quality-aqi-pollen-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"locations":["Los Angeles, United States","Beijing, China"],"forecastDays":2}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~air-quality-aqi-pollen-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"locations":["Paris, France"],"includePollen":true}'

Apify CLI:

apify call scrapers_lat/air-quality-aqi-pollen-scraper \
--input '{"locations":["34.05,-118.24"],"forecastDays":3}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

<DATASET_ID> is returned as defaultDatasetId in the run object.

Use cases

  • Air-quality monitoring: track US AQI and European AQI across many cities in one run and alert when a category crosses a threshold.
  • Health and wellness apps: show users a clear air-quality category, the dominant pollutant, UV index, and pollen risk for their location.
  • Real estate and relocation: compare long-term pollution history (92-day average and worst day) between neighborhoods or cities before a move.
  • Insurance risk: feed pollutant and AQI history into environmental and health risk models.
  • Outdoor-event planning: check the AQI and PM2.5 forecast for the days of a race, festival, or match.
  • Agriculture: monitor ozone, dust, and pollen that affect crops and field workers.
  • Environmental compliance: collect pollutant concentrations for reporting and trend analysis.
  • Smart-home automation: drive air purifiers, HVAC, and window automations from live AQI and forecast data.

Billing and limits

This actor uses pay-per-event billing. You are charged only for real results, never for failures.

  • apify-actor-start is charged once when a run starts.
  • result is the primary event, charged once per location for the full air-quality snapshot and forecast.
  • pollution_history is an opt-in add-on (includeHistory), off by default and available to paying users only. It performs a genuine extra fetch (a 92-day history query) and is charged only when a real history series is returned.
  • ai_health_advisory is an opt-in add-on (aiHealthAdvisory), off by default and available to paying users only. It is charged only when the model returns a usable advisory.

See the pricing tab for the current per-event prices.

  • No charge on failure. A location that cannot be resolved or fetched is written as a single item with a populated error field and is not charged. Add-ons are charged only when they genuinely produce data.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 locations per run and cannot use the paid add-ons. Upgrade for higher maxResults and the add-ons.

FAQ and troubleshooting

Can I pass a city name instead of coordinates? Yes. Pass a name like Tokyo or Los Angeles, United States and the actor geocodes it for you at no charge. You can also pass a latitude,longitude pair directly.

Why are the pollen fields null? Pollen data is produced by the European CAMS model and is available for Europe only. Outside Europe the pollen fields are null. Pollen is also only fetched when includePollen is true.

What is the difference between US AQI and European AQI? They are two different indices with different scales and category breakpoints. The US AQI runs roughly 0 to 500; the European AQI runs roughly 0 to 100+. This actor returns both plus their category labels so you can use whichever your audience expects.

How is the dominant pollutant chosen? It is the pollutant with the highest AQI subindex for that location at the observed time (PM2.5, PM10, ozone, NO2, SO2, or CO).

A location returned an error. Was I charged? No. Locations that cannot be resolved or fetched are written with an error field and are not charged.

How current is the data? The observedTime field is the local time of the current observation. Air quality is updated hourly at the source.

Is this an official government tool? No. This actor is independent and reads publicly available air-quality and geocoding data. Use it in accordance with the source terms of service.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with any government air-quality agency. Accesses only publicly available air-quality and geocoding data. Use in accordance with the source terms of service.