Sensor.Community Air Scraper
parseforge/sensor-community-air-scraper
Developer toolsOther
Scrapes live and hourly air quality measurements from the Sensor.Community network. Returns flat rows with sensor ID, coordinates, timestamp, and pollutant values, filterable by country and sensor type.
- Total users
- 2
- Monthly active
- 1
- Total runs
- 62
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 12 days ago
Overview
Sensor.Community Air Scraper
Scrape live air quality measurements from the Sensor.Community network, worldwide or filtered by country and sensor type. Every reading includes particulate matter, temperature, humidity, and more, with sensor coordinates and timestamps. Export to CSV, JSON, Excel, or XML.
Sensor.Community publishes open air quality data from thousands of citizen-run stations, but there is no bulk download for a specific region or sensor model. This Actor reads the public live and hourly snapshots directly, filters them by country or sensor type, and returns each measurement as a flat row. No API key or registration is needed.
| Who uses it | What they scrape Sensor.Community for |
|---|---|
| Environmental researchers | Build datasets of PM2.5 and PM10 readings for a city or region over time. |
| Citizen science groups | Monitor the health of their local sensor network and spot faulty stations. |
| App developers | Feed live air quality data into maps, dashboards, or alerting systems. |
| Urban planners | Compare pollution levels across neighborhoods to prioritize interventions. |
What it does
This Actor collects air quality measurements from the Sensor.Community network and returns each one as a flat row with sensor metadata and pollutant values.
- ๐ Global coverage: pull measurements from every Sensor.Community station in one run.
- โฑ๏ธ Live or hourly: choose the last 5 minutes of readings or the rolling 1 hour average per sensor.
- ๐ Filter by country: keep only sensors in one of 60+ countries, from Germany to Japan.
- ๐ก Filter by sensor type: isolate particulate matter (SDS011), temperature/humidity (BME280), CO2 (SCD30), noise, or radiation sensors.
- ๐ Flat output: every measurement is one row with sensor ID, coordinates, timestamp, and all pollutant values.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with Sensor.Community data
๐ซ๏ธ Track urban air pollution.
A researcher pulls hourly PM2.5 and PM10 readings for all SDS011 sensors in Berlin to map pollution hotspots and validate a dispersion model.
๐ Build a local air quality alert.
A developer runs the Actor every 5 minutes for a city, filters for PM sensors, and pushes readings above a threshold to a Telegram channel.
๐ Monitor sensor network health.
A citizen science coordinator collects daily measurements from all stations in their country and flags sensors that stop reporting or show implausible values.
๐ก๏ธ Compare microclimates.
An urban planner gathers temperature and humidity data from BME280 sensors across neighborhoods to identify urban heat islands.
Why choose this scraper
| What you get | |
|---|---|
| No API key | Reads the public Sensor.Community archive directly, no registration or rate limits. |
| One fixed schema | Every measurement, regardless of sensor model, lands in the same flat structure. |
| Filter before export | Country and sensor type filters run on the snapshot, so your dataset only has what you need. |
| Scales to a million rows | Collect up to 1,000,000 measurements in a single run for large studies. |
How it compares
No other Store actor targets Sensor.Community the same way, so the honest comparison is with the alternatives teams actually weigh.
| Sensor.Community Air Scraper | Build it in-house | By hand | |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Sensor.Community changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |
Configure the run
Drive the Actor with a data window (live or hourly), an optional country, and an optional sensor type, and set a maximum number of measurements per run. The Input tab lists every parameter.
A first run with the defaults:
{
"maxItems": 10
}
A larger pull:
{
"maxItems": 200
}
Pricing
Pay-per-result: $0.01 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $1.00 |
| 1,000 results | $10.00 |
| 10,000 results | $100.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Sensor.Community Air Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to Sensor.Community through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/sensor-community-air-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Your filters may be too narrow. Try setting country to 'Any country' and sensor type to 'Any sensor type', then increase the maximum measurements. Also check that the selected data window has recent data.
Why are some sensor values missing?
Not every sensor reports all pollutants. A particulate sensor like SDS011 will not have temperature or humidity, and a BME280 will not have PM values. Missing fields are left empty in the output.
The run takes a long time.
The Actor fetches the full snapshot before filtering. If you only need a few sensors, set a lower maximum measurements or narrow the country filter to reduce processing time.
I see duplicate sensor IDs.
A sensor can report multiple measurements within the same window, for example every 5 minutes in live mode. Each row is a distinct measurement with its own timestamp, so duplicates are expected.
FAQ
| Question | Answer |
|---|---|
| What is Sensor.Community? | Sensor.Community is a global network of citizen-run environmental sensors that openly publish air quality data such as particulate matter, temperature, humidity, and noise. |
| Do I need an API key? | No. The Actor reads the public data snapshots directly from the Sensor.Community archive, so no registration or key is required. |
| What is the difference between live and hourly average? | Live mode returns every measurement reported in the last 5 minutes. Hourly average mode returns the rolling 1 hour average per sensor, which smooths out short-term spikes. |
| Can I filter by country? | Yes. Choose from over 60 countries in the input, or leave it as 'Any country' to get worldwide readings. |
| Can I filter by sensor type? | Yes. You can select a specific model such as SDS011 for particulate matter, BME280 for temperature and humidity, SCD30 for CO2, or DNMS for noise. |
| How many measurements can I get in one run? | You can set the maximum up to 1,000,000 measurements per run. The actual number depends on how many sensors match your filters. |
| What data fields are returned? | Each row includes the sensor ID, location coordinates, timestamp, sensor type, and the measured values such as PM2.5, PM10, temperature, humidity, and pressure, depending on the sensor model. |
| How often should I run the Actor? | For live monitoring, schedule it every 5 to 10 minutes. For historical trends, run it hourly or daily and store the results in a dataset. |
| Can I export the data? | Yes. The Actor outputs a dataset that you can export to CSV, JSON, Excel, or XML from the Apify platform. |
| Is the data free to use? | Sensor.Community data is openly published for public use. Check their website for the exact license terms. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Sensor.Community. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| mode | string (2 options) | Which Sensor.Community snapshot to read. 'Live' returns every measurement reported in the last 5 minutes. 'Hourly average' returns the rolling 1 hour average per sensor. | live |
| maxItems | integer | How many measurements to collect per run. | 10 |
| country | string (65 options) | Optional. Keep only measurements from sensors in this country. Leave as 'Any country' to return readings worldwide. | not set |
| sensorType | string (32 options) | Optional. Keep only measurements from this sensor model, for example SDS011 for particulate matter or BME280 for temperature, humidity, and pressure. Leave as 'Any sensor type' for all models. | not set |
Pricing
from $4.52 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.00452 to $0.005 |
| result details | Detailed result with additional fields. | $0.00905 to $0.01 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~sensor-community-air-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"helloWorld": 123
}' Examples
Input that runs as-is.
{
"helloWorld": 123
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
