# Email Address Validator — Bulk MX, Disposable, Role, Score (`khadinakbar/email-address-validator`) Actor

Fast, cheap email list validator. RFC 5322 syntax, DNS MX lookup, disposable detection (3000+ domains), role & free-provider tagging, did-you-mean typo suggestions, 0–100 deliverability score. No external API key. ~$0.90 per 1,000 emails. MCP-ready.

- **URL**: https://apify.com/khadinakbar/email-address-validator.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, MCP servers, Integrations
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 email validateds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Address Validator — Bulk MX, Disposable, Role & Score

Fast, cheap email list validator. RFC 5322 syntax check, DNS MX lookup, disposable detection (3000+ domains), role/free-provider tagging, did-you-mean typo suggestions, and a 0–100 deliverability score per address. **No external API key required. No third-party paid service in the loop.**

> **At ~$0.90 per 1,000 emails — roughly $1/1K — this is among the cheapest deep-validation actors on Apify, and the only one that does not pass through paid third-party SMTP-verification API costs.**

### What you get per email

| Field | What it tells you |
|---|---|
| `status` | `valid` / `invalid` / `risky` / `unknown` |
| `score` | 0–100 deliverability score |
| `primaryReason` | Single most important reason (e.g., `mx_found`, `mx_not_found`, `disposable_domain`) |
| `isValidSyntax` | Passes RFC 5322 |
| `hasMxRecord` | Domain has live MX records |
| `isFreeProvider` | gmail.com / yahoo.com / outlook.com / icloud.com / 80+ |
| `isRoleBased` | info@, sales@, admin@, postmaster@, … |
| `isDisposable` | mailinator, 10minutemail, temp-mail, … (3000+ domains, kept current) |
| `suggestedEmail` | `jane@gmial.com` → `jane@gmail.com` |
| `mxRecords[]` | Resolved exchanges with priorities |
| `domain`, `localPart`, `normalizedEmail` | Parsed components |
| `validatedAt` | ISO 8601 timestamp |

### What this catches without SMTP

The four classes of bad emails that wreck deliverability — caught with no SMTP probe:

1. **Bad syntax** — `not-an-email`, `joe@`, `@gmail.com`, double dots, length violations.
2. **Dead / non-existent domains** — `jane@thisdomaindoesnotexist.io` (no MX).
3. **Typos on big providers** — `gmial.com`, `yaho.com`, `hotmaill.com` (suggested fix returned).
4. **Disposable / throwaway** — mailinator, 10minutemail, guerrillamail (3000+ domains).

Real-world bounce rates: cleaning a list with these four checks alone typically removes **20–50%** of bounces from purchased / scraped lists. SMTP probes catch maybe 5–15% on top — but only when port 25 is reachable, which it isn't from cloud datacenters.

### When to use

- **Before cold outreach** — drop dead domains, typos, and disposables before they hurt sender reputation
- **Signup form validation** — block disposable accounts, suggest typos to real users
- **CRM cleanup** — score legacy lists for re-engagement vs suppression
- **Lead-gen workflows** — pair with the actors below to validate scraped emails
- **AI agents** — Claude / GPT calls this as a tool before sending email

### Pricing

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Email validated | **$0.0009** (≈ $0.90 per 1,000) |

Among the cheapest validation actors on Apify, with **no external API costs** to inflate the rate.

### Input

