# OpenAQ Air Quality Scraper (`parseforge/openaq-air-quality-scraper`) Actor

Find air quality monitors anywhere by coordinates or country code. Every station carries its name, coordinates, provider, measured pollutants, and latest readings for PM2.5, PM10, ozone, and NO2 with timestamps. Handy for environmental research, public dashboards, and health monitoring.

- **URL**: https://apify.com/parseforge/openaq-air-quality-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🌍 OpenAQ Air Quality Scraper

> 🚀 **Map air quality monitors anywhere in seconds.** One query around London returns 100+ stations with live PM2.5, PM10, NO2, and ozone readings.

> 🕒 **Last updated:** 2026-06-02 · **📊 22 fields** per station · coordinate or country queries · live pollutant readings

Pull air quality monitoring stations and their latest measurements from the OpenAQ global network. Search by coordinates with a radius or by country code, and for every station get its location, provider, the pollutants it tracks, and the most recent readings for PM2.5, PM10, ozone, NO2, SO2, and CO with timestamps.

**Coverage:** the worldwide OpenAQ network of government and research monitors. Pass coordinates (for example "34.0522,-118.2437") with a radius, or a two-letter country code.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Environmental researchers | Study pollution across regions |
| App and dashboard builders | Power live air quality maps |
| Health and safety teams | Trigger alerts on poor air |
| Data scientists | Build air quality datasets |

### 📋 What the OpenAQ Air Quality Scraper does

- Finds monitoring stations near coordinates or within a country.
- Returns 22 structured fields per station, including a full measurements list.
- Joins each sensor to its pollutant, value, units, and timestamp.
- Flattens PM2.5 and PM10 to top-level columns for quick comparison.
- Optionally filters to stations that measure a chosen pollutant.
- Exports to CSV, Excel, JSON, XML, or via API.

### 🎬 Full Demo (_🚧 Coming soon_)

### ⚙️ Input

| Field | Type | Description |
|---|---|---|
| `coordinates` | string | Center point "lat,lon". Returns nearby stations. |
| `radiusKm` | integer | Search radius in km (max 25). |
| `countryCode` | string | Optional. Two-letter ISO code, used when no coordinates are given. |
| `parameter` | string | Optional. Keep only stations measuring this pollutant. |
| `maxItems` | integer | Cap on stations returned. Free plan is limited to 10. |
| `apiKey` | string | OpenAQ API key. A shared key is provided by default. |

