Sensor.Community Air Quality Sensor Scraper avatar

Sensor.Community Air Quality Sensor Scraper

Pricing

from $4.52 / 1,000 results

Go to Apify Store
Sensor.Community Air Quality Sensor Scraper

Sensor.Community Air Quality Sensor Scraper

Tap into the Sensor.Community citizen network for live open air readings worldwide. Pull sensor ID, model, location with latitude and longitude, country, PM10, PM2.5, temperature, humidity, and pressure. Filter by country or sensor model for air quality studies and mapping.

Pricing

from $4.52 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ParseForge Banner

🌍 Sensor.Community Air Quality Sensor Scraper

🚀 Export the live Sensor.Community network in seconds. Pull thousands of citizen air sensor readings from a single snapshot covering 70+ countries.

🕒 Last updated: 2026-06-08 · 📊 Up to 25 fields per record · live and hourly windows · global coverage

Turn the Sensor.Community open network into clean, structured measurements you can map, chart, or load into a database. Each run reads a public snapshot of the whole network and returns one record per sensor measurement, with the sensor model, its location, and every reading flattened into named fields like PM10, PM2.5, temperature, humidity, and pressure.

Coverage is the full live network as Sensor.Community publishes it: tens of thousands of measurements in every snapshot, from particulate sensors like the SDS011 to climate sensors like the BME280, spread across more than 70 countries. You can keep the whole world or narrow down to one country or one sensor model.

🎯 Target Audience💡 Primary Use Cases
Air quality researchersBuild a worldwide snapshot of PM10 and PM2.5
Civic tech and open data groupsPower a local air map or dashboard
Data scientists and studentsSource a clean training and analysis set
Environmental journalistsSpot pollution spikes across a region

📋 What the Sensor.Community Air Scraper does

This Actor calls the public Sensor.Community data feed and returns one clean record per measurement:

  • Identity — measurement id, sensor id, sensor model, and manufacturer.
  • Location — latitude, longitude, altitude, country, and an indoor flag.
  • Readings — particulate values P1 (PM10) and P2 (PM2.5), plus temperature, humidity, pressure, noise, CO2, and radiation where the sensor reports them.

Different sensor models report different readings, so fields outside a sensor's scope come back null. A raw values map is also included so no reported value type is ever lost. Every record carries a scrapedAt timestamp.

🎬 Full Demo (🚧 Coming soon)

⚙️ Input

FieldTypeDescription
modeselectWhich snapshot to read. live returns measurements from the last 5 minutes. 1h returns the rolling one hour average per sensor. Defaults to live.
maxItemsintegerHow many records to return. Free plan is capped at 10.
countryselectOptional. Keep only sensors in one country, for example DE or US. Leave blank for worldwide.
sensorTypeselectOptional. Keep only one sensor model, for example SDS011 or BME280. Leave blank for all models.

Example 1 — particulate sensors in Germany

{
"mode": "live",
"country": "DE",
"sensorType": "SDS011",
"maxItems": 100
}

Example 2 — hourly averages worldwide

{
"mode": "1h",
"maxItems": 500
}

⚠️ Good to Know: Each snapshot is a single global file with tens of thousands of measurements. Country and sensor model filters are applied after the snapshot is fetched, so a very specific filter may return fewer rows than your maxItems setting.

📊 Output

Each measurement record looks like this:

FieldDescription
🆔 idMeasurement ID for this reading
🛰 sensorIdSensor ID in the network
🔧 sensorTypeSensor model name (SDS011, BME280, etc.)
🏭 sensorManufacturerSensor manufacturer
📍 locationIdLocation ID in the network
🧭 latitudeLatitude of the sensor
🧭 longitudeLongitude of the sensor
altitudeAltitude in meters
🌍 countryTwo letter country code
🏠 indoorWhether the sensor is indoors
🕒 timestampWhen the measurement was taken
🌫 P1PM10 particulate value
🌫 P2PM2.5 particulate value
🌫 P0PM1 particulate value
🌫 P4PM4 particulate value
🌡 temperatureTemperature in Celsius
💧 humidityRelative humidity percent
🧭 pressureAir pressure in Pascals
🧭 pressureAtSealevelPressure adjusted to sea level
🔊 noiseLAeqAverage noise level
🔊 noiseLAmaxPeak noise level
🔊 noiseLAminMinimum noise level
🟢 co2CO2 in parts per million
☢️ radiationMSIRadiation reading
🗂 valuesRaw map of every reported value type
🕒 scrapedAtCollection timestamp
errorNull on success

Real sample — SDS011 particulate sensor

{
"id": 29598135627,
"sensorId": 146,
"sensorType": "SDS011",
"sensorManufacturer": "Nova Fitness",
"locationId": 45999,
"latitude": 48.808,
"longitude": 9.182,
"altitude": 310.1,
"country": "DE",
"indoor": false,
"timestamp": "2026-06-08 17:35:24",
"P1": 1.1,
"P2": 0.84,
"P0": null,
"P4": null,
"temperature": null,
"humidity": null,
"pressure": null,
"pressureAtSealevel": null,
"noiseLAeq": null,
"noiseLAmax": null,
"noiseLAmin": null,
"co2": null,
"radiationMSI": null,
"values": { "P1": 1.1, "P2": 0.84 },
"scrapedAt": "2026-06-08T17:36:29.652Z",
"error": null
}

Real sample — BME280 climate sensor

