# Website SEO, Health & Broken Link Auditor (`fascinating_lentil/website-health-seo-broken-link-auditor`) Actor

Audit authorized websites for technical SEO, broken links, redirects, sitemap and indexability issues, TLS, security headers, PageSpeed, and prior-run regressions. Returns per-page evidence plus HTML, PDF, JSON, and AI-ready summaries.

- **URL**: https://apify.com/fascinating\_lentil/website-health-seo-broken-link-auditor.md
- **Developed by:** [Md Jakaria Mirza](https://apify.com/fascinating_lentil) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 page auditeds

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Website SEO, Health & Broken Link Auditor

Audit an authorized website for technical SEO, broken links, redirect chains, indexability, sitemap coverage, TLS certificate status, security headers, and prior-run regressions.

This Actor is HTTP-only. It uses Crawlee `BasicCrawler`, a bounded HTTP client, and Cheerio. It does not run Chromium or execute page JavaScript.

### Responsible Use

You must own the target website or have explicit prior authorization to audit it.

- Set `confirmAuthorizedUse: true` for every target except the built-in `example.com` demo.
- The checkbox confirms permission you already have. It does not create permission.
- Recursive crawling stays inside the starting URL's registrable domain.
- External links may receive one bounded status check, but they are never crawled.
- `robots.txt` is always enforced and cannot be disabled.
- The Actor does not log in, submit forms, bypass access controls, solve CAPTCHAs, scan ports, or probe private networks.
- Domain owners can request blocking through the process in `DOMAIN-REMOVAL.md`.

Security-header and TLS findings are configuration observations, not a penetration test, compliance audit, ranking guarantee, or accessibility certification.

### Safe Demo

The Store prefill uses one lightweight page:

```json
{
  "startUrl": "https://example.com",
  "confirmAuthorizedUse": false,
  "maxPages": 1,
  "maxCrawlDepth": 0,
  "maxLinksPerPage": 25,
  "checkExternalLinks": false,
  "maxExternalLinks": 0,
  "includePerformance": false,
  "compareWithPreviousRun": false,
  "generateHtmlReport": true,
  "generatePdfReport": false
}
````

For any real website, set `confirmAuthorizedUse` to `true` only after confirming authorization.

### What It Checks

- HTTP statuses and bounded in-scope redirect chains
- Broken internal and optional external links
- Titles, meta descriptions, canonical tags, headings, and indexability
- Duplicate titles and meta descriptions across audited pages
- `robots.txt` and sitemap coverage
- Image alt text and mixed-content references
- Open Graph tags and JSON-LD syntax
- Selected security headers
- Real TLS certificate validity and expiry dates
- Optional PageSpeed Insights lab and field metrics
- New, resolved, unchanged, and materially changed findings against a comparable baseline

### Input

| Field | Default | Limit | Purpose |
| --- | ---: | ---: | --- |
| `startUrl` | required | HTTP/HTTPS only | Authorized starting page |
| `confirmAuthorizedUse` | `false` | required | Confirms prior authorization; `example.com` is exempt |
| `maxPages` | `25` | 250 | Maximum internal pages processed |
| `maxCrawlDepth` | `3` | 10 | Maximum click depth from the start page |
| `maxLinksPerPage` | `100` | 500 | Maximum unique links extracted per page |
| `checkExternalLinks` | `true` | - | Run a bounded status check for external links |
| `maxExternalLinks` | `250` | 2,000 | Maximum unique external links checked |
| `includePerformance` | `false` | - | Enable PageSpeed Insights |
| `pageSpeedApiKey` | empty | secret | Optional Google PageSpeed API key; never returned |
| `maxPerformancePages` | `1` | 5 | Maximum PageSpeed attempts, including failed attempts |
| `compareWithPreviousRun` | `true` | - | Enable persistent baseline comparison |
| `baselineKey` | empty | 48 safe characters | Optional baseline-store suffix |
| `generateHtmlReport` | `true` | - | Save escaped `report.html` |
| `generatePdfReport` | `false` | - | Save a real `application/pdf` file at `report.pdf` |
| `failOnSeverity` | `none` | `none`, `error`, `critical` | Optional CI failure threshold |

Run limits are also constrained by the user's maximum cost. If the budget cannot cover one paid page event, the Actor stops before crawling.

### Output

Each successfully audited, non-blocked page produces one default-dataset item. Important fields include:

```json
{
  "recordType": "page_audit",
  "url": "https://example.com/",
  "normalizedUrl": "https://example.com/",
  "statusCode": 200,
  "contentType": "text/html",
  "redirectChain": [],
  "title": "Example Domain",
  "metaDescription": null,
  "canonicalUrl": null,
  "indexability": {
    "isIndexable": true,
    "robotsMeta": [],
    "xRobotsTag": [],
    "robotsTxtAllowed": true
  },
  "linkSummary": {
    "internalLinksCount": 0,
    "externalLinksCount": 1,
    "brokenLinksCount": 0,
    "blockedLinksCount": 0
  },
  "tlsSummary": {
    "checked": true,
    "valid": true,
    "issuer": "Certificate Authority",
    "validFrom": "2026-05-31T21:39:12.000Z",
    "validTo": "2026-08-29T21:41:26.000Z",
    "daysRemaining": 42
  },
  "issues": [
    {
      "ruleId": "META_DESC_MISSING",
      "severity": "warning",
      "category": "SEO",
      "message": "Page is missing a meta description.",
      "evidence": "Meta description: missing",
      "recommendation": "Add a concise description of the page.",
      "fingerprint": "stable-sha256-fingerprint"
    }
  ],
  "score": 95,
  "auditedAt": "2026-07-18T16:58:23.026Z"
}
```

The default Key-Value Store may contain:

- `OUTPUT`: machine-readable run summary and artifact links
- `report.html`: escaped self-contained report with a restrictive Content Security Policy
- `report.pdf`: generated PDF when requested

The output schema links the dataset and summary for API, MCP, and AI-agent workflows.

### Regression Tracking

When enabled, the Actor stores only minimized issue metadata in a persistent named Key-Value Store. Raw HTML is never stored in the baseline.

Regression comparison runs only when the previous baseline covered the same number of pages. This prevents a smaller crawl from reporting findings on omitted pages as resolved. The baseline is replaced only when:

- at least one page record was stored;
- the crawl did not report failed requests;
- the maximum-cost limit did not stop output; and
- every collected page record was stored.

### CI Use

`OUTPUT.ciPassed` is suitable for pipelines and agents.

- `none`: findings do not fail the run.
- `error`: an `error` or `critical` finding fails the run after output is saved.
- `critical`: only a `critical` finding fails the run after output is saved.

### Security Controls

- HTTP and HTTPS only; ports 80 and 443 only
- Credentials in URLs rejected
- Private, loopback, link-local, metadata, benchmarking, documentation, tunneling, multicast, and reserved IP ranges blocked
- Decimal, hexadecimal, octal, shortened IPv4, mapped IPv6, and compatible IPv6 forms checked
- DNS validated both before a request and at socket connection time
- Redirects revalidated and limited to five in-scope hops
- Page bodies limited to 5 MiB compressed and decompressed
- Sitemap graph limited by file count, total bytes, URL count, and authorized scope
- Link checks bounded and paced per host
- PageSpeed responses limited to 2 MiB and API keys redacted

See `SECURITY.md` for implementation details.

### Limitations

- Client-rendered single-page applications are evaluated from their initial server HTML only.
- Some external sites reject `HEAD` or automated requests. HTTP 401, 403, 429, and 451 are reported as blocked/restricted rather than broken.
- PageSpeed data depends on Google's quota and CrUX availability.
- A clean report does not prove that a website is secure, accessible, compliant, or guaranteed to rank.

### Billing Behavior

Useful, non-blocked page records use the `page-audited` event when pay-per-event pricing is configured. Dataset storage and event charging use the Apify SDK's combined `Actor.pushData(record, eventName)` operation. Blocked, skipped, duplicate, and synthetic pages are not charged as successful page audits.

No live price is configured by this repository.

# Actor input Schema

## `startUrl` (type: `string`):

The initial URL to start auditing. Must be HTTP or HTTPS.

## `confirmAuthorizedUse` (type: `boolean`):

I confirm that I own or have explicit authorization to audit the target website. Checking this box confirms existing authorization; it does not create permission. Mandatory for all domains except example.com.

## `maxPages` (type: `integer`):

Maximum number of internal pages to crawl and audit (default 25, hard max 250).

## `maxCrawlDepth` (type: `integer`):

Maximum link click depth from startUrl (default 3, max 10).

## `maxLinksPerPage` (type: `integer`):

Maximum number of links extracted and queued per page (default 100, max 500).

## `checkExternalLinks` (type: `boolean`):

Check status of external links (checked via HEAD/GET once, never recursively crawled).

## `maxExternalLinks` (type: `integer`):

Maximum total unique external links to check across the entire audit (default 250, max 2000).

## `includePerformance` (type: `boolean`):

Whether to fetch PageSpeed Insights data for top pages (disabled by default).

## `pageSpeedApiKey` (type: `string`):

Optional user-provided API key for Google PageSpeed Insights. Never logged or stored in output.

## `maxPerformancePages` (type: `integer`):

Maximum number of pages to run through PageSpeed Insights (default 1, max 5).

## `compareWithPreviousRun` (type: `boolean`):

Compare current findings against persistent baseline to identify new, resolved, and materially changed issues.

## `baselineKey` (type: `string`):

Optional custom key-value store key name for baseline storage. If omitted, derived from target domain.

## `generateHtmlReport` (type: `boolean`):

Generate a self-contained, interactive HTML audit report saved in the Key-Value Store.

## `generatePdfReport` (type: `boolean`):

Generate a downloadable PDF audit report saved in the Key-Value Store.

## `failOnSeverity` (type: `string`):

If set, the run will exit with failure (ciPassed=false) if any issue meets or exceeds this severity.

## Actor input object example

```json
{
  "startUrl": "https://example.com",
  "confirmAuthorizedUse": false,
  "maxPages": 1,
  "maxCrawlDepth": 3,
  "maxLinksPerPage": 25,
  "checkExternalLinks": true,
  "maxExternalLinks": 250,
  "includePerformance": false,
  "maxPerformancePages": 1,
  "compareWithPreviousRun": true,
  "generateHtmlReport": true,
  "generatePdfReport": false,
  "failOnSeverity": "none"
}
```

# Actor output Schema

## `results` (type: `string`):

Validated page-level audit records in the default dataset.

## `summary` (type: `string`):

Machine-readable audit totals, regression counts, score, and report links.

## `htmlReport` (type: `string`):

Self-contained human-readable report when HTML output is enabled.

## `pdfReport` (type: `string`):

Downloadable PDF report when PDF output is enabled.

# 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 = {
    "startUrl": "https://example.com",
    "confirmAuthorizedUse": false,
    "maxPages": 1,
    "maxCrawlDepth": 0,
    "maxLinksPerPage": 25,
    "checkExternalLinks": false,
    "maxExternalLinks": 0,
    "includePerformance": false,
    "maxPerformancePages": 1,
    "compareWithPreviousRun": false,
    "generateHtmlReport": true,
    "generatePdfReport": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("fascinating_lentil/website-health-seo-broken-link-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 = {
    "startUrl": "https://example.com",
    "confirmAuthorizedUse": False,
    "maxPages": 1,
    "maxCrawlDepth": 0,
    "maxLinksPerPage": 25,
    "checkExternalLinks": False,
    "maxExternalLinks": 0,
    "includePerformance": False,
    "maxPerformancePages": 1,
    "compareWithPreviousRun": False,
    "generateHtmlReport": True,
    "generatePdfReport": False,
}

# Run the Actor and wait for it to finish
run = client.actor("fascinating_lentil/website-health-seo-broken-link-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 '{
  "startUrl": "https://example.com",
  "confirmAuthorizedUse": false,
  "maxPages": 1,
  "maxCrawlDepth": 0,
  "maxLinksPerPage": 25,
  "checkExternalLinks": false,
  "maxExternalLinks": 0,
  "includePerformance": false,
  "maxPerformancePages": 1,
  "compareWithPreviousRun": false,
  "generateHtmlReport": true,
  "generatePdfReport": false
}' |
apify call fascinating_lentil/website-health-seo-broken-link-auditor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fascinating_lentil/website-health-seo-broken-link-auditor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website SEO, Health & Broken Link Auditor",
        "description": "Audit authorized websites for technical SEO, broken links, redirects, sitemap and indexability issues, TLS, security headers, PageSpeed, and prior-run regressions. Returns per-page evidence plus HTML, PDF, JSON, and AI-ready summaries.",
        "version": "1.0",
        "x-build-id": "l310XKKBuHFuer9jH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fascinating_lentil~website-health-seo-broken-link-auditor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fascinating_lentil-website-health-seo-broken-link-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/fascinating_lentil~website-health-seo-broken-link-auditor/runs": {
            "post": {
                "operationId": "runs-sync-fascinating_lentil-website-health-seo-broken-link-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/fascinating_lentil~website-health-seo-broken-link-auditor/run-sync": {
            "post": {
                "operationId": "run-sync-fascinating_lentil-website-health-seo-broken-link-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",
                "required": [
                    "startUrl",
                    "confirmAuthorizedUse"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "The initial URL to start auditing. Must be HTTP or HTTPS."
                    },
                    "confirmAuthorizedUse": {
                        "title": "Confirm Authorized Use",
                        "type": "boolean",
                        "description": "I confirm that I own or have explicit authorization to audit the target website. Checking this box confirms existing authorization; it does not create permission. Mandatory for all domains except example.com.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Maximum Pages to Audit",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Maximum number of internal pages to crawl and audit (default 25, hard max 250).",
                        "default": 25
                    },
                    "maxCrawlDepth": {
                        "title": "Maximum Crawl Depth",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum link click depth from startUrl (default 3, max 10).",
                        "default": 3
                    },
                    "maxLinksPerPage": {
                        "title": "Maximum Links per Page",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of links extracted and queued per page (default 100, max 500).",
                        "default": 100
                    },
                    "checkExternalLinks": {
                        "title": "Check External Links",
                        "type": "boolean",
                        "description": "Check status of external links (checked via HEAD/GET once, never recursively crawled).",
                        "default": true
                    },
                    "maxExternalLinks": {
                        "title": "Maximum External Links to Check",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum total unique external links to check across the entire audit (default 250, max 2000).",
                        "default": 250
                    },
                    "includePerformance": {
                        "title": "Include PageSpeed Performance",
                        "type": "boolean",
                        "description": "Whether to fetch PageSpeed Insights data for top pages (disabled by default).",
                        "default": false
                    },
                    "pageSpeedApiKey": {
                        "title": "Google PageSpeed API Key",
                        "type": "string",
                        "description": "Optional user-provided API key for Google PageSpeed Insights. Never logged or stored in output."
                    },
                    "maxPerformancePages": {
                        "title": "Maximum Performance Pages",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Maximum number of pages to run through PageSpeed Insights (default 1, max 5).",
                        "default": 1
                    },
                    "compareWithPreviousRun": {
                        "title": "Compare with Previous Run (Baseline Tracking)",
                        "type": "boolean",
                        "description": "Compare current findings against persistent baseline to identify new, resolved, and materially changed issues.",
                        "default": true
                    },
                    "baselineKey": {
                        "title": "Custom Baseline Key",
                        "type": "string",
                        "description": "Optional custom key-value store key name for baseline storage. If omitted, derived from target domain."
                    },
                    "generateHtmlReport": {
                        "title": "Generate HTML Report",
                        "type": "boolean",
                        "description": "Generate a self-contained, interactive HTML audit report saved in the Key-Value Store.",
                        "default": true
                    },
                    "generatePdfReport": {
                        "title": "Generate PDF Report",
                        "type": "boolean",
                        "description": "Generate a downloadable PDF audit report saved in the Key-Value Store.",
                        "default": false
                    },
                    "failOnSeverity": {
                        "title": "Fail Run on Issue Severity Threshold",
                        "enum": [
                            "none",
                            "error",
                            "critical"
                        ],
                        "type": "string",
                        "description": "If set, the run will exit with failure (ciPassed=false) if any issue meets or exceeds this severity.",
                        "default": "none"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