**Example 1: by coordinates**
```json
{
  "coordinates": "34.0522,-118.2437",
  "radiusKm": 15,
  "maxItems": 50
}
````

**Example 2: by country, only PM2.5 stations**

```json
{
  "countryCode": "GB",
  "parameter": "pm25",
  "maxItems": 100
}
```

> ⚠️ **Good to Know:** OpenAQ requires a free API key. A shared key ships by default, but for heavy use get your own at explore.openaq.org. Some stations are historical, so check `datetimeLast` for the freshness of each reading. Coordinate queries surface the most active stations.

### 📊 Output

Each record contains the following fields:

| Field | Description |
|---|---|
| 🆔 `locationId` | OpenAQ station ID |
| 📍 `name` | Station name |
| 🏘 `locality` | Locality, when available |
| 🌍 `country` | Country name |
| 🏳 `countryCode` | Two-letter country code |
| 🧭 `latitude` | Latitude |
| 🧭 `longitude` | Longitude |
| 🕓 `timezone` | Station timezone |
| 🏢 `provider` | Data provider |
| 👤 `owner` | Station owner |
| 🚐 `isMobile` | Mobile sensor flag |
| 🖥 `isMonitor` | Reference monitor flag |
| 🔬 `instruments` | Instruments used |
| 🧪 `parameters` | Pollutants the station measures |
| 🟣 `pm25` | Latest PM2.5 reading |
| 🟠 `pm10` | Latest PM10 reading |
| 📈 `measurements` | All latest readings with value, units, and time |
| 🗓 `datetimeFirst` | First data timestamp |
| 🕒 `datetimeLast` | Most recent data timestamp |
| 🔗 `locationUrl` | OpenAQ Explorer page |
| 🕒 `scrapedAt` | Collection timestamp |
| ❌ `error` | Error message, null on success |

**Real sample records:**

```json
{
  "locationId": 146,
  "name": "Southwark A2 Old Kent Road - UKA00558",
  "country": "United Kingdom",
  "countryCode": "GB",
  "latitude": 51.4804989994662,
  "longitude": -0.059550000208953166,
  "provider": "EEA",
  "parameters": ["no2", "pm10", "pm25"],
  "pm25": 5.1,
  "pm10": 19,
  "measurements": [
    { "parameter": "pm10", "displayName": "PM10", "value": 19, "units": "µg/m³", "datetimeUtc": "2026-06-01T00:00:00Z" },
    { "parameter": "no2", "displayName": "NO₂ mass", "value": 6.5025, "units": "µg/m³", "datetimeUtc": "2026-06-02T17:00:00Z" }
  ],
  "datetimeLast": "2026-06-02T17:00:00Z",
  "locationUrl": "https://explore.openaq.org/locations/146",
  "error": null
}
```

```json
{
  "locationId": 148,
  "name": "London Bloomsbury - UKA00211",
  "country": "United Kingdom",
  "countryCode": "GB",
  "latitude": 51.52228999923011,
  "longitude": -0.12588900021133392,
  "provider": "EEA",
  "parameters": ["no2", "o3", "pm10", "pm25", "so2"],
  "pm25": 13.9,
  "pm10": 31.3,
  "measurements": [
    { "parameter": "o3", "displayName": "O₃ mass", "value": 86.6, "units": "µg/m³", "datetimeUtc": "2026-05-26T23:00:00Z" },
    { "parameter": "no2", "displayName": "NO₂ mass", "value": 19.3, "units": "µg/m³", "datetimeUtc": "2026-05-26T23:00:00Z" }
  ],
  "datetimeLast": "2026-05-28T15:00:00Z",
  "locationUrl": "https://explore.openaq.org/locations/148",
  "error": null
}
```

```json
{
  "locationId": 60,
  "name": "Haringey Roadside - UKA00260",
  "country": "United Kingdom",
  "countryCode": "GB",
  "latitude": 51.59929999967941,
  "longitude": -0.06821799979396657,
  "provider": "EEA",
  "parameters": ["no2", "pm25"],
  "pm25": 10,
  "pm10": null,
  "measurements": [
    { "parameter": "no2", "displayName": "NO₂ mass", "value": 26.20125, "units": "µg/m³", "datetimeUtc": "2026-06-02T17:00:00Z" }
  ],
  "datetimeLast": "2026-06-02T17:00:00Z",
  "locationUrl": "https://explore.openaq.org/locations/60",
  "error": null
}
```

### ✨ Why choose this Actor

- **Global reach.** Query any city by coordinates or any nation by code.
- **Joined and clean.** Every sensor is matched to its pollutant, value, units, and time.
- **Quick comparison.** PM2.5 and PM10 are flattened to their own columns.
- **Freshness visible.** `datetimeLast` shows how current each station is.
- **Ready to export.** CSV, Excel, JSON, XML, or API, with a clean table view.

### 📈 How it compares to alternatives

| | OpenAQ Air Quality Scraper | Manual API calls | Generic web scrapers |
|---|---|---|---|
| Sensor to pollutant join | ✅ | ⚠️ Manual | ❌ |
| Coordinate and country search | ✅ | ⚠️ | ❌ |
| Flattened PM2.5 and PM10 | ✅ | ❌ | ❌ |
| Pagination handled | ✅ | ⚠️ | ⚠️ |
| Export to CSV/Excel/JSON/XML | ✅ | ❌ | ⚠️ |

### 🚀 How to use

1. Create a free Apify account using [this sign-up link](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the OpenAQ Air Quality Scraper.
3. Enter `coordinates` with a `radiusKm`, or a `countryCode`, and set `maxItems`.
4. Click **Start** and watch the dataset fill in real time.
5. Export your results as CSV, Excel, JSON, or XML, or pull them via API.

### 💼 Business use cases

**🌫 Environmental monitoring**
| Goal | How |
|---|---|
| Track a city | Query coordinates on a schedule |
| Compare regions | Aggregate by country code |

**🏥 Health and safety**
| Goal | How |
|---|---|
| Alert on spikes | Watch PM2.5 across stations |
| Protect workers | Map nearby monitors to a site |

**📊 Research and analytics**
| Goal | How |
|---|---|
| Build datasets | Collect stations across areas |
| Study trends | Pair readings with timestamps |

**🗺 Apps and dashboards**
| Goal | How |
|---|---|
| Power a map | Use coordinates and latest values |
| Show pollutants | Render the measurements list |

### 🔌 Automating OpenAQ Air Quality Scraper

Connect this Actor to your stack with Apify integrations: **Make**, **Zapier**, **Slack**, **Airbyte**, **GitHub**, and **Google Drive**. Schedule runs and push fresh air quality data into spreadsheets, databases, or alerts.

### 🌟 Beyond business use cases

- **Research:** study pollution patterns across cities and seasons.
- **Personal:** check the air near your home or commute.
- **Non-profit:** support clean air advocacy with open data.
- **Experimentation:** build environmental analytics projects.

### 🤖 Ask an AI assistant

Paste your dataset into [ChatGPT](https://chat.openai.com), [Claude](https://claude.ai), [Perplexity](https://www.perplexity.ai), or [Copilot](https://copilot.microsoft.com) and ask for the cleanest stations, average PM2.5 by area, or pollution hotspots.

### ❓ Frequently Asked Questions

**1. Do I need an API key?**
OpenAQ requires a free key. A shared key ships by default, and you can add your own for heavy use.

**2. How do I search a city?**
Pass `coordinates` as "lat,lon" with a `radiusKm`. Coordinate queries surface the most active stations.

**3. Can I search a whole country?**
Yes. Use `countryCode` with a two-letter ISO code.

**4. What pollutants are covered?**
PM2.5, PM10, ozone, NO2, SO2, CO, and more, depending on each station.

**5. Why is PM2.5 sometimes null?**
That station does not measure PM2.5. Check the `parameters` and `measurements` fields.

**6. How fresh is the data?**
Each station shows `datetimeLast`. Some stations are historical, so this field reveals freshness.

**7. Can I filter by pollutant?**
Yes. Set `parameter` to keep only stations measuring it.

**8. What export formats are supported?**
CSV, Excel, JSON, XML, and API.

**9. Can I run it on a schedule?**
Yes, with Apify Schedules and integrations.

**10. Is there a free option?**
Yes. Free runs are limited to 10 items as a preview. Paid plans unlock up to 1,000,000.

### 🔌 Integrate with any app

Use the Apify API, webhooks, and 5,000-plus integrations to push OpenAQ data into Make, Zapier, Google Sheets, Airtable, databases, and more.

### 🔗 Recommended Actors

- [WAQI Air Quality Scraper](https://apify.com/parseforge/waqi-air-quality-scraper)
- [EPA AQS Air Quality Scraper](https://apify.com/parseforge/epa-aqs-air-quality-scraper)
- [Open-Meteo Weather Scraper](https://apify.com/parseforge/open-meteo-weather-scraper)
- [NOAA Weather Scraper](https://apify.com/parseforge/noaa-weather-scraper)
- [USGS Earthquake Scraper](https://apify.com/parseforge/usgs-earthquake-scraper)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with OpenAQ. Data is provided by the OpenAQ open data platform and its contributors.

# Actor input Schema

## `coordinates` (type: `string`):

Center point as "latitude,longitude" (e.g. "34.0522,-118.2437"). Returns nearby monitoring stations. Takes priority over country.

## `radiusKm` (type: `integer`):

Search radius around the coordinates, in kilometers (max 25).

## `countryCode` (type: `string`):

Optional. Two-letter ISO country code (e.g. "US", "GB", "IN"). Used only when no coordinates are given.

## `maxItems` (type: `integer`):

Free users: limited to 10 items (preview). Paid users: optional, max 1,000,000.

## `parameter` (type: `string`):

Optional. Only return stations that measure this pollutant.

## `apiKey` (type: `string`):

OpenAQ API key. A shared key is provided by default. For heavy use, get your own free key at explore.openaq.org.

## Actor input object example

```json
{
  "coordinates": "34.0522,-118.2437",
  "radiusKm": 12,
  "maxItems": 10,
  "parameter": "",
  "apiKey": "8213f1debd6141434563293544b1ae61c6519f7841b65e8949d9ceb0e87f0b20"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "coordinates": "34.0522,-118.2437",
    "radiusKm": 12,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/openaq-air-quality-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "coordinates": "34.0522,-118.2437",
    "radiusKm": 12,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/openaq-air-quality-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "coordinates": "34.0522,-118.2437",
  "radiusKm": 12,
  "maxItems": 10
}' |
apify call parseforge/openaq-air-quality-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/openaq-air-quality-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OpenAQ Air Quality Scraper",
        "description": "Find air quality monitors anywhere by coordinates or country code. Every station carries its name, coordinates, provider, measured pollutants, and latest readings for PM2.5, PM10, ozone, and NO2 with timestamps. Handy for environmental research, public dashboards, and health monitoring.",
        "version": "0.1",
        "x-build-id": "CGXgyPLXIsKksSuKV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~openaq-air-quality-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-openaq-air-quality-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~openaq-air-quality-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-openaq-air-quality-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~openaq-air-quality-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-openaq-air-quality-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "coordinates": {
                        "title": "Coordinates (lat,lon)",
                        "type": "string",
                        "description": "Center point as \"latitude,longitude\" (e.g. \"34.0522,-118.2437\"). Returns nearby monitoring stations. Takes priority over country."
                    },
                    "radiusKm": {
                        "title": "Radius (km)",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "Search radius around the coordinates, in kilometers (max 25)."
                    },
                    "countryCode": {
                        "title": "Country code (ISO)",
                        "type": "string",
                        "description": "Optional. Two-letter ISO country code (e.g. \"US\", \"GB\", \"IN\"). Used only when no coordinates are given."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: limited to 10 items (preview). Paid users: optional, max 1,000,000."
                    },
                    "parameter": {
                        "title": "Pollutant filter",
                        "enum": [
                            "",
                            "pm25",
                            "pm10",
                            "o3",
                            "no2",
                            "so2",
                            "co",
                            "no",
                            "nox",
                            "bc"
                        ],
                        "type": "string",
                        "description": "Optional. Only return stations that measure this pollutant.",
                        "default": ""
                    },
                    "apiKey": {
                        "title": "OpenAQ API key",
                        "type": "string",
                        "description": "OpenAQ API key. A shared key is provided by default. For heavy use, get your own free key at explore.openaq.org.",
                        "default": "8213f1debd6141434563293544b1ae61c6519f7841b65e8949d9ceb0e87f0b20"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
