# Local Business Website Audit — Lead-Readiness Scanner (`signalengine/lead-readiness-auditor`) Actor

Audit local business websites for lead-readiness — contact form, click-to-call, live chat, booking, mobile, HTTPS — and get a graded, sales-ready lead list. Paste sites or give a niche + city.

- **URL**: https://apify.com/signalengine/lead-readiness-auditor.md
- **Developed by:** [James Taylor](https://apify.com/signalengine) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 audits

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

## Local Business Website Audit — Lead-Readiness Scanner

This **local business website audit** scores how well a local business's homepage is set up to *catch leads* — and hands you back a graded, sales-ready hit-list. Point it at a list of sites, or give it a **niche + location** and it discovers the businesses for you, then grades each one: a 0–100 **score**, an A–F **grade**, a ranked list of what's **missing**, and a one-line **headline** naming the single biggest gap — phrased so you can drop it straight into an outreach email.

It's built for digital agencies, web designers, marketers, freelancers and SEO consultants who want to **find local business leads** that are visibly leaking enquiries — and walk in already knowing what to fix.

### Why lead-readiness, not a generic Lighthouse audit

Most website audit tools on the Store are Lighthouse clones: they hand you a wall of performance metrics, render-blocking scripts and accessibility nits. None of that tells you whether the business is *losing money*. This is a **website audit tool for agencies** that scores the thing agencies actually get paid to fix: lead capture.

It checks whether a homepage gives a visitor any way to become a lead — a contact form, click-to-call, live chat, online booking, a mobile experience that works — and weights those signals heaviest. A site can ace Lighthouse and still score an **F** here because there's no way to contact the business. That gap *is* the pitch. The output is a list you can act on today, not a report you have to interpret.

### What it does

- Audits a local business's **public homepage** (one page, no crawl) and scores its **lead-readiness** 0–100.
- Returns an **A–F grade**, a ranked **`missing`** list, and a single agency-ready **`headline`** calling out the biggest gap.
- Detects seven signals: **contact form, click-to-call, live chat, online booking, mobile-optimised, HTTPS, and meta description.**
- Pulls each business's public **contact email and phone** and a best-effort **business name** from the page.
- Two ways in: grade a **list of sites** you already have, **and/or** give it a **niche + location** and it discovers local businesses via Google search, then grades them. Use either — or both in one run.
- A **`maxScore` hit-list filter** so you can return *only* the weak sites — a ready-made prospect list of businesses doing it badly.

### Who it's for

- **Digital & marketing agencies** sourcing local prospects who are demonstrably losing leads — and opening with the fix.
- **Web designers & freelancers** finding sites that need a contact form, booking widget or mobile rebuild.
- **SEO consultants** layering lead-capture gaps on top of an organic pitch.
- **Sales teams** building an outbound list where every row comes with a graded, quotable reason to reach out.

### Input

Provide **`sites`**, or **`niche` + `location`**, or both. With neither, the run stops with a clear "nothing to audit" error.

| Field | Type | Default | Description |
|---|---|---|---|
| `sites` | array | `[]` | Sites to grade. Each item is a URL string or a `{name, website}` object. Use this, `niche`+`location`, or both. |
| `niche` | string | `""` | Business type to discover, e.g. `"dentists"`. Needs `location`. |
| `location` | string | `""` | City/area to discover in, e.g. `"Leeds"`. Needs `niche`. |
| `maxResultsPerQuery` | integer | `20` | How many businesses to discover per `niche`+`location` query (1–50). |
| `maxSites` | integer | `100` | Hard cap on total sites **output/charged** in the run (1–1000) — caps your spend. With a `maxScore` filter, more sites may be fetched than output, but you're only charged per output. |
| `maxScore` | integer | `100` | **Hit-list filter.** Only output sites scoring **≤ this**. `100` = output everything; lower it (e.g. `55`) to return only weak sites = ready leads. |
| `searchEngine` | string | `"google"` | Discovery engine: `google` or `bing`. Google is default and auto-falls back to Bing if it returns nothing. |
| `maxConcurrency` | integer | `5` | Parallel site fetches (1–10). |
| `proxyConfiguration` | object | `GOOGLE_SERP` | Defaults to Apify's GOOGLE_SERP proxy for discovery; also used as a residential fallback when a homepage blocks the direct fetch. |

#### Example input

**Grade a list of sites you already have** (sites mode):

```json
{
  "sites": [
    { "name": "Bright Smile Dental", "website": "brightsmiledental.co.uk" },
    "https://example.com",
    "acmeplumbing.co.uk"
  ]
}
````

**Find and grade local businesses by niche + city** (discovery mode), keeping only the weak ones:

```json
{
  "niche": "plumbers",
  "location": "Manchester UK",
  "maxResultsPerQuery": 20,
  "maxScore": 55
}
```

You can pass both — the actor grades your `sites` *and* discovers the niche in the same run.

### How to run

1. Click **Try for free** (or open the actor in your Apify Console).
2. Either paste your **sites** (URLs and/or `{name, website}` objects) or type a **niche** and **location** like `dentists` / `Leeds`.
3. (Optional) Set **`maxScore`** below 100 to return only the weak sites — your ready lead list.
4. Set **maxSites** to cap your spend.
5. Click **Start**. When the run finishes, open the **Dataset** tab and export to JSON/CSV/Excel, or pull it via the API (below).

Run it on a **schedule** (Apify Schedules) to grade a fresh batch of a niche each week, or call it from **Make / Zapier / n8n** via the Apify integrations.

### Output

Each item in the dataset is one audited business:

```json
{
  "type": "audit",
  "businessName": "Bright Smile Dental",
  "url": "https://brightsmiledental.co.uk",
  "score": 45,
  "grade": "D",
  "headline": "No way to capture leads on the homepage — visitors leave without a trace.",
  "missing": ["No contact form", "No live chat", "No booking widget"],
  "leadReadiness": {
    "contactForm": false,
    "clickToCall": true,
    "liveChat": false,
    "booking": false,
    "mobileOptimized": true,
    "https": true,
    "metaDescription": false
  },
  "contactEmail": "hello@brightsmiledental.co.uk",
  "contactPhone": "+44 113 496 0000",
  "source": "discovered",
  "query": "plumbers Manchester UK"
}
```

Field notes:

- **`score`** is 0–100 — the sum of the lead-capture signals the homepage *has*. The weights are: contact form **25**, click-to-call **20**, live chat **15**, online booking **15**, mobile-optimised **15**, HTTPS **5**, meta description **5**. A missing contact form alone costs 25 points, which is why form-less sites grade low.
- **`grade`** maps the score to a letter: **A** ≥ 85, **B** 70–84, **C** 55–69, **D** 40–54, **F** < 40. The lower the grade, the warmer the lead.
- **`missing`** lists the signals the homepage *lacks*, ranked by weight (heaviest first) — e.g. `["No contact form", "No live chat", "No booking widget"]`. This is your fix-list for the pitch.
- **`headline`** is the single biggest gap rewritten as a one-line, agency-ready opener — e.g. *"No click-to-call — mobile visitors can't reach them in one tap."* When a site is already strong, it reads *"Solid lead capture — only minor quick wins left."*
- **`leadReadiness`** is the raw boolean for each of the seven signals, if you want to filter or chart them yourself.
- **`contactEmail` / `contactPhone`** are the public business details lifted from the page — `null` when the homepage doesn't expose them. **`businessName`** comes from the page title (or the domain) when you don't supply a name.
- **`source`** is `"discovered"` (found via search) or `"provided"` (from your `sites`); **`query`** holds the discovery query in discovery mode and is `null` for provided sites.

A run that audits nobody doesn't return a silent blank dataset — it sets a clear status message with tips (add `sites`, broaden `niche`+`location`, or raise `maxScore`).

#### Export & API

```bash
## Last run's dataset items as JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json&token=<APIFY_TOKEN>"
```

Or use the **run-sync-get-dataset-items** endpoint to run-and-wait in a single call — handy for embedding the actor in your own backend.

### Limitations

- **Homepage-only (no crawl).** It reads one page per business and never follows links. Widgets that load *purely* via client-side JavaScript on large SPA-style sites may not appear in the static HTML, so they can be missed — but real small-business sites almost always carry their form, chat and booking markup in the HTML, so detection works well on the local sites this is built for.
- **Discovery is search-snippet based.** A `niche`+`location` query returns a focused **~10–25 businesses** — a hit-list, not a 1,000-row Maps dump. Run more niches and locations (or add them to `sites`) for broader coverage.
- **Location precision.** A bare city name can match the wrong country — `"Manchester"` may surface Manchester, USA. Qualify it (`"Manchester UK"`) for accurate local results.

### Compliance

This actor fetches **public homepages only**, identifies itself with a normal browser User-Agent, reads a single page (no crawl, no login, no cookies), and uses Apify's SERP proxy for discovery at modest concurrency. The contact email and phone it returns are public business details published on the page. You are responsible for using the output in line with any privacy and outreach laws that apply to you (GDPR, PECR, CAN-SPAM, and the rest).

### FAQ

**How do I find local business leads with this?** Give it a **`niche`** and **`location`** (e.g. `dentists` / `Leeds`) and it discovers local businesses via Google, grades each homepage, and returns them ranked by how badly they're set up to capture leads. Set **`maxScore`** below 100 to get back only the weak ones — that's your ready-to-pitch lead list.

**What does the grade mean?** The grade is the lead-readiness score as a letter: **A** ≥ 85, **B** 70–84, **C** 55–69, **D** 40–54, **F** under 40. A high grade means the homepage gives visitors plenty of ways to become a lead; a low grade means it's leaking enquiries — which makes it a warmer prospect for an agency.

**Can it find leads by niche and city?** Yes. That's discovery mode — `niche` + `location` finds the businesses and grades them in one run, no list required. Discovery returns a focused ~10–25 businesses per query, so run several niches or cities for more.

**Does it find contact emails and phone numbers?** Yes, when they're public on the homepage. Each result includes `contactEmail` and `contactPhone` lifted from the page (`mailto:`/`tel:` links and text patterns). They're `null` when the site doesn't publish them — we never fabricate a detail.

**How is it priced and how do I control cost?** Apify Pay-Per-Event — you're charged **per site audited**. You're only charged for sites that are actually output, so when you set a `maxScore` filter, weak sites you keep are charged and the strong ones filtered out are not. Unreachable sites are skipped and never charged. Set **`maxSites`** to cap the run.

**How do I get only the weak sites?** Lower **`maxScore`**. Leave it at `100` to output every site graded; set it to `55` to return only sites scoring 55 or below (grade C and worse), or `40` for the worst offenders only. The filter runs *before* billing, so you only pay for the leads you asked for.

**Does it work on JavaScript-heavy sites?** It reads the homepage's static HTML, so anything present there — including the script tags and markup that chat, booking and form widgets inject — is detected. On large SPA sites that render *everything* client-side, a widget loaded purely by JS can be missed. Real small-business sites usually ship that markup in the HTML, so detection is reliable on the local sites this is designed for.

**What's the difference between sites mode and discovery mode?** Use **sites mode** when you already have a list of businesses to grade — paste URLs or `{name, website}` objects. Use **discovery mode** (`niche` + `location`) when you want the actor to *find* the businesses first. You can combine both in a single run.

**What if a run audits nobody?** You'll get a clear status message (not a silent empty dataset) suggesting fixes — add `sites`, broaden your `niche`+`location`, or raise `maxScore`.

***

#### Want to turn these graded leads into booked calls?

This actor finds the businesses leaking leads and tells you exactly why. If you'd like the **whole loop** — discovery, contact enrichment, AI-personalised outreach that opens with their grade, and reply handling — done for you, that's what we build at **[SignalEngine](https://engine.signalsprint.io)**. It's speed-to-lead in a box: this actor is a taste of the engine that powers it.

Need named decision-makers and their work emails instead of a website grade? See our **LinkedIn Profile & Email Finder**.

# Actor input Schema

## `sites` (type: `array`):

URLs or {name, website} objects to grade. Use this, niche+location, or both.

## `niche` (type: `string`):

Business type to discover, e.g. "dentists". Needs location.

## `location` (type: `string`):

City/area to discover in, e.g. "Leeds". Needs niche.

## `maxResultsPerQuery` (type: `integer`):

How many businesses to discover per niche+location query before grading.

## `maxSites` (type: `integer`):

Hard cap on total sites output/charged this run (caps your spend). With a maxScore filter, more sites may be fetched than output, but you're only charged per output.

## `maxScore` (type: `integer`):

100 = output all. Lower (e.g. 55) to return only weak sites = ready leads.

## `searchEngine` (type: `string`):

Which engine to use for niche+location discovery. Google is default; falls back to Bing if Google returns nothing.

## `maxConcurrency` (type: `integer`):

Parallel homepage fetches (kept modest).

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

Defaults to Apify GOOGLE\_SERP for discovery; also used as a residential fallback when a homepage blocks the direct fetch.

## Actor input object example

```json
{
  "sites": [],
  "niche": "",
  "location": "",
  "maxResultsPerQuery": 20,
  "maxSites": 100,
  "maxScore": 100,
  "searchEngine": "google",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

## `audits` (type: `string`):

Per-business lead-readiness grades.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("signalengine/lead-readiness-auditor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("signalengine/lead-readiness-auditor").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 '{}' |
apify call signalengine/lead-readiness-auditor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Local Business Website Audit — Lead-Readiness Scanner",
        "description": "Audit local business websites for lead-readiness — contact form, click-to-call, live chat, booking, mobile, HTTPS — and get a graded, sales-ready lead list. Paste sites or give a niche + city.",
        "version": "0.1",
        "x-build-id": "xgtX7E4i0soqFMepk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/signalengine~lead-readiness-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-signalengine-lead-readiness-auditor",
                "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/signalengine~lead-readiness-auditor/runs": {
            "post": {
                "operationId": "runs-sync-signalengine-lead-readiness-auditor",
                "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/signalengine~lead-readiness-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-signalengine-lead-readiness-auditor",
                "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": {
                    "sites": {
                        "title": "Sites to audit",
                        "type": "array",
                        "description": "URLs or {name, website} objects to grade. Use this, niche+location, or both.",
                        "default": []
                    },
                    "niche": {
                        "title": "Niche",
                        "type": "string",
                        "description": "Business type to discover, e.g. \"dentists\". Needs location.",
                        "default": ""
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City/area to discover in, e.g. \"Leeds\". Needs niche.",
                        "default": ""
                    },
                    "maxResultsPerQuery": {
                        "title": "Max discovered per query",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many businesses to discover per niche+location query before grading.",
                        "default": 20
                    },
                    "maxSites": {
                        "title": "Max sites output (run cap)",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on total sites output/charged this run (caps your spend). With a maxScore filter, more sites may be fetched than output, but you're only charged per output.",
                        "default": 100
                    },
                    "maxScore": {
                        "title": "Only output sites scoring ≤ this (hit-list filter)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "100 = output all. Lower (e.g. 55) to return only weak sites = ready leads.",
                        "default": 100
                    },
                    "searchEngine": {
                        "title": "Discovery search engine",
                        "enum": [
                            "google",
                            "bing"
                        ],
                        "type": "string",
                        "description": "Which engine to use for niche+location discovery. Google is default; falls back to Bing if Google returns nothing.",
                        "default": "google"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel homepage fetches (kept modest).",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Defaults to Apify GOOGLE_SERP for discovery; also used as a residential fallback when a homepage blocks the direct fetch.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "GOOGLE_SERP"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