```json
{
  "emails": ["jane@example.com", "info@acme.io", "fake@thisdomaindoesnotexist.io"],
  "checkSmtp": false,
  "checkCatchAll": false,
  "concurrency": 10,
  "timeoutMs": 8000
}
````

| Field | Type | Default | Description |
|---|---|---|---|
| `emails` | string\[] | — (required) | One or many addresses to validate |
| `checkSmtp` | boolean | `false` | Live SMTP probe. Usually returns `unknown` from cloud datacenters (AWS port 25 block). Leave off unless self-hosting. |
| `checkCatchAll` | boolean | `false` | Catch-all detection. Requires checkSmtp=true. |
| `concurrency` | int (1–50) | `10` | Parallel validations |
| `timeoutMs` | int (1000–30000) | `8000` | Per-SMTP-connection timeout |

### Sample output

```json
{
  "email": "jane@gmial.com",
  "normalizedEmail": "jane@gmial.com",
  "status": "invalid",
  "score": 5,
  "primaryReason": "mx_not_found",
  "reasons": ["syntax_valid", "typo_suggestion", "mx_not_found"],
  "isValidSyntax": true,
  "hasMxRecord": false,
  "smtpCheck": "skipped",
  "isFreeProvider": false,
  "isRoleBased": false,
  "isDisposable": false,
  "suggestedEmail": "jane@gmail.com",
  "domain": "gmial.com",
  "localPart": "jane",
  "validatedAt": "2026-05-03T20:00:00.000Z"
}
```

### Scoring rubric

| Score | Bucket | Action |
|---|---|---|
| 70+ | `unknown` (MX present, no red flags) → effectively safe | **Send** |
| 55–70 | `risky` — role address, free provider | Review / segment |
| 25 | `risky` — typo suggested but invalid as-is | Replace with suggestedEmail |
| 15 | `risky` — disposable | **Suppress** |
| 0–10 | `invalid` — bad syntax or no MX | **Suppress** |

### Use with other Apify actors

This validator is the **last mile** for any email-producing scraper. Common pairings:

| Source actor | What it produces | Why validate after |
|---|---|---|
| [linkedin-profile-email-scraper](https://apify.com/khadinakbar/linkedin-profile-email-scraper) | LinkedIn profiles + work emails | Catch typos and dead domains |
| [b2b-lead-finder-enrichment](https://apify.com/khadinakbar/b2b-lead-finder-enrichment) | Google Maps + emails | Drop dead-domain emails before outreach |
| [google-maps-leads-scraper](https://apify.com/khadinakbar/google-maps-leads-scraper) | Local business emails | Heavy on info@/contact@ — flag the role addresses |
| [bulk-website-contact-extractor](https://apify.com/khadinakbar/bulk-website-contact-extractor) | Site-scraped contacts | Filter disposable + typo'd domains |
| [contact-details-scraper](https://apify.com/khadinakbar/contact-details-scraper) | Emails, phones, socials | Final hygiene step before CRM ingestion |
| [universal-lead-finder](https://apify.com/khadinakbar/universal-lead-finder) | Any niche+city leads | Score before pushing to outreach tools |

### How it works

```
   Input email
       │
       ▼
1. RFC 5322 syntax + length checks  →  invalid? STOP
       │
       ▼
2. Parse local + domain
       │
       ▼
3. Heuristics in parallel:
     - disposable-email-domains (3000+)
     - role-local list
     - free-provider list (80+ domains)
     - Levenshtein typo suggestions
       │
       ▼
4. DNS MX record lookup  →  no MX? STOP (invalid)
       │
       ▼
5. SMTP probe (opt-in only)
       │
       ▼
6. Score 0–100 + status bucket + reason codes
       │
       ▼
   Dataset
