# LLM Visibility Monitor: AI Search Brand Audit (`constructive_calm/llm-visibility-monitor`) Actor

Audit how your brand appears across ChatGPT-style answers, Claude, Gemini, Perplexity, Grok, and Google AI Overviews. Track mentions, citations, share of voice, sentiment, and competitor gaps for SEO and GEO reporting.

- **URL**: https://apify.com/constructive\_calm/llm-visibility-monitor.md
- **Developed by:** [Omar Eldeeb](https://apify.com/constructive_calm) (community)
- **Categories:** SEO tools, Social media, Agents
- **Stats:** 3 total users, 2 monthly users, 50.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $150.00 / 1,000 standard llm samples

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

### What does LLM Visibility Monitor do?

**LLM Visibility Monitor** audits how a brand appears across AI search and answer surfaces: ChatGPT-style OpenAI answers, Claude, Gemini, Perplexity, Grok, and experimental Google AI Overviews. It is an **AI search visibility API** for SEO agencies, GEO teams, and brand marketers who need evidence-backed reporting on mentions, citations, share of voice, sentiment, and competitor gaps.

The Actor does not claim to replicate every personalized logged-in chatbot session. It measures repeatable API/search-backed answer surfaces and labels each result by model, platform, and search mode.

### Why use LLM Visibility Monitor?

Traditional SEO rank tracking does not show whether AI assistants recommend your brand, cite your website, or mention competitors instead. This Actor gives agencies a repeatable way to benchmark a client’s **GEO visibility** and export the evidence.

Use it to:

- Run client-ready AI visibility audits.
- Monitor brand mentions across multiple AI platforms.
- Compare AI Share of Voice against competitors.
- Find pages and domains that AI answers cite instead of your site.
- Discover prompt gaps where competitors appear but your brand does not.
- Schedule recurring audits through Apify and export results via API, CSV, JSON, Excel, or integrations.

### What data can LLM Visibility Monitor extract?

| Field | Type | Description |
|---|---|---|
| `brandMentioned` | Boolean | Whether the target brand or aliases appeared in the answer. |
| `brandPosition` | Number | The brand’s first mention position among tracked brands and competitors. |
| `shareOfVoice` | Number | Brand mentions divided by total brand + competitor mentions. |
| `ownedDomainCited` | Boolean | Whether the target website domain was cited. |
| `citedUrls` / `citedDomains` | Array | Direct, user-facing URLs and domains cited or discovered in the answer surface. Provider redirect URLs are filtered from this list. |
| `citationQuality` | String | Directional quality flag based on direct citations, owned-domain citations, and provider redirect noise. |
| `sentimentLabel` / `sentimentScore` | String / Number | Directional brand sentiment in the response. |
| `answerSnippet` | String | Evidence snippet for review and client reporting. |
| `geoScoreSignals` | Object | Component signals used for the final GEO Visibility Score. |

The key-value store also contains `RUN_SUMMARY`, `VISIBILITY_SCORECARD`, `COMPETITOR_SHARE_OF_VOICE`, `CITATION_OPPORTUNITIES`, `PROMPT_GAPS`, and `AGENCY_REPORT.md`.

### How to run an AI search visibility audit

1. Enter the brand name.
2. Add the brand website URL so owned-domain citations can be detected.
3. Add a market category such as `B2B analytics software` or `local HVAC company`.
4. Add competitors for share-of-voice and position tracking. You can enter brand names or URLs; URLs are normalized into brand names, domains, and aliases.
5. Either provide custom prompts or let the Actor generate an SEO/GEO prompt set.
6. Choose a preset: Quick, Agency, Deep, or Custom.
7. Select answer surfaces and optionally enable Google AI Overview capture.
8. Start the Actor and open the dataset plus `AGENCY_REPORT.md`.

### How much will it cost?

This Actor uses pay-per-event pricing so costs scale with the amount of AI visibility evidence generated.

Important: multi-platform live audits are not cheap smoke tests. The `agency` preset is designed for client-ready reporting, not quick validation. Use `quick`, set `maxChargeUsd`, or enable `dryRun` when testing.

| Event | Price | Frequency |
|---|---:|---|
| `apify-actor-start` | `$0.01` | Infrequent |
| `standard-llm-sample` | `$0.15` | Frequent |
| `premium-llm-sample` | `$0.35` | Frequent |
| `google-aio-sample` | `$0.50` | Frequent when enabled |
| `prompt-set-generated` | `$0.50` | Infrequent |
| `agency-report` | `$1.00` | Infrequent |
| `byok-llm-sample` | `$0.05` | Frequent in BYOK mode |
| `byok-google-aio-sample` | `$0.25` | Frequent in BYOK mode |

Typical presets:

| Preset | Shape | Estimated live cost | With Google AIO |
|---|---|---:|---:|
| Quick | 5 prompts x 3 platforms x 1 sample | about `$3.76` | about `$6.26` |
| Agency | 10 prompts x 4 platforms x 2 samples | about `$13.51` | about `$18.51` |
| Deep | 25 prompts x 5 platforms x 3 samples | about `$117.76` | about `$130.26` |

These estimates assume the Actor generates prompts and creates the final report. Custom prompts can reduce the estimate by `$0.50` because no prompt set is generated. Google AI Overview is capped to one sample per prompt because live SERP availability is expensive and usually less useful to repeat than LLM answers. The Actor logs an estimated charge before paid work starts and supports `maxChargeUsd` as a live-run safety cap. It also uses conservative provider-cost ceilings so bundled pricing stays profitable and avoids runaway API costs.

### Input

See the input tab for full configuration options. The most important fields are:

- `brandName`: required brand or product name.
- `websiteUrl`: owned domain for citation tracking.
- `marketCategory`: used to generate realistic SEO/GEO prompts.
- `competitors`: competitor brands or URLs for share-of-voice analysis.
- `prompts`: optional custom prompts; leave empty for generated prompts.
- `platforms`: answer surfaces to test.
- `maxChargeUsd`: optional safety cap; live runs stop before paid calls if the estimated pay-per-event charge is higher.
- `openRouterApiKey`: optional bring-your-own-key mode.
- `dryRun`: fixture mode for testing without external API calls.

For bundled live runs, the Actor owner must configure `OPENROUTER_API_KEY` as an Apify secret or environment variable. Secrets are never stored in `.actor/actor.json`.

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example dataset item:

```json
{
  "brandName": "Acme Analytics",
  "prompt": "What are the best B2B analytics software companies?",
  "platformLabel": "OpenAI GPT Mini Latest",
  "brandMentioned": true,
  "brandPosition": 2,
  "shareOfVoice": 0.5,
  "ownedDomainCited": true,
  "citedDomains": ["example.com", "example.org"],
  "sentimentLabel": "positive",
  "answerSnippet": "Acme Analytics appears as a relevant option..."
}
````

### Tips and advanced options

- For first tests, use `dryRun: true` or `quick` with `maxChargeUsd` set around `$5`.
- Use at least two samples per prompt for agency reporting because LLM answers vary.
- Add brand aliases and product names to improve mention detection.
- Use custom prompts for high-intent sales questions your clients care about.
- Enable Google AI Overview only when you are comfortable with experimental SERP behavior and higher cost. It adds about `$0.50` per prompt.
- Use BYOK mode for private audits where you want provider cost on your own OpenRouter account.

### FAQ, disclaimers, and support

#### Does this show exact ChatGPT, Claude, Gemini, or Perplexity consumer UI results?

Not always. The Actor measures stable API/search-backed answer surfaces and labels every row by actual surface type. Personalized logged-in chatbot sessions can differ due to memory, account state, location, experiments, and UI changes.

#### Why did Google AI Overview return "not present"?

Google AI Overviews vary by country, language, device, query, and live SERP state. The Actor records the attempt and returns citation candidates when an overview is not detected.

#### Is the GEO Visibility Score exact traffic measurement?

No. It is a directional audit metric combining mention rate, owned-domain citation rate, position/prominence, sentiment, and consistency. Use it for benchmarking and prioritization, not as analytics traffic.

#### What about personal data?

This Actor is designed for brand and public web visibility analysis. It does not intentionally extract private personal data. You should still review outputs before processing or sharing them, especially when prompts or cited pages may include personal data. Personal data is protected by GDPR in the European Union and by other regulations around the world. If you are unsure whether your use is legitimate, consult your lawyers.

For issues, feature requests, or platform-specific accuracy questions, use the Actor Issues tab on Apify.

# Actor input Schema

## `brandName` (type: `string`):

The brand, product, company, or entity to audit in AI-generated answers.

## `websiteUrl` (type: `string`):

The owned domain used to detect whether AI answers cite your website.

## `marketCategory` (type: `string`):

Category used for auto-generated SEO/GEO prompts.

## `competitors` (type: `array`):

Competitor brand names or URLs. URLs are normalized into brand names, domains, and aliases for share-of-voice and position tracking.

## `brandAliases` (type: `array`):

Alternative spellings, product names, or abbreviations that should count as brand mentions.

## `prompts` (type: `array`):

Questions to test. Leave empty to generate a prompt set. More prompts directly increase cost because each prompt is tested across every selected platform.

## `runPreset` (type: `string`):

Controls prompt count, platform mix, and sample count. Estimated bundled live cost before BYOK: Quick about $3.76 without Google AIO or $6.26 with Google AIO; Agency about $13.51 without Google AIO or $18.51 with Google AIO; Deep about $117.76 without Google AIO or $130.26 with Google AIO.

## `platforms` (type: `array`):

Choose model/search surfaces. Google AI Overview is also controlled by the experimental toggle below.

## `samplesPerPrompt` (type: `integer`):

Optional override. Leave empty to use the selected preset: Quick uses 1, Agency uses 2, Deep uses 3. Each extra sample repeats every non-Google platform and increases cost. Google AIO is capped to one sample per prompt.

## `maxPrompts` (type: `integer`):

Optional override. Leave empty to use the selected preset: Quick uses 5, Agency uses 10, Deep uses 25. Each extra prompt runs across every selected platform and increases cost.

## `country` (type: `string`):

Two-letter country code for location-biased search where supported.

## `language` (type: `string`):

Language code for Google SERP capture and reporting context.

## `enableGoogleAio` (type: `boolean`):

Experimental and expensive. Adds one Google AI Overview/SERP attempt per prompt at $0.50 each. Agency preset adds about $5.00. It may return not present depending on query, country, and device state.

## `maxChargeUsd` (type: `number`):

Live-run safety cap. The Actor stops before paid calls if the estimated pay-per-event charge is above this amount. Lower this for tests, for example $5 for a quick smoke run.

## `includeRawAnswers` (type: `boolean`):

Include full raw AI answer text in dataset rows. Off by default to keep exports compact.

## `openRouterApiKey` (type: `string`):

Optional bring-your-own-key mode. Leave empty to use the Actor owner's bundled OPENROUTER\_API\_KEY secret.

## `dryRun` (type: `boolean`):

Use deterministic fixture answers without external API calls. Useful for testing schemas and reports.

## Actor input object example

```json
{
  "brandName": "Acme Analytics",
  "websiteUrl": "https://example.com",
  "marketCategory": "B2B analytics software",
  "competitors": [
    "Competitor A",
    "Competitor B"
  ],
  "brandAliases": [],
  "prompts": [],
  "runPreset": "agency",
  "platforms": [],
  "country": "US",
  "language": "en",
  "enableGoogleAio": false,
  "maxChargeUsd": 25,
  "includeRawAnswers": false,
  "dryRun": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row per prompt, platform, and sample with mentions, citations, sentiment, share of voice, and evidence snippets.

## `runSummary` (type: `string`):

GEO Visibility Score, share of voice, citation rates, warnings, and pricing summary.

## `agencyReport` (type: `string`):

Markdown report suitable for client-facing SEO/GEO audit workflows.

# 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 = {
    "brandName": "Acme Analytics",
    "websiteUrl": "https://example.com",
    "marketCategory": "B2B analytics software",
    "competitors": [
        "Competitor A",
        "Competitor B"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("constructive_calm/llm-visibility-monitor").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 = {
    "brandName": "Acme Analytics",
    "websiteUrl": "https://example.com",
    "marketCategory": "B2B analytics software",
    "competitors": [
        "Competitor A",
        "Competitor B",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("constructive_calm/llm-visibility-monitor").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 '{
  "brandName": "Acme Analytics",
  "websiteUrl": "https://example.com",
  "marketCategory": "B2B analytics software",
  "competitors": [
    "Competitor A",
    "Competitor B"
  ]
}' |
apify call constructive_calm/llm-visibility-monitor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LLM Visibility Monitor: AI Search Brand Audit",
        "description": "Audit how your brand appears across ChatGPT-style answers, Claude, Gemini, Perplexity, Grok, and Google AI Overviews. Track mentions, citations, share of voice, sentiment, and competitor gaps for SEO and GEO reporting.",
        "version": "0.1",
        "x-build-id": "7x2GHdvIHljbQT3PM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/constructive_calm~llm-visibility-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-constructive_calm-llm-visibility-monitor",
                "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/constructive_calm~llm-visibility-monitor/runs": {
            "post": {
                "operationId": "runs-sync-constructive_calm-llm-visibility-monitor",
                "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/constructive_calm~llm-visibility-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-constructive_calm-llm-visibility-monitor",
                "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": [
                    "brandName"
                ],
                "properties": {
                    "brandName": {
                        "title": "Brand name",
                        "type": "string",
                        "description": "The brand, product, company, or entity to audit in AI-generated answers."
                    },
                    "websiteUrl": {
                        "title": "Website URL",
                        "type": "string",
                        "description": "The owned domain used to detect whether AI answers cite your website."
                    },
                    "marketCategory": {
                        "title": "Market category",
                        "type": "string",
                        "description": "Category used for auto-generated SEO/GEO prompts."
                    },
                    "competitors": {
                        "title": "Competitors",
                        "type": "array",
                        "description": "Competitor brand names or URLs. URLs are normalized into brand names, domains, and aliases for share-of-voice and position tracking.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "brandAliases": {
                        "title": "Brand aliases",
                        "type": "array",
                        "description": "Alternative spellings, product names, or abbreviations that should count as brand mentions.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "prompts": {
                        "title": "Custom prompts",
                        "type": "array",
                        "description": "Questions to test. Leave empty to generate a prompt set. More prompts directly increase cost because each prompt is tested across every selected platform.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "runPreset": {
                        "title": "Run preset (major cost driver)",
                        "enum": [
                            "quick",
                            "agency",
                            "deep",
                            "custom"
                        ],
                        "type": "string",
                        "description": "Controls prompt count, platform mix, and sample count. Estimated bundled live cost before BYOK: Quick about $3.76 without Google AIO or $6.26 with Google AIO; Agency about $13.51 without Google AIO or $18.51 with Google AIO; Deep about $117.76 without Google AIO or $130.26 with Google AIO.",
                        "default": "agency"
                    },
                    "platforms": {
                        "title": "AI answer surfaces",
                        "type": "array",
                        "description": "Choose model/search surfaces. Google AI Overview is also controlled by the experimental toggle below.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "openai-mini",
                                "openai-gpt",
                                "claude-haiku",
                                "claude-sonnet",
                                "gemini-flash",
                                "gemini-pro",
                                "grok",
                                "perplexity-sonar",
                                "perplexity-sonar-pro",
                                "google-aio"
                            ],
                            "enumTitles": [
                                "OpenAI GPT Mini Latest",
                                "OpenAI GPT Latest",
                                "Claude Haiku Latest",
                                "Claude Sonnet Latest",
                                "Gemini Flash Latest",
                                "Gemini Pro Latest",
                                "Grok 4.3",
                                "Perplexity Sonar",
                                "Perplexity Sonar Pro Search",
                                "Google AI Overview (experimental)"
                            ]
                        },
                        "default": []
                    },
                    "samplesPerPrompt": {
                        "title": "Samples per prompt (cost multiplier)",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Optional override. Leave empty to use the selected preset: Quick uses 1, Agency uses 2, Deep uses 3. Each extra sample repeats every non-Google platform and increases cost. Google AIO is capped to one sample per prompt."
                    },
                    "maxPrompts": {
                        "title": "Max prompts (cost multiplier)",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Optional override. Leave empty to use the selected preset: Quick uses 5, Agency uses 10, Deep uses 25. Each extra prompt runs across every selected platform and increases cost."
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Two-letter country code for location-biased search where supported.",
                        "default": "US"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code for Google SERP capture and reporting context.",
                        "default": "en"
                    },
                    "enableGoogleAio": {
                        "title": "Enable Google AI Overview capture (+$0.50 per prompt)",
                        "type": "boolean",
                        "description": "Experimental and expensive. Adds one Google AI Overview/SERP attempt per prompt at $0.50 each. Agency preset adds about $5.00. It may return not present depending on query, country, and device state.",
                        "default": false
                    },
                    "maxChargeUsd": {
                        "title": "Maximum Actor charge (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Live-run safety cap. The Actor stops before paid calls if the estimated pay-per-event charge is above this amount. Lower this for tests, for example $5 for a quick smoke run.",
                        "default": 25
                    },
                    "includeRawAnswers": {
                        "title": "Include raw answers",
                        "type": "boolean",
                        "description": "Include full raw AI answer text in dataset rows. Off by default to keep exports compact.",
                        "default": false
                    },
                    "openRouterApiKey": {
                        "title": "OpenRouter API key (optional BYOK)",
                        "type": "string",
                        "description": "Optional bring-your-own-key mode. Leave empty to use the Actor owner's bundled OPENROUTER_API_KEY secret."
                    },
                    "dryRun": {
                        "title": "Dry run fixtures",
                        "type": "boolean",
                        "description": "Use deterministic fixture answers without external API calls. Useful for testing schemas and reports.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