{
"id": 29598108762,
"sensorId": 141,
"sensorType": "BME280",
"sensorManufacturer": "Bosch",
"locationId": 65,
"latitude": 48.778,
"longitude": 9.16,
"altitude": 282.5,
"country": "DE",
"indoor": false,
"timestamp": "2026-06-08 17:32:11",
"P1": null,
"P2": null,
"P0": null,
"P4": null,
"temperature": 17.76,
"humidity": 100,
"pressure": 98626.97,
"pressureAtSealevel": 101942.66,
"noiseLAeq": null,
"noiseLAmax": null,
"noiseLAmin": null,
"co2": null,
"radiationMSI": null,
"values": {
"humidity": 100,
"pressure": 98626.97,
"temperature": 17.76,
"pressure_at_sealevel": 101942.66
},
"scrapedAt": "2026-06-08T17:34:34.854Z",
"error": null
}

Real sample — first SDS011 in the run

{
"id": 29598128374,
"sensorId": 140,
"sensorType": "SDS011",
"sensorManufacturer": "Nova Fitness",
"locationId": 65,
"latitude": 48.778,
"longitude": 9.16,
"altitude": 282.5,
"country": "DE",
"indoor": false,
"timestamp": "2026-06-08 17:34:37",
"P1": 0,
"P2": 0,
"P0": null,
"P4": null,
"temperature": null,
"humidity": null,
"pressure": null,
"pressureAtSealevel": null,
"noiseLAeq": null,
"noiseLAmax": null,
"noiseLAmin": null,
"co2": null,
"radiationMSI": null,
"values": { "P1": 0, "P2": 0 },
"scrapedAt": "2026-06-08T17:36:29.588Z",
"error": null
}

✨ Why choose this Actor

  • One clean record per measurement, with readings flattened into named fields.
  • The raw values map keeps every reported value type, so nothing is dropped.
  • Whole network in one snapshot, or filter to one country or one sensor model.
  • No account, no key, and no login required.
  • Stable field names that map cleanly onto a database schema.

📈 How it compares to alternatives

ApproachEffortStructured fieldsFlattened readingsMaintenance
This ActorOne runYesYesNone on your side
Parsing the raw feed yourselfHoursManualManualYou own the upkeep
Copying values by handTediousInconsistentManualConstant

🚀 How to use

  1. Create a free Apify account using this sign-up link.
  2. Open the Sensor.Community Air Quality Sensor Scraper.
  3. Pick a mode (live or 1h).
  4. Optionally set a country and a sensorType, then set maxItems.
  5. Click Start and grab your results when the run finishes.

💼 Business use cases

Air quality monitoring

GoalHow this helps
Track PM10 and PM2.5 across a regionFilter by country and read P1 and P2
Compare indoor and outdoor sensorsUse the indoor flag and location fields

Open data and civic tech

GoalHow this helps
Power a public air mapUse latitude, longitude, and readings per sensor
Refresh a dashboard on a scheduleRe-run the live snapshot at any cadence

Research and analytics

GoalHow this helps
Build an analysis datasetPull a full snapshot with consistent field names
Study sensor coverage by countryGroup records by country and sensor model

Climate and weather

GoalHow this helps
Collect temperature and humidityFilter to BME280 and read climate fields
Track local pressure trendsUse pressure and pressureAtSealevel

🔌 Automating Sensor.Community Air Scraper

Connect runs to the tools you already use:

  • Make and Zapier to trigger runs and route records into sheets or databases.
  • Slack to post a summary when a run finishes.
  • Airbyte to load results into a warehouse.
  • GitHub Actions to schedule periodic snapshots.
  • Google Drive to archive each run's output.

🌟 Beyond business use cases

  • Research: study how air quality varies by location and time.
  • Personal: check sensors near your home and build a tracker.
  • Non-profit: power a community clean air resource.
  • Experimentation: prototype an air data app without writing a scraper.

🤖 Ask an AI assistant

Paste your results into ChatGPT, Claude, Perplexity, or Microsoft Copilot and ask it to rank locations by PM2.5, group sensors by country, or chart pressure across a region.

❓ Frequently Asked Questions

Do I need a Sensor.Community account? No. The Actor reads the public data feed, which needs no login.

Do I need an API key? No key is required.

What is the difference between live and hourly? Live returns measurements from the last 5 minutes. Hourly returns a rolling one hour average per sensor.

Why are some reading fields null? Each sensor model reports only certain values. A particulate sensor returns P1 and P2 but not temperature, so unrelated fields are null. The raw values map shows exactly what each sensor reported.

What do P1 and P2 mean? P1 is PM10 and P2 is PM2.5, the two common particulate matter readings.

Can I filter to one country? Yes. Set the country input to a two letter code such as DE or US.

Can I filter to one sensor model? Yes. Set the sensorType input, for example SDS011 or BME280.

How many measurements are in a snapshot? Each snapshot typically holds tens of thousands of measurements across the whole network.

How fresh is the data? Each run pulls the current public snapshot, so it reflects the network at run time.

Can I schedule this? Yes. Use Apify Schedules to snapshot the network on any cadence.

🔌 Integrate with any app

Results are available through the Apify API, so you can pull them into any app, database, or workflow you already run.

💡 Pro Tip: browse the complete ParseForge collection.

🆘 Need Help? Open our contact form

⚠️ Disclaimer: independent tool, not affiliated with Sensor.Community. Only publicly available data is collected.