# US Restaurant Inspection Monitor: Grades & New Openings (`wallman_3rd/us-food-inspection-monitor`) Actor

Track restaurant health inspections across 7 US cities and counties (NYC, Chicago, San Francisco, Austin, Cincinnati, Boston, Marin) from official open data. One record per establishment with grades, scores and Pass/Fail results, plus change detection for new openings and failed inspections.

- **URL**: https://apify.com/wallman\_3rd/us-food-inspection-monitor.md
- **Developed by:** [Z W](https://apify.com/wallman_3rd) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## US Restaurant Inspection Monitor: Grades, New Openings & Failed Inspections

**US Restaurant Inspection Monitor gives you restaurant and food-service health inspections across seven US cities and counties (New York City, Chicago, San Francisco, Austin, Cincinnati, Boston, and Marin County), pulled from official open data and merged into one deduplicated feed, one record per establishment at its most recent inspection.** It tracks two high-value signals between runs: a **new establishment appearing** (a restaurant that just opened) and a **grade or result change** (an establishment that just failed or was closed). Most inspection scrapers cover one city and dump raw inspection rows. This one covers seven cities in one schema, reduces to one clean record per establishment, and detects what changed.


![Sample output: real US restaurant inspection records](https://api.apify.com/v2/key-value-stores/FhYqkFe80tgK1UZLV/records/food-output-table.svg)

### Where can I get US restaurant health inspection data?

This is a self-serve source of US restaurant inspection data on Apify. It reads publicly available records from official city and county health departments, normalizes each one's format into one consistent schema, keeps one record per establishment at its latest meaningful inspection, and detects changes between runs so you learn the day a restaurant opens or fails an inspection. Each source is health-checked every run: a dataset that stops updating (some city portals silently freeze) is flagged `stale`, so the feed never quietly serves years-old data.

#### Cities and official sources covered

| City | Official source | Outcome format |
|------|-----------------|----------------|
| **New York City** | NYC DOHMH restaurant inspections | Letter grade (A / B / C), critical-violation flag, cuisine, phone, coordinates |
| **Chicago** | Chicago CDPH food inspections | Pass / Fail / Conditional, facility type, coordinates |
| **San Francisco** | SF DPH restaurant inspections | Pass / Conditional Pass / Closure rating, native coordinates |
| **Austin** | Austin Public Health inspection scores | 0-100 hygiene score (coordinates via geocoding) |
| **Cincinnati** | Cincinnati Health Department | Approved / minor / major / closed status, phone, coordinates |
| **Boston** | Boston Inspectional Services (CKAN) | Pass / fail / closed, facility type (coordinates via geocoding) |
| **Marin County (CA)** | Marin County EHS | Colored placard grade (GREEN / YELLOW / RED), coordinates via geocoding |

More cities are added over time as their open data is verified live; a couple of previously listed cities (Dallas, Montgomery County MD, Baton Rouge) are temporarily out because their public datasets stopped updating, and this Actor will not serve stale data as if it were current.

### What data does each record include?

| Field | Description |
|-------|-------------|
| `name` | Establishment / restaurant name |
| `city` | Market: New York City, Chicago, San Francisco, Austin, Cincinnati, Boston, or Marin County |
| `result` | Normalized outcome: `pass`, `conditional`, `fail`, `closed`, `other`, `unknown` |
| `grade` | Letter grade where the city uses one (NYC A/B/C), else null |
| `score` | 0-100 hygiene score where the city publishes one (Austin; higher is better) |
| `critical` | Whether the latest inspection failed or flagged a critical issue |
| `facilityType` | Restaurant, School, Grocery, and so on |
| `cuisine` | Cuisine description (NYC) |
| `latestInspectionDate` | Date of the most recent inspection used |
| `address` | `street`, `city`, `state`, `zip` |
| `coordinates` | Latitude/longitude (NYC, Chicago, and SF publish it; Austin, Boston, and Marin can be filled with geocoding) |
| `phone` | Phone where the city publishes it (NYC, Cincinnati) |

### Who uses restaurant inspection data?

**Restaurant tech and POS companies.** A new establishment appearing is a restaurant about to open that needs a POS, payments, and software. Run this weekly with a `webhookUrl` and get every new opening across all seven cities.

**Food suppliers and distributors.** Track newly opened restaurants in your markets, filter by city and facility type for territory-accurate prospect lists.

**Food-safety consultants and pest control.** A failed or low-grade inspection is a business that needs help now. The `FAILING_INSPECTIONS` output lists every establishment that failed, was closed, or flagged a critical issue.

**Insurance and compliance.** Monitor inspection outcomes and closures across a portfolio of locations.

**Consumer apps, journalists, and researchers.** A clean, geocoded, cross-city inspection dataset for maps, safety features, and food-safety analysis.

### How is this different from a single-city inspection scraper?

- **Seven cities in one consistent schema**, not one.
- **One record per establishment** at its latest meaningful inspection, not thousands of raw violation rows.
- **Change detection** for new openings and grade/result changes, so it works as a monitor, not a one-time dump.
- **Normalized outcome** (`result`) comparable across cities that use letter grades, pass/fail, or numeric scores.
- **Self-heals**: `RUN_HEALTH` flags a source that silently returned zero when it had data last run, or one whose dataset has gone `stale` (stopped updating upstream).

### How to use it

1. Open the **Input** tab.
2. Choose your **cities** (`NYC`, `CHICAGO`, `SF`, `AUSTIN`, `CINCINNATI`, `BOSTON`, `MARIN`).
3. For a recurring feed, turn on **Monitor mode** (`onlyOutputChanges`) and add a `webhookUrl`.
4. To map Austin, Boston, and Marin (which do not publish coordinates), turn on `geocodeMissingCoordinates`.
5. Click **Start**. The first run builds a baseline; every run after it reports only what changed.
6. Download from the **Output** tab as JSON, CSV, or Excel, or pull via the Apify API.

**Free smoke test:** set `testMode: true` to cap every city at 5 rows and skip the snapshot.

### Output

#### Main dataset: establishments

```json
{
  "id": "nyc_50145855",
  "sources": ["nyc"],
  "name": "CHINA RED EXPRESS",
  "city": "New York City",
  "cuisine": "Chinese",
  "facilityType": "Restaurant",
  "address": { "street": "118 CHAMBERS STREET", "city": "Manhattan", "state": "NY", "zip": "10007" },
  "coordinates": { "lat": 40.71518, "lng": -74.00853 },
  "phone": "+12122674015",
  "latestInspectionDate": "2025-04-25",
  "grade": "B",
  "score": null,
  "result": "conditional",
  "critical": true
}
````

#### Change events (Monitor mode + webhook)

Event types: `new_establishment`, `inspection_result_changed`, `updated`, `removed`. Also written to the `CHANGES` key, with `RUN_HEALTH` and `FAILING_INSPECTIONS` (everything failing or closed) on every run. Removals are only reported on an uncapped run (`maxRecordsPerSource: 0`); under the default cap the feed focuses on new openings and result changes.

### Pricing: how much does it cost?

Pay-per-result. Only records written to the dataset are billed. In monitor mode each run bills only the establishments that changed, which is a handful, so a scheduled weekly monitor costs pennies. A full pull scales with the number of establishments; use `maxRecordsPerSource` to bound a first run.

### FAQ

**Where can I get restaurant health inspection data for US cities?**
This Actor. It returns one record per establishment with its latest inspection grade or score across New York City, Chicago, San Francisco, Austin, Cincinnati, Boston, and Marin County.

**How do I find restaurants that just opened?**
Turn on Monitor mode and add a `webhookUrl`. A new establishment appearing in the inspection data is a restaurant that just opened; each is emitted as a `new_establishment` event.

**How do I find restaurants that failed a health inspection?**
Every run writes `FAILING_INSPECTIONS` listing establishments whose latest inspection failed, was a closure, or flagged a critical issue. In monitor mode, a grade or result dropping fires an `inspection_result_changed` event.

**Which cities are covered?**
New York City, Chicago, San Francisco, Austin, Cincinnati, Boston, and Marin County. More cities (many publish inspections on Socrata) are added over time as their data is verified live; request one via the Issues tab.

**What is the difference between grade, score, and result?**
Cities score differently: NYC uses letter grades (A/B/C), Austin uses a 0-100 score, Chicago and San Francisco use pass/fail-style ratings. `result` normalizes all of them into one comparable field (`pass`, `conditional`, `fail`, `closed`).

**Do all records have coordinates?**
NYC, Chicago, and San Francisco publish coordinates directly. For Austin, Boston, and Marin County, turn on `geocodeMissingCoordinates` to fill lat/lng via free OpenStreetMap geocoding, cached across runs.

**Can I get the data as CSV, JSON, or an API?**
Yes: JSON, CSV, or Excel from the Output tab, or via the Apify API.

**Is scraping restaurant inspection data legal?**
It uses only publicly available data published by official city and county health departments. It accesses no private data and bypasses no authentication.

# Actor input Schema

## `cities` (type: `array`):

Cities to include. Currently live: NYC, CHICAGO, SF, AUSTIN, CINCINNATI, BOSTON, MARIN. More are added over time.

## `onlyOutputChanges` (type: `boolean`):

Push only new/changed/removed establishments instead of the full list. The first run builds the baseline; each later run reports only what changed (new openings, grade/result changes).

## `maxRecordsPerSource` (type: `integer`):

Cap on inspection rows read per city, newest-first (rows are reduced to one record per establishment, so establishment count is lower). This captures new openings and recent result changes. Set 0 for a full pull, which also enables closure/removal detection (a capped run cannot tell a real closure from an establishment that simply dropped out of the newest-N window).

## `suppressInitialChanges` (type: `boolean`):

On the first run (no baseline yet), do not emit a 'new' event for every establishment. Leave on to avoid a flood.

## `geocodeMissingCoordinates` (type: `boolean`):

Fill lat/lng for any city that does not publish coordinates, via free OpenStreetMap Nominatim, cached across runs. NYC and Chicago already publish coordinates.

## `maxGeocodePerRun` (type: `integer`):

Cap on new (uncached) geocode lookups per run, to respect Nominatim's rate limit.

## `webhookUrl` (type: `string`):

HTTPS endpoint to receive change events as a POST after each run (fires only when there are changes and a baseline exists).

## `socrataAppToken` (type: `string`):

Optional Socrata app token to raise open-data rate limits on large pulls. Not required for normal runs.

## `testMode` (type: `boolean`):

Cap every city at 5 inspection rows and skip the snapshot. Free smoke test.

## Actor input object example

```json
{
  "cities": [
    "NYC",
    "CHICAGO",
    "SF",
    "AUSTIN",
    "CINCINNATI",
    "BOSTON",
    "MARIN"
  ],
  "onlyOutputChanges": false,
  "maxRecordsPerSource": 2000,
  "suppressInitialChanges": true,
  "geocodeMissingCoordinates": false,
  "maxGeocodePerRun": 500,
  "testMode": false
}
```

# 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 = {
    "cities": [
        "NYC",
        "CHICAGO",
        "SF",
        "AUSTIN",
        "CINCINNATI",
        "BOSTON",
        "MARIN"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wallman_3rd/us-food-inspection-monitor").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 = { "cities": [
        "NYC",
        "CHICAGO",
        "SF",
        "AUSTIN",
        "CINCINNATI",
        "BOSTON",
        "MARIN",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("wallman_3rd/us-food-inspection-monitor").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 '{
  "cities": [
    "NYC",
    "CHICAGO",
    "SF",
    "AUSTIN",
    "CINCINNATI",
    "BOSTON",
    "MARIN"
  ]
}' |
apify call wallman_3rd/us-food-inspection-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=wallman_3rd/us-food-inspection-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Restaurant Inspection Monitor: Grades & New Openings",
        "description": "Track restaurant health inspections across 7 US cities and counties (NYC, Chicago, San Francisco, Austin, Cincinnati, Boston, Marin) from official open data. One record per establishment with grades, scores and Pass/Fail results, plus change detection for new openings and failed inspections.",
        "version": "0.1",
        "x-build-id": "6BEHVXFDlNoRElkya"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/wallman_3rd~us-food-inspection-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-wallman_3rd-us-food-inspection-monitor",
                "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/wallman_3rd~us-food-inspection-monitor/runs": {
            "post": {
                "operationId": "runs-sync-wallman_3rd-us-food-inspection-monitor",
                "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/wallman_3rd~us-food-inspection-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-wallman_3rd-us-food-inspection-monitor",
                "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": {
                    "cities": {
                        "title": "Cities",
                        "type": "array",
                        "description": "Cities to include. Currently live: NYC, CHICAGO, SF, AUSTIN, CINCINNATI, BOSTON, MARIN. More are added over time.",
                        "default": [
                            "NYC",
                            "CHICAGO",
                            "SF",
                            "AUSTIN",
                            "CINCINNATI",
                            "BOSTON",
                            "MARIN"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "onlyOutputChanges": {
                        "title": "Monitor mode: output only changes",
                        "type": "boolean",
                        "description": "Push only new/changed/removed establishments instead of the full list. The first run builds the baseline; each later run reports only what changed (new openings, grade/result changes).",
                        "default": false
                    },
                    "maxRecordsPerSource": {
                        "title": "Max inspection rows per city",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on inspection rows read per city, newest-first (rows are reduced to one record per establishment, so establishment count is lower). This captures new openings and recent result changes. Set 0 for a full pull, which also enables closure/removal detection (a capped run cannot tell a real closure from an establishment that simply dropped out of the newest-N window).",
                        "default": 2000
                    },
                    "suppressInitialChanges": {
                        "title": "Suppress changes on first run",
                        "type": "boolean",
                        "description": "On the first run (no baseline yet), do not emit a 'new' event for every establishment. Leave on to avoid a flood.",
                        "default": true
                    },
                    "geocodeMissingCoordinates": {
                        "title": "Geocode missing coordinates",
                        "type": "boolean",
                        "description": "Fill lat/lng for any city that does not publish coordinates, via free OpenStreetMap Nominatim, cached across runs. NYC and Chicago already publish coordinates.",
                        "default": false
                    },
                    "maxGeocodePerRun": {
                        "title": "Max new geocodes per run",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on new (uncached) geocode lookups per run, to respect Nominatim's rate limit.",
                        "default": 500
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "HTTPS endpoint to receive change events as a POST after each run (fires only when there are changes and a baseline exists)."
                    },
                    "socrataAppToken": {
                        "title": "Socrata app token (optional)",
                        "type": "string",
                        "description": "Optional Socrata app token to raise open-data rate limits on large pulls. Not required for normal runs."
                    },
                    "testMode": {
                        "title": "Test mode",
                        "type": "boolean",
                        "description": "Cap every city at 5 inspection rows and skip the snapshot. Free smoke test.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