```

### Frequently asked

**Why is `checkSmtp` off by default?**
Apify runs on AWS, which blocks outbound port 25 by default — same as every major cloud (GCP, Azure, Hetzner cloud). SMTP probes from Apify almost always return `unknown`, so we don't waste your time and run cost. The non-SMTP signals already catch the majority of bad addresses.

**Will turning `checkSmtp` on do anything?**
On Apify infrastructure: usually no. The connections will refuse and you'll see `smtpCheck: "unknown"`. If you fork this actor and run it on your own VPS with port 25 unblocked, the SMTP code path works fully (HELO → MAIL FROM → RCPT TO → catch-all probe).

**What domains are on the disposable list?**
The maintained open-source [disposable-email-domains](https://github.com/disposable-email-domains/disposable-email-domains) registry — ~3000 domains including mailinator, 10minutemail, temp-mail, guerrillamail, sharklasers, throwaway, etc. Updated with package upgrades.

**How accurate is this without SMTP?**
For typical purchased / scraped B2B lists, removing addresses with `score < 50` tends to drop the bounce rate to under 5% from a typical 20–40%. It will not catch "valid syntax + valid MX + non-existent mailbox" — that's the SMTP class only.

**Can I use this from Make / Zapier / n8n / Pipedream?**
Yes — call the actor via Apify's REST API or use the Apify integrations directly.

**MCP support?**
Yes. The actor exposes a clean tool description for Claude / GPT / Cursor agents via [Apify MCP](https://mcp.apify.com).

### API usage

#### Apify REST API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~email-address-validator/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "emails": ["jane@example.com"] }'
```

