# US Building Permit Leads Scraper (Socrata) (`devilscrapes/us-building-permit-leads-scraper`) Actor

Pull fresh building and construction permit records from any US city or county Socrata open-data portal. We normalize permit ID, type, status, address, valuation, and contact info into one typed row per permit — ready to feed your contractor CRM or lead pipeline.

- **URL**: https://apify.com/devilscrapes/us-building-permit-leads-scraper.md
- **Developed by:** [DevilScrapes](https://apify.com/devilscrapes) (community)
- **Categories:** Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

<div align="center">
  <img src=".actor/icon.svg" width="160" alt="Devil Scrapes mark" />

## US Building Permit Leads Scraper (Socrata)

**$2.00 / 1 000 results** &nbsp;·&nbsp; pay only for results &nbsp;·&nbsp; no credit card to try

_We do the dirty work so your lead list stays clean._ 😈

Every US city that publishes its building permits on a Socrata open-data portal is handing contractors a pre-CRM buying signal — a homeowner or developer who just pulled a permit is almost certainly shopping for HVAC, roofing, solar, or a dozen other trades. This Actor pulls that signal at scale: pass in one or more Socrata portal + dataset IDs, set a date floor, and get one clean typed row per permit — normalized permit ID, type, status, address, valuation, contractor name, applicant, and lat/long — ready to drop into your CRM, spreadsheet, or outbound sequence.

</div>

---

### 🎯 What this scrapes

US municipal and county building-permit registries published via the **Socrata SODA API** (over 300 US portals at last count, including Chicago, New York, Seattle, Austin, Los Angeles, and dozens of smaller cities). The SODA API returns permit records as structured JSON rows — this Actor normalises the common fields that matter for contractor lead-gen and passes through every city-specific field in an `extra` dict, so you never lose data even when the schemas diverge.

Verified against: Chicago (data.cityofchicago.org / ydr8-5enu), with the same logic applicable to any Socrata-hosted permit dataset.

### 🔥 What we handle for you

- 🛡️ **Proxy rotation via Apify Proxy** — we absorb transient 429s and routing failures so your run completes even when a portal throttles a single IP.
- 🔁 **Retries with exponential backoff** on `429 / 503` and network errors — up to 5 attempts per request, `Retry-After` header honoured.
- 🧊 **Normalized, typed dataset rows** — Pydantic-validated, ISO-8601 dates, stable field names across all city schemas, JSON / CSV / Excel export from the Apify Console.
- 🗺️ **Multi-city in a single run** — pass an array of `{domain, datasetId}` objects and we fan out across all portals, respecting `maxItemsPerDataset` per source.
- 💰 **Pay-Per-Event pricing** — you pay only for permit records that land in your dataset. No data, no charge (beyond the small actor-start fee).

### 💡 Use cases

- **HVAC / roofing / solar contractor lead lists** — filter by permit type (new construction, re-roof, HVAC installation) and harvest the applicant or contractor contact frame for outbound sales.
- **Contractor-lead resellers** — run nightly on multiple city datasets, normalize to a single schema, and deliver fresh permit leads to clients via the Apify API or webhook.
- **Valuation monitoring** — pull permits above a dollar threshold in a target ZIP code to watch development activity in a neighborhood.
- **Construction analytics** — aggregate permit counts by type, date, and district to report on building-activity trends for real-estate investors or municipalities.
- **CRM enrichment pipeline** — match permit applicant names or addresses against your existing contact records to surface warm leads before the competition does.

### ⚙️ How to use it

1. Click **Try for free** at the top of the page.
2. In the **Socrata datasets** field, enter the list of portal + dataset pairs you want to scrape. The default pre-fills Chicago building permits as a working example.
3. Optionally set **Issued after** to a date (e.g. `2024-01-01`) to only pull recent permits.
4. Set **Max items per dataset** — `1000` is the default; use `0` for all available records (very large datasets can run for several minutes).
5. Click **Start**. Results stream into the run's dataset in real time.
6. Export from **Storage → Dataset** as JSON, CSV, or Excel — or call the dataset via the Apify API.

**Finding a new city's dataset ID:** go to [data.cityofchicago.org](https://data.cityofchicago.org) (or your target city's Socrata domain), search for "building permits", open the dataset, and grab the four-by-four ID from the URL (e.g. `ydr8-5enu`).

### 📥 Input

| Field | Type | Required | Default | Notes |
|---|---|:--:|---|---|
| `datasets` | `array` | **yes** | Chicago example | List of `{domain, datasetId, label?}` objects |
| `issuedAfter` | `string` | no | `""` | ISO-8601 date floor on `issue_date` |
| `soqlWhere` | `string` | no | `""` | Raw SoQL `$where` override (overrides `issuedAfter`) |
| `maxItemsPerDataset` | `integer` | no | `1000` | Per-dataset record cap; `0` = unlimited |
| `proxyConfiguration` | `object` | no | Apify Proxy enabled | Proxy settings — Apify Proxy by default |

#### Example input

