# Email Verifier & List Cleaner — Deliverability Scoring (`commonelements/email-verifier`) Actor

Honest email deliverability scorer for scraped lead lists. Syntax + MX + disposable + role + catch-all detection with a transparent 0-100 score and reasons. Never labels an email 'deliverable' it cannot justify from reliable signals — catch-all and SMTP-blocked emails are honestly marked 'risky' ...

- **URL**: https://apify.com/commonelements/email-verifier.md
- **Developed by:** [Harry Schoeller](https://apify.com/commonelements) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 dataset item scrapeds

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

## Email Verifier & List Cleaner — Honest Deliverability Scoring

**Email verification and bounce checking for scraped lead lists — with a transparent 0-100 score and the reasons behind it.** Clean your list of bad, disposable, role, and catch-all addresses *before* you pay a SaaS verifier (ZeroBounce, NeverBounce, Hunter, Kickbox, Bouncer) for the survivors. Built for lead enrichment and list cleaning pipelines.

Keywords: email verification, email validation, bounce checker, email deliverability, list cleaning, lead enrichment, lead-list cleaner, disposable email detection, role account detection, catch-all detection, MX lookup.

### The honesty thesis

The #1 complaint across lead-gen scrapers (LinkedIn / Apollo / Google Maps, and the Secretary-of-State and license actors in this collection) is that scraped emails **bounce**. The market is full of "verifiers" that return a confident `valid` that bounces anyway.

This actor is built on one rule:

> **It never says `deliverable` unless it can actually justify it from reliable signals. Everything else is honestly labeled `risky` or `unknown` — never a faked `valid`.**

That single rule turns the #1 complaint into the #1 reason for a 5-star review: **no surprise bounces.**

### What is reliable vs. unreliable from a datacenter

This is the spine of the design. Read it before you run anything — it explains exactly what we can and cannot promise.

| Check | Reliable from a datacenter? | Role in the score |
|---|---|---|
| RFC 5322 syntax / normalization | ✅ Fully | Hard gate (fail → `undeliverable`) |
| MX record lookup (DNS) | ✅ Fully | Hard gate (no MX & no A fallback → `undeliverable`) |
| Domain exists (A/AAAA/NS resolves) | ✅ Fully | Hard gate |
| Disposable-domain detection (maintained list) | ✅ Fully | Downgrade to `risky` |
| Role-account detection (info@, sales@, admin@…) | ✅ Fully | Downgrade to `risky` |
| Gibberish / random-string heuristics | ✅ (heuristic, never a hard fail alone) | Score penalty + reason |
| Typo / known-provider misspelling (gmial.com) | ✅ (suggestion only) | Reason + `suggestion` field |
| Catch-all (accept-all) detection | ⚠️ Best-effort SMTP — often inconclusive | Caps confidence; sets `isCatchAll`, downgrades to `risky` |
| **Live SMTP RCPT probing of the mailbox** | ❌ **Unreliable** — port 25 egress is blocked/greylisted from shared datacenter ranges; catch-all domains accept everything; Google/Microsoft refuse or rate-limit | **Can only downgrade or yield `unknown` — NEVER promote to `deliverable`** |

### Why we don't do binary valid/invalid

Most cheap "verifiers" do an SMTP `RCPT` probe from an Apify datacenter IP and return binary `valid` / `invalid`. That fails in two predictable ways:

1. **Datacenter SMTP is unreliable.** Port 25 egress from shared datacenter ranges is routinely blocked, greylisted, or rate-limited. Big providers (Google, Microsoft) refuse or throttle these probes. So a "valid" from that probe is often noise.
2. **Catch-all domains accept everything.** A catch-all (accept-all) domain returns `250 OK` for *any* address — `ceo@`, `asdfqwer@`, anything. A binary verifier marks them all `valid`; then they bounce.

We refuse to launder either of those into a confident `valid`. Instead:

- **SMTP is strictly one-directional.** A hard `5xx` *rejection* is trustworthy → we downgrade to `undeliverable`. A `250` *acceptance* is **ignored** for promotion — it can never make an email `deliverable`.
- **Catch-all caps the result at `risky`** and sets `isCatchAll: true`, because per-mailbox deliverability there is genuinely unknowable.
- **Blocked / greylisted / timeout** → `unknown`. An honest "we don't know" beats a false "valid."

### Status definitions (the honest contract)

- **`deliverable`** — Syntax valid, MX present, NOT disposable, NOT a detected catch-all, and NOT (by policy) a role account. This is "all reliable signals are green." **It is not a delivery guarantee, and we will never label something `deliverable` that we cannot justify from reliable signals.** SMTP is never required to reach this status, and SMTP can never be the thing that grants it.
- **`risky`** — Real-looking but with a known risk: role account, catch-all domain, disposable, gibberish-leaning local part, or a typo suggestion. Send if you want, but expect a lower hit rate / spam-trap risk.
- **`undeliverable`** — A *hard, provable* failure only: bad syntax, no MX **and** no A-record fallback, the domain doesn't resolve, or a trustworthy SMTP `5xx` rejection. We only condemn an email when the failure is provable.
- **`unknown`** — We couldn't determine it: DNS timeout/SERVFAIL, or an SMTP probe that was blocked/greylisted/inconclusive.

### How the score stays honest

Deterministic, capped pipeline — not a black box. Order matters: hard gates first, then deductions, then **caps** that enforce the honesty rule.

````

Start: score = 100, status = "deliverable"

HARD GATES (terminal):
invalid syntax                 -> undeliverable, 0
domain doesn't resolve, no MX  -> undeliverable, 5
DNS errored/timed out          -> unknown, null

DEDUCTIONS:
no MX but A record (fallback)  -> -30
gibberish local part           -> -25
possible provider typo         -> -15  (+ `suggestion`)

DOWNGRADE FLAGS (cap status, never upgrade):
isDisposable                   -> cap "risky", score min 40
isRole (if treatRoleAsRisky)   -> cap "risky", score min 60
isCatchAll                     -> cap "risky", score min 65
isFreeProvider                 -> informational only

SMTP (best\_effort only, one-directional):
5xx rejection                  -> undeliverable, 10   (trustworthy)
250 acceptance                 -> NO promotion        (untrustworthy)
blocked/greylisted/4xx/timeout -> unknown             (if it was deliverable)

FINAL CAP: status can be "deliverable" ONLY if syntax ok AND mx present AND
!isDisposable AND !isCatchAll AND (!isRole || !treatRoleAsRisky) AND no smtp rejection.

````

Every record carries its full `reasons[]`, so you can audit exactly why a score landed where it did.

### Input

Provide **exactly one** of `emails` or `sourceDatasetId`.

```jsonc
{
  // Option A — raw list:
  "emails": ["john@acme.com", "info@acme.com"],

  // Option B — chain off another actor's dataset:
  "sourceDatasetId": "<dataset id>",
  "emailField": "email",                 // dot paths supported (contact.email)
  "passThroughFields": ["name", "company", "phone"],

  "smtpCheck": "off",                     // "off" (recommended) | "best_effort"
  "detectCatchAll": true,
  "deduplicate": true,
  "treatRoleAsRisky": true,
  "concurrency": 50
}
````

### Output (per email)

```jsonc
{
  "email": "info@acme.com",
  "originalEmail": "Info@Acme.com ",
  "status": "risky",
  "score": 55,
  "reasons": ["valid_syntax", "mx_found:aspmx.l.google.com", "role_account:info", "domain_is_catch_all"],
  "mx": ["aspmx.l.google.com", "alt1.aspmx.l.google.com"],
  "isDisposable": false,
  "isRole": true,
  "isCatchAll": true,
  "isFreeProvider": false,
  "suggestion": null,
  "domain": "acme.com",
  "checkedAt": "2026-06-20T00:00:00.000Z"
  // ...any passThroughFields copied here
}
```

A run-level `OUTPUT` key holds counts per status plus the honesty disclaimer.

### Chaining example (lead enrichment)

Run a leads scraper from this collection — e.g. `insurance-license-search` or `sos-entity-search` — then feed its dataset straight in:

```jsonc
{
  "sourceDatasetId": "<the leads run's defaultDatasetId>",
  "emailField": "email",
  "passThroughFields": ["entityName", "phone", "city", "state"]
}
```

The cleaned, scored list comes back joined to each lead, ready to import into your CRM or hand the `deliverable` subset to an outreach tool.

### Pricing (pay per event)

- **$0.004 per email verified** (charged once per unique email after dedup).
- **$0.002 per best-effort SMTP probe** (only when `smtpCheck: "best_effort"` and a probe is actually made).

Cost is decoupled from compute — you pay for results, not runtime. We never charge for inputs rejected at validation or for duplicates collapsed by dedup.

### Notes

- No browser, no proxy, no anti-bot, no login. Pure DNS + string heuristics + maintained lists, with an optional `node:net` SMTP socket.
- The disposable-domain list is vendored in-repo so runs are offline-deterministic.
- Competitor SaaS (ZeroBounce, NeverBounce, Hunter, Kickbox, Bouncer) use warmed dedicated IPs and accept-all intelligence an Apify run cannot replicate — we don't claim parity. Use this to pre-clean cheaply, then pay a SaaS for the survivors if you need deeper SMTP accuracy. (Competitor positioning is from general Apify Store knowledge; verify current ratings before relying on any comparison.)

````

# Actor input Schema

## `emails` (type: `array`):

List of email addresses to verify. Use this OR sourceDatasetId (not both).
## `sourceDatasetId` (type: `string`):

Verify emails from another Actor's dataset (e.g. a leads scraper such as insurance-license-search or sos-entity-search). Provide this + emailField instead of `emails`.
## `emailField` (type: `string`):

Field in the source dataset that holds the email address. Supports dot paths (e.g. contact.email).
## `passThroughFields` (type: `array`):

Fields from the source dataset to copy onto each output record (e.g. name, company), so the cleaned list stays joined to the lead. Supports dot paths.
## `smtpCheck` (type: `string`):

Off (recommended), or best-effort. SMTP from datacenter IPs is unreliable: it can only DOWNGRADE confidence or return 'unknown' — it will NEVER mark an email 'deliverable'. Catch-all domains accept everything.
## `detectCatchAll` (type: `boolean`):

Probe each unique domain once to detect accept-all (catch-all) configuration. Catch-all means per-mailbox deliverability is unknowable; such emails are capped at 'risky'. Uses an SMTP socket on port 25 (may be blocked from datacenter IPs).
## `deduplicate` (type: `boolean`):

Collapse duplicate normalized emails to one charged result.
## `treatRoleAsRisky` (type: `boolean`):

Flag info@/sales@/admin@ etc. as risky (they are real but low-conversion and prone to spam traps).
## `concurrency` (type: `integer`):

Parallel DNS lookups.

## Actor input object example

```json
{
  "emails": [
    "john@acme.com",
    "info@acme.com"
  ],
  "emailField": "email",
  "passThroughFields": [
    "name",
    "company",
    "phone"
  ],
  "smtpCheck": "off",
  "detectCatchAll": true,
  "deduplicate": true,
  "treatRoleAsRisky": true,
  "concurrency": 50
}
````

# 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 = {
    "emails": [
        "john@acme.com",
        "info@acme.com"
    ],
    "passThroughFields": [
        "name",
        "company",
        "phone"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("commonelements/email-verifier").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 = {
    "emails": [
        "john@acme.com",
        "info@acme.com",
    ],
    "passThroughFields": [
        "name",
        "company",
        "phone",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("commonelements/email-verifier").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 '{
  "emails": [
    "john@acme.com",
    "info@acme.com"
  ],
  "passThroughFields": [
    "name",
    "company",
    "phone"
  ]
}' |
apify call commonelements/email-verifier --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=commonelements/email-verifier",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Email Verifier & List Cleaner — Deliverability Scoring",
        "description": "Honest email deliverability scorer for scraped lead lists. Syntax + MX + disposable + role + catch-all detection with a transparent 0-100 score and reasons. Never labels an email 'deliverable' it cannot justify from reliable signals — catch-all and SMTP-blocked emails are honestly marked 'risky' ...",
        "version": "1.0",
        "x-build-id": "RTGzGdE6m7gUSwSf0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/commonelements~email-verifier/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-commonelements-email-verifier",
                "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/commonelements~email-verifier/runs": {
            "post": {
                "operationId": "runs-sync-commonelements-email-verifier",
                "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/commonelements~email-verifier/run-sync": {
            "post": {
                "operationId": "run-sync-commonelements-email-verifier",
                "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": {
                    "emails": {
                        "title": "Emails",
                        "type": "array",
                        "description": "List of email addresses to verify. Use this OR sourceDatasetId (not both).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sourceDatasetId": {
                        "title": "Source dataset ID (chain mode)",
                        "type": "string",
                        "description": "Verify emails from another Actor's dataset (e.g. a leads scraper such as insurance-license-search or sos-entity-search). Provide this + emailField instead of `emails`."
                    },
                    "emailField": {
                        "title": "Email field name",
                        "type": "string",
                        "description": "Field in the source dataset that holds the email address. Supports dot paths (e.g. contact.email).",
                        "default": "email"
                    },
                    "passThroughFields": {
                        "title": "Pass-through fields",
                        "type": "array",
                        "description": "Fields from the source dataset to copy onto each output record (e.g. name, company), so the cleaned list stays joined to the lead. Supports dot paths.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "smtpCheck": {
                        "title": "Best-effort SMTP probe",
                        "enum": [
                            "off",
                            "best_effort"
                        ],
                        "type": "string",
                        "description": "Off (recommended), or best-effort. SMTP from datacenter IPs is unreliable: it can only DOWNGRADE confidence or return 'unknown' — it will NEVER mark an email 'deliverable'. Catch-all domains accept everything.",
                        "default": "off"
                    },
                    "detectCatchAll": {
                        "title": "Detect catch-all domains",
                        "type": "boolean",
                        "description": "Probe each unique domain once to detect accept-all (catch-all) configuration. Catch-all means per-mailbox deliverability is unknowable; such emails are capped at 'risky'. Uses an SMTP socket on port 25 (may be blocked from datacenter IPs).",
                        "default": true
                    },
                    "deduplicate": {
                        "title": "Deduplicate",
                        "type": "boolean",
                        "description": "Collapse duplicate normalized emails to one charged result.",
                        "default": true
                    },
                    "treatRoleAsRisky": {
                        "title": "Treat role accounts as risky",
                        "type": "boolean",
                        "description": "Flag info@/sales@/admin@ etc. as risky (they are real but low-conversion and prone to spam traps).",
                        "default": true
                    },
                    "concurrency": {
                        "title": "DNS concurrency",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Parallel DNS lookups.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