#### JavaScript (Apify Client)

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('khadinakbar/email-address-validator').call({
  emails: ['jane@example.com', 'info@acme.io'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('khadinakbar/email-address-validator').call(run_input={
    'emails': ['jane@example.com', 'info@acme.io'],
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

### Limitations & honesty

- **No live SMTP from Apify.** As noted, AWS blocks outbound port 25. The actor codes for it but you will get `unknown` SMTP results from Apify. Most users do not need SMTP — the four offline checks (syntax, MX, disposable, typo) already catch the bulk of bad addresses.
- **Catch-all detection only works when SMTP works.** Same constraint.
- **No paid API in the loop.** Cheaper, faster, no key juggling, no third-party rate limit. Trade-off: you don't get SMTP confirmations the way ZeroBounce / NeverBounce / MillionVerifier do via their private channels.
- **Datacenter IP DNS.** DNS resolution from Apify is fast and reliable. MX results are authoritative.

### Legal / acceptable use

This actor performs **DNS lookups and (optionally) SMTP RCPT TO probes** — the same protocol-level checks every email server runs to deliver mail. It does not send mail, harvest addresses, or scrape any site. Use it for legitimate list hygiene, signup validation, and CRM cleanup. You are responsible for compliance with your local data-protection laws (GDPR, CAN-SPAM, CASL, etc.) when using validated addresses for outreach.

### Author

Built and maintained by [Khadin Akbar](https://apify.com/khadinakbar) — 48+ production actors for lead gen, social media, ecommerce, and SEO.

***

🤖 Designed for AI agents (Claude, GPT, Cursor, n8n) and humans alike.

# Actor input Schema

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

List of email addresses to validate. Pass a single address as a one-item array. Each entry is normalized to lowercase before validation. Example: \["jane@example.com", "info@acme.io"]. NOT a CSV file path or a domain — supply individual full addresses.

## `checkSmtp` (type: `boolean`):

When true, attempts a live SMTP RCPT TO probe to confirm the mailbox accepts mail. NOTE: most cloud platforms (Apify included, since it runs on AWS) block outbound port 25, so SMTP probes from Apify usually return 'unknown'. The actor still works perfectly without SMTP — syntax + MX + disposable/role/free/typo checks already catch 60–80% of bad addresses. Leave OFF unless you self-host. Default: false.

## `checkCatchAll` (type: `boolean`):

When true and checkSmtp=true, probes a random non-existent address on the same domain to detect catch-all servers. Same cloud-port-25 caveat applies as checkSmtp. Default: false.

## `concurrency` (type: `integer`):

How many emails to validate in parallel. Higher = faster but may hit per-host rate limits and cause 'unknown' SMTP results. Recommended 5–15 for most lists. Maximum 50. Default: 10.

## `timeoutMs` (type: `integer`):

Per-connection timeout for the SMTP probe. Strict mailservers can take 5–10s. Lower values increase 'unknown' verdicts; higher values increase run time. Default: 8000 (8 seconds). Range: 1000–30000.

## Actor input object example

```json
{
  "emails": [
    "test@gmail.com",
    "ceo@apify.com",
    "fake@thisdomaindoesnotexist123.io",
    "admin@10minutemail.com"
  ],
  "checkSmtp": false,
  "checkCatchAll": false,
  "concurrency": 10,
  "timeoutMs": 8000
}
```

# Actor output Schema

## `validationResults` (type: `string`):

One row per validated email — status, score, MX, disposable, role, free, typo suggestion.

## `validationResultsCsv` (type: `string`):

Same dataset exported as CSV — drop into Excel / Sheets / your CRM.

## `summaryFiles` (type: `string`):

Key-value store entries (input payload, summary).

## `publicRunLink` (type: `string`):

No description

## `consoleRunLink` (type: `string`):

No description

## `apiRunLink` (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": [
        "test@gmail.com",
        "ceo@apify.com",
        "fake@thisdomaindoesnotexist123.io",
        "admin@10minutemail.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/email-address-validator").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": [
        "test@gmail.com",
        "ceo@apify.com",
        "fake@thisdomaindoesnotexist123.io",
        "admin@10minutemail.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/email-address-validator").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": [
    "test@gmail.com",
    "ceo@apify.com",
    "fake@thisdomaindoesnotexist123.io",
    "admin@10minutemail.com"
  ]
}' |
apify call khadinakbar/email-address-validator --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Email Address Validator — Bulk MX, Disposable, Role, Score",
        "description": "Fast, cheap email list validator. RFC 5322 syntax, DNS MX lookup, disposable detection (3000+ domains), role & free-provider tagging, did-you-mean typo suggestions, 0–100 deliverability score. No external API key. ~$0.90 per 1,000 emails. MCP-ready.",
        "version": "1.3",
        "x-build-id": "uRh4kFPvNlV3TfhiF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~email-address-validator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-email-address-validator",
                "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/khadinakbar~email-address-validator/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-email-address-validator",
                "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/khadinakbar~email-address-validator/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-email-address-validator",
                "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": [
                    "emails"
                ],
                "properties": {
                    "emails": {
                        "title": "Email addresses",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "List of email addresses to validate. Pass a single address as a one-item array. Each entry is normalized to lowercase before validation. Example: [\"jane@example.com\", \"info@acme.io\"]. NOT a CSV file path or a domain — supply individual full addresses.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkSmtp": {
                        "title": "Run live SMTP probe (experimental)",
                        "type": "boolean",
                        "description": "When true, attempts a live SMTP RCPT TO probe to confirm the mailbox accepts mail. NOTE: most cloud platforms (Apify included, since it runs on AWS) block outbound port 25, so SMTP probes from Apify usually return 'unknown'. The actor still works perfectly without SMTP — syntax + MX + disposable/role/free/typo checks already catch 60–80% of bad addresses. Leave OFF unless you self-host. Default: false.",
                        "default": false
                    },
                    "checkCatchAll": {
                        "title": "Detect catch-all domains",
                        "type": "boolean",
                        "description": "When true and checkSmtp=true, probes a random non-existent address on the same domain to detect catch-all servers. Same cloud-port-25 caveat applies as checkSmtp. Default: false.",
                        "default": false
                    },
                    "concurrency": {
                        "title": "Concurrent validations",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many emails to validate in parallel. Higher = faster but may hit per-host rate limits and cause 'unknown' SMTP results. Recommended 5–15 for most lists. Maximum 50. Default: 10.",
                        "default": 10
                    },
                    "timeoutMs": {
                        "title": "SMTP timeout (milliseconds)",
                        "minimum": 1000,
                        "maximum": 30000,
                        "type": "integer",
                        "description": "Per-connection timeout for the SMTP probe. Strict mailservers can take 5–10s. Lower values increase 'unknown' verdicts; higher values increase run time. Default: 8000 (8 seconds). Range: 1000–30000.",
                        "default": 8000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