```json
{
  "datasets": [
    {
      "domain": "data.cityofchicago.org",
      "datasetId": "ydr8-5enu",
      "label": "Chicago"
    }
  ],
  "issuedAfter": "2024-01-01",
  "maxItemsPerDataset": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

### 📤 Output

Each row is one building permit record. Common fields are normalized; city-specific extras land in `extra`.

| Field | Type | Notes |
|---|---|---|
| `source_domain` | `string` | Portal hostname |
| `dataset_id` | `string` | Socrata dataset ID |
| `source_label` | `string\|null` | Human label from input |
| `permit_id` | `string\|null` | Permit number |
| `permit_type` | `string\|null` | e.g. "PERMIT - NEW CONSTRUCTION" |
| `status` | `string\|null` | e.g. "permit issued" |
| `work_description` | `string\|null` | Free-text work description |
| `issue_date` | `string\|null` | ISO-8601 or raw string |
| `application_date` | `string\|null` | Application submission date |
| `address` | `string\|null` | Best-effort assembled full address |
| `street_number` | `string\|null` | Street number |
| `street_name` | `string\|null` | Street name |
| `city` | `string\|null` | City name |
| `state` | `string\|null` | Two-letter state code |
| `postal_code` | `string\|null` | ZIP code |
| `valuation` | `float\|null` | Project valuation in USD |
| `fee_paid` | `float\|null` | Building fee paid in USD |
| `contractor_name` | `string\|null` | Licensed contractor name |
| `contractor_license` | `string\|null` | Contractor license number |
| `applicant_name` | `string\|null` | Applicant name |
| `latitude` | `float\|null` | WGS-84 latitude |
| `longitude` | `float\|null` | WGS-84 longitude |
| `extra` | `object\|null` | All unmapped city-specific fields |

#### Example output row

```json
{
  "source_domain": "data.cityofchicago.org",
  "dataset_id": "ydr8-5enu",
  "source_label": "Chicago",
  "permit_id": "100987654",
  "permit_type": "PERMIT - NEW CONSTRUCTION",
  "status": "permit issued",
  "work_description": "ERECT A 2-STORY SINGLE FAMILY RESIDENCE",
  "issue_date": "2024-03-15",
  "application_date": "2024-01-10",
  "address": "1234 N MAIN ST, Chicago, IL 60614",
  "street_number": "1234",
  "street_name": "MAIN",
  "city": "Chicago",
  "state": "IL",
  "postal_code": "60614",
  "valuation": 350000.0,
  "fee_paid": 1850.0,
  "contractor_name": "ABC CONSTRUCTION LLC",
  "contractor_license": "LIC-2024-001",
  "applicant_name": "Jane Smith",
  "latitude": 41.9021,
  "longitude": -87.6346,
  "extra": {
    "review_type": "STANDARD PLAN EXAMINATION",
    "reported_cost": "350000"
  }
}
```

### 💰 Pricing

**$2.00 per 1 000 permit records.**

A typical city dataset has 50 000–500 000 permit rows. A run pulling 10 000 records costs roughly $0.20 — cheaper than manually downloading and normalizing a CSV. You pay only for records that land in your dataset; a failed or empty run charges only the small `actor-start` event.

| Event | Cost |
|---|---|
| Actor start | $0.03 (one-time per run) |
| Per result emitted | $0.002 |

### 🚧 Limitations

- **Socrata schema divergence** — every city publishes slightly different column names. The Actor maps the most common field names (Chicago, Seattle, LA, etc.) but may miss aliases in less common portals. Unknown columns land in `extra`.
- **Rate limits** — Socrata portals are publicly throttled. Very large pulls (`maxItemsPerDataset=0` on a 500k-row dataset) may be paced across multiple pages; expect runs of 5–15 minutes for large datasets.
- **Authentication not supported** — all supported portals require no API key on the public endpoints. Portals behind Socrata auth tokens are not currently supported.
- **Not all US cities use Socrata** — some municipalities use custom permit portals, Tyler Munis, or Accela. This Actor covers Socrata-hosted datasets only.

### ❓ FAQ

**How do I find a city's Socrata dataset ID?**
Navigate to the city's open-data portal (e.g. `data.cityofchicago.org`), search "building permits", and open the dataset. The four-by-four ID (e.g. `ydr8-5enu`) appears in the URL after `/resource/`.

**Can I scrape multiple cities at once?**
Yes — add multiple objects to the `datasets` array. The Actor fans out and writes all results into a single dataset, tagged with `source_domain` and `source_label` so you can filter by city downstream.

**Does this require a Socrata API key?**
No. All supported portals serve permit data without authentication on the public SODA endpoint.

**Can I filter by permit type or contractor?**
Use the `soqlWhere` field with a SoQL expression, e.g. `permit_type='PERMIT - NEW CONSTRUCTION'` or `contractor_name IS NOT NULL`. The SoQL syntax is documented at [dev.socrata.com](https://dev.socrata.com/docs/queries/).

**What if a column I need isn't in the output fields?**
It will be in the `extra` dict. Every raw field the portal returns is preserved there — nothing is dropped.

### 📬 Your feedback

Found a city whose permit schema we're not mapping well, or a Socrata portal that isn't working? Open an issue or leave a review on the [Apify Store listing](https://apify.com/DevilScrapes/us-building-permit-leads-scraper). We read every message and typically ship fixes within a week.

***

### Changelog

- **0.0.1** — initial scaffold (boot test only; real Socrata fetch coming in 0.1.0)

# Actor input Schema

## `datasets` (type: `array`):

List of Socrata portal + dataset pairs to scrape. Each entry: <code>{"domain": "data.cityofchicago.org", "datasetId": "ydr8-5enu", "label": "Chicago"}</code>. <code>label</code> is optional.

## `issuedAfter` (type: `string`):

Only return permits with <code>issue\_date >= this value</code>. ISO-8601 date string, e.g. <code>2024-01-01</code>. Leave blank for all dates.

## `soqlWhere` (type: `string`):

Advanced: raw SoQL <code>$where</code> clause appended to the query. Overrides <code>issuedAfter</code> if set. Example: <code>permit\_type='PERMIT - EASY PERMIT PROCESS'</code>.

## `maxItemsPerDataset` (type: `integer`):

Maximum number of permit records to fetch per dataset. Set to <code>0</code> for all available records (may be very large).

## `proxyConfiguration` (type: `object`):

Socrata portals are public but may rate-limit aggressive polling. Apify Proxy with rotating sessions absorbs transient 429s so your run completes cleanly.

## Actor input object example

```json
{
  "datasets": [
    {
      "domain": "data.cityofchicago.org",
      "datasetId": "ydr8-5enu",
      "label": "Chicago"
    }
  ],
  "issuedAfter": "",
  "soqlWhere": "",
  "maxItemsPerDataset": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Full set of scraped permit records — one item per permit. Streamed JSON via the Apify dataset API.

## `datasetItemsCsv` (type: `string`):

Same data, CSV export. Drop straight into a spreadsheet or CRM import.

## `datasetView` (type: `string`):

Open the run's dataset in the Console with the Overview view applied.

# 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 = {
    "datasets": [
        {
            "domain": "data.cityofchicago.org",
            "datasetId": "ydr8-5enu",
            "label": "Chicago"
        }
    ],
    "maxItemsPerDataset": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("devilscrapes/us-building-permit-leads-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 = {
    "datasets": [{
            "domain": "data.cityofchicago.org",
            "datasetId": "ydr8-5enu",
            "label": "Chicago",
        }],
    "maxItemsPerDataset": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("devilscrapes/us-building-permit-leads-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 '{
  "datasets": [
    {
      "domain": "data.cityofchicago.org",
      "datasetId": "ydr8-5enu",
      "label": "Chicago"
    }
  ],
  "maxItemsPerDataset": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call devilscrapes/us-building-permit-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=devilscrapes/us-building-permit-leads-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Building Permit Leads Scraper (Socrata)",
        "description": "Pull fresh building and construction permit records from any US city or county Socrata open-data portal. We normalize permit ID, type, status, address, valuation, and contact info into one typed row per permit — ready to feed your contractor CRM or lead pipeline.",
        "version": "0.1",
        "x-build-id": "I1RtMdQ8hvR8HbFG1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/devilscrapes~us-building-permit-leads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-devilscrapes-us-building-permit-leads-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/devilscrapes~us-building-permit-leads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-devilscrapes-us-building-permit-leads-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/devilscrapes~us-building-permit-leads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-devilscrapes-us-building-permit-leads-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",
                "required": [
                    "datasets"
                ],
                "properties": {
                    "datasets": {
                        "title": "Socrata datasets",
                        "type": "array",
                        "description": "List of Socrata portal + dataset pairs to scrape. Each entry: <code>{\"domain\": \"data.cityofchicago.org\", \"datasetId\": \"ydr8-5enu\", \"label\": \"Chicago\"}</code>. <code>label</code> is optional."
                    },
                    "issuedAfter": {
                        "title": "Issued after (date)",
                        "type": "string",
                        "description": "Only return permits with <code>issue_date &gt;= this value</code>. ISO-8601 date string, e.g. <code>2024-01-01</code>. Leave blank for all dates.",
                        "default": ""
                    },
                    "soqlWhere": {
                        "title": "SoQL $where override",
                        "type": "string",
                        "description": "Advanced: raw SoQL <code>$where</code> clause appended to the query. Overrides <code>issuedAfter</code> if set. Example: <code>permit_type='PERMIT - EASY PERMIT PROCESS'</code>.",
                        "default": ""
                    },
                    "maxItemsPerDataset": {
                        "title": "Max items per dataset",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of permit records to fetch per dataset. Set to <code>0</code> for all available records (may be very large).",
                        "default": 1000
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Socrata portals are public but may rate-limit aggressive polling. Apify Proxy with rotating sessions absorbs transient 429s so your run completes cleanly.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
