# AI Overviews Tracker — Brand Visibility in AI Answers (`khadinakbar/ai-overviews-tracker`) Actor

Track brand mention rate, sentiment & share of voice in AI-generated overviews. Perplexity, ChatGPT, Claude & Gemini. GEO & brand monitoring audit.

- **URL**: https://apify.com/khadinakbar/ai-overviews-tracker.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** SEO tools, AI, Agents
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $90.00 / 1,000 keyword × query × platform checks

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

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

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

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

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

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

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

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

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


# README

## AI Overviews Tracker — Brand Visibility in AI Answer Boxes

Track whether your brand is **mentioned, recommended, or excluded** from AI-generated overview boxes across **Perplexity, ChatGPT, Claude, and Gemini** for your commercial keywords. Measure brand mention rate, recommendation rate, sentiment, and share of voice against competitors — with actionable GEO (Generative Engine Optimization) recommendations.

### What It Does

When someone searches "best CRM software" or "top email marketing tools", AI platforms like Perplexity, ChatGPT, Claude, and Gemini generate rich overview boxes recommending specific products. This actor tells you:

- **Is your brand in those overviews?** Exact mention detection with sentence-level position tracking.
- **Are you recommended or just mentioned?** Detects recommendation language ("top pick", "highly recommended", "consider") vs passive mentions.
- **What's the sentiment?** Positive, neutral, or negative framing near your brand name.
- **Who's outranking you?** Competitor share of voice: your brand's mentions vs competitor mentions in the same overviews.
- **Which keywords expose your gaps?** Full per-keyword breakdown showing where you're invisible.

### Who This Is For

- **SaaS founders and product marketers** tracking whether their product is recommended in AI overviews for their category keywords
- **SEO teams doing GEO (Generative Engine Optimization)** who need data on which commercial queries trigger AI overviews and whether their brand is included
- **Paid search managers** monitoring competitor presence in organic AI overviews that compete with their paid ads
- **Brand managers** tracking brand sentiment in AI-generated content at scale

> **Not the same as our other AI tracking actors:**
> - [AI Brand Monitor](https://apify.com/khadinakbar/ai-search-brand-monitor) — tracks brand name mentions in informational AI answers (reputation/PR focus)
> - [AI Search Visibility Tracker](https://apify.com/khadinakbar/ai-search-visibility-tracker) — tracks whether your *domain* is cited as a *source* (SEO/AEO focus)
> - **AI Overviews Tracker (this actor)** — tracks brand presence in *commercial intent* AI overview boxes (GEO/marketing focus)

### Output Data

Each record represents one keyword × query × platform check:

| Field | Type | Description |
|---|---|---|
| `platform` | string | AI platform: perplexity, chatgpt, claude, gemini |
| `keyword` | string | Commercial keyword submitted |
| `query` | string | Full query text sent to the AI |
| `query_template` | string | Template type: best_of, comparison, how_to_choose, etc. |
| `overview_triggered` | boolean | Did the AI generate a rich overview box? |
| `overview_type` | string | comparison, recommendation, explanation, or none |
| `brand_mentioned` | boolean | Was your brand found in the overview? |
| `brand_position` | integer\|null | Sentence number where brand first appears (1-based) |
| `brand_recommendation` | string | recommended, mentioned, or not_mentioned |
| `brand_sentiment` | string\|null | positive, neutral, or negative |
| `brand_context` | string\|null | 1–2 sentences surrounding the brand mention |
| `competitor_appearances` | array | Per-competitor: mentioned, position, recommendation, sentiment, context |
| `share_of_voice` | float | Your brand's fraction of all brand+competitor mentions (0–1) |
| `cited_sources` | array | URLs cited as sources in the AI overview |
| `overview_excerpt` | string | First 300–550 chars of the AI response |

**Run Summary (KV store `LAST_RUN_SUMMARY`):**

| Field | Description |
|---|---|
| `brand_visibility_score` | 0–100 composite score: mention rate (40%), recommendation rate (35%), position quality (15%), sentiment (10%) |
| `overview_presence_score` | 0–100: % of queries that trigger rich AI overviews |
| `brand_mention_rate` | Overall fraction of checks where brand was found |
| `brand_recommendation_rate` | Fraction where brand is specifically recommended |
| `avg_brand_position` | Average sentence position when mentioned (lower = better) |
| `sentiment_breakdown` | `{positive, neutral, negative}` as fractions |
| `share_of_voice` | Map of brand + each competitor → their average SOV |
| `platform_scores` | Per-platform breakdown of all metrics |
| `keyword_scores` | Per-keyword breakdown of all metrics |
| `competitor_threats` | Competitors ranked by mention rate and recommendation rate |
| `keywords_with_no_brand_mention` | Keywords where brand is completely absent from overviews |
| `keywords_where_competitor_dominates` | Keywords where your SOV < 30% |
| `recommendations` | Up to 5 specific, actionable GEO recommendations |

### Pricing

- **$0.096 per check** (one keyword × one query × one platform)
- **+ $0.00005** per GB-second for compute (standard Apify rate)
- All AI API costs included — no API keys to bring, no OpenRouter or Gemini account needed

**Cost examples:**
| Run scope | Checks | Cost |
|---|---|---|
| 5 keywords × 3 queries × 4 platforms | 60 | ~$5.76 |
| 10 keywords × 3 queries × 4 platforms | 120 | ~$11.52 |
| 20 keywords × 2 queries × 2 platforms | 80 | ~$7.68 |
| Quick spot-check: 5 keywords × 1 query × 2 platforms | 10 | ~$0.96 |

### Platform Coverage

| Platform | Model | Search method |
|---|---|---|
| Perplexity | Sonar | Native real-time web search with source citations |
| ChatGPT | GPT-4o Search Preview | OpenAI web search with inline citations |
| Claude | Claude Sonnet 4.5 | `web_search_20250305` live tool via OpenRouter |
| Gemini | Gemini 2.5 Flash | Native Google Search grounding (direct Google API) |

All four platforms perform **live web search** — results reflect current AI overview content, not static training data.

### Query Templates

The actor supports six purchase-intent query templates designed to trigger commercial AI overviews:

| Template | Example query generated |
|---|---|
| `best_of` | "What are the best [keyword] solutions available in 2026?" |
| `comparison` | "How do the leading [keyword] platforms compare to each other?" |
| `how_to_choose` | "How should a business choose the right [keyword] solution?" |
| `buyer_intent` | "What [keyword] solution do most companies use and why?" |
| `feature_query` | "What features should I look for in a good [keyword] platform?" |
| `versus` | "[brand] vs alternatives for [keyword] — which do experts recommend?" |

You can also provide `customQueries` with `{keyword}` and `{brand}` placeholders for fully custom questions.

### AI-Agent & MCP Usage

This actor is designed as a first-class MCP tool for AI agents. In Claude, ChatGPT, or any MCP-compatible agent:

````

Tool: apify--ai-overviews-tracker

Input: {
"brandName": "HubSpot",
"keywords": \["best CRM for small business", "email marketing software"],
"competitors": \["Salesforce", "Pipedrive", "ActiveCampaign"],
"platforms": \["perplexity", "chatgpt"],
"maxQueriesPerKeyword": 2
}

````

The actor returns structured JSON — brand visibility scores, competitor comparison, per-keyword breakdown — directly consumable by agents building GEO reports or competitive intelligence pipelines.

**Input aliases for agents** (all accepted equally):
- `brandName` → also accepts: `brand`, `company`, `product`, `name`
- `keywords` → also accepts: `keyword`, `topics`, `searchTerms`, `queries`
- `competitors` → also accepts: `competitorBrands`, `rivals`, `alternatives`

### Usage Examples

#### Quick brand spot-check

```json
{
  "brandName": "Notion",
  "keywords": ["best project management tools", "note-taking apps for teams"],
  "competitors": ["Obsidian", "Confluence", "Monday.com"],
  "platforms": ["perplexity", "chatgpt"],
  "maxQueriesPerKeyword": 1
}
````

#### Full GEO audit

```json
{
  "brandName": "Stripe",
  "keywords": [
    "best payment processing software",
    "online payment gateway comparison",
    "payment API for developers",
    "ecommerce payment solutions",
    "SaaS billing software"
  ],
  "competitors": ["PayPal", "Braintree", "Square", "Adyen"],
  "platforms": ["perplexity", "chatgpt", "claude", "gemini"],
  "queryTemplates": ["best_of", "comparison", "how_to_choose", "versus"],
  "maxQueriesPerKeyword": 3,
  "responseFormat": "detailed",
  "webhookUrl": "https://hooks.zapier.com/hooks/catch/..."
}
```

#### Custom competitor comparison

```json
{
  "brandName": "Figma",
  "keywords": ["UI design tools", "prototyping software"],
  "competitors": ["Sketch", "Adobe XD", "Canva"],
  "queryTemplates": ["versus", "best_of"],
  "customQueries": ["What design tool do product teams prefer for {keyword} in 2026?"],
  "maxQueriesPerKeyword": 2
}
```

### How Brand Detection Works

The actor uses sentence-level analysis (not just keyword matching) to precisely identify brand mentions and context:

1. **Mention detection**: Splits the AI response into sentences, finds the first sentence containing your brand name (case-insensitive).
2. **Position tracking**: Records the sentence number (1-based) where the brand appears — earlier = AI sees you as a primary option.
3. **Recommendation detection**: Checks for recommendation phrases ("recommended", "top pick", "consider", "go with", "#1", "ideal for") within 200 characters of the brand mention.
4. **Sentiment analysis**: Measures positive vs negative signal words in the 2-3 sentence window around the brand mention.
5. **Share of voice**: Counts your brand's mentions vs all competitor mentions in the same overview to compute SOV (0–1).

### How Share of Voice is Calculated

`share_of_voice = brand_mentions / (brand_mentions + all_competitor_mentions)` per check.

- **1.0** = only your brand mentioned in the overview (no competitors)
- **0.5** = your brand and one competitor mentioned equally
- **0.0** = brand absent from the overview

The run summary reports average SOV across all checks for each brand/competitor.

### Webhook Integration

Send results to any HTTP endpoint when the run completes:

```json
{
  "webhookUrl": "https://hooks.slack.com/services/...",
  "brandName": "Ahrefs",
  "keywords": ["SEO software", "backlink analysis tools"]
}
```

The POST payload is the full `LAST_RUN_SUMMARY` object — brand visibility scores, competitor threats, recommendations — ready for Slack notifications, Make.com workflows, or n8n automations.

### Related Actors (AI Search Intelligence Suite)

| Actor | What it tracks | Best for |
|---|---|---|
| [AI Brand Monitor](https://apify.com/khadinakbar/ai-search-brand-monitor) | Brand name mentions in informational AI answers | Brand/PR teams |
| [AI Search Visibility Tracker](https://apify.com/khadinakbar/ai-search-visibility-tracker) | Domain cited as source in AI answers | SEO/AEO teams |
| **AI Overviews Tracker** (this actor) | Brand in commercial AI overview boxes | GEO/marketing teams |

Run all three together for a complete AI search presence picture: reputation + source authority + commercial visibility.

### Legal Disclaimer

This actor queries AI platforms (Perplexity, OpenAI, Anthropic, Google) through their public APIs and OpenRouter. Use is subject to each platform's Terms of Service. The actor is intended for legitimate brand monitoring and competitive intelligence purposes. Results reflect AI-generated content at the time of the run and may vary across subsequent runs. Apify and the actor developer are not affiliated with Perplexity, OpenAI, Anthropic, or Google.

# Actor input Schema

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

Your brand, product, or company name to track in AI-generated overviews. The actor detects mentions, recommendation phrases, and sentiment for this exact name. Example: 'HubSpot', 'Notion', 'Figma', 'Stripe'. NOT a domain name (use ai-search-visibility-tracker for domain citation tracking) — this field expects the brand name humans and AI would use in sentences.

## `keywords` (type: `array`):

Purchase-intent or commercial keywords to submit to AI platforms as overview queries. Each keyword generates queries like 'best \[keyword] tools' or 'how to choose \[keyword]'. Example: \['best CRM for small business', 'email marketing software', 'project management tools']. NOT brand names — enter the product category or use case your brand serves. Supports up to 20 keywords per run.

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

Competitor brand names to compare against your brand in AI overviews. The actor tracks whether each competitor is mentioned, recommended, and at what position — and computes share of voice (your brand's mentions vs total brand+competitor mentions). Example: \['Salesforce', 'Pipedrive', 'Monday.com']. NOT domains — enter brand names as they appear in sentences. Leave empty to skip competitor comparison.

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

Which AI platforms to check for brand visibility in overviews. Valid values: 'perplexity' (Sonar with real-time citations), 'chatgpt' (GPT-4o Search Preview), 'claude' (Claude Sonnet with web\_search tool), 'gemini' (Gemini 2.5 Flash with Google Search grounding). All four use live web search — results reflect current AI overview content. Defaults to all four platforms.

## `queryTemplates` (type: `array`):

Built-in purchase-intent query templates to generate for each keyword. Options: 'best\_of' (best \[keyword] solutions in 2026), 'comparison' (how do leading \[keyword] platforms compare), 'how\_to\_choose' (how to select the right \[keyword] for your business), 'buyer\_intent' (what \[keyword] do most companies use), 'feature\_query' (what features matter in a good \[keyword]), 'versus' (your brand vs alternatives for \[keyword] — requires brandName). Defaults to best\_of, comparison, how\_to\_choose.

## `customQueries` (type: `array`):

Specific questions to submit verbatim to all AI platforms for every keyword. Supports {keyword} and {brand} placeholders (e.g., 'What do industry analysts say about {brand} for {keyword}?'). These run in addition to queryTemplates. Example: 'What are the most recommended {keyword} tools for enterprise use?'. NOT URLs — provide full question strings in plain English.

## `maxQueriesPerKeyword` (type: `integer`):

Maximum number of distinct queries to run per keyword across all templates. Each query × platform = one check billed at $0.096. Default is 3 queries/keyword — covers best\_of + comparison + how\_to\_choose at one query each. Set to 5–6 for deeper coverage including buyer\_intent and feature\_query. Lower to 1–2 for fast overview spot-checks.

## `responseFormat` (type: `string`):

Controls the length of the overview\_excerpt field stored per result. 'concise' stores the first 300 characters of the AI response — faster to review and lower storage. 'detailed' stores the first 550 characters — better for reading the full brand context and competitor mentions. Does not affect what is tracked or scored — only the excerpt length.

## `webhookUrl` (type: `string`):

An HTTPS endpoint that receives a POST request when the run completes. Payload is the full run summary JSON including brand\_visibility\_score, overview\_presence\_score, competitor\_threats, share\_of\_voice map, keyword\_scores, and recommendations. Compatible with Make.com, Zapier, n8n, Slack incoming webhooks, and any HTTP endpoint that accepts JSON.

## `demoMode` (type: `boolean`):

Set to true to verify the actor is functional without making any AI API calls and without consuming credits. The actor exits immediately with a success message. Use for integration testing, scheduling health checks, or MCP tool validation in CI pipelines. Set to false (default) for real brand visibility tracking runs.

## Actor input object example

```json
{
  "brandName": "HubSpot",
  "platforms": [
    "perplexity",
    "chatgpt",
    "claude",
    "gemini"
  ],
  "queryTemplates": [
    "best_of",
    "comparison",
    "how_to_choose"
  ],
  "maxQueriesPerKeyword": 3,
  "responseFormat": "detailed",
  "demoMode": false
}
```

# Actor output Schema

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

One record per keyword × query × platform combination. Tracks brand presence, position, recommendation status, sentiment, and competitor share of voice in AI overview boxes.

# 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": "HubSpot"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/ai-overviews-tracker").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": "HubSpot" }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/ai-overviews-tracker").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": "HubSpot"
}' |
apify call khadinakbar/ai-overviews-tracker --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AI Overviews Tracker — Brand Visibility in AI Answers",
        "description": "Track brand mention rate, sentiment & share of voice in AI-generated overviews. Perplexity, ChatGPT, Claude & Gemini. GEO & brand monitoring audit.",
        "version": "1.0",
        "x-build-id": "STgE3271Cgd5fINzC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~ai-overviews-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-ai-overviews-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~ai-overviews-tracker/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-ai-overviews-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~ai-overviews-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-ai-overviews-tracker",
                "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",
                    "keywords"
                ],
                "properties": {
                    "brandName": {
                        "title": "Brand / product name to track",
                        "type": "string",
                        "description": "Your brand, product, or company name to track in AI-generated overviews. The actor detects mentions, recommendation phrases, and sentiment for this exact name. Example: 'HubSpot', 'Notion', 'Figma', 'Stripe'. NOT a domain name (use ai-search-visibility-tracker for domain citation tracking) — this field expects the brand name humans and AI would use in sentences."
                    },
                    "keywords": {
                        "title": "Commercial keywords to query",
                        "type": "array",
                        "description": "Purchase-intent or commercial keywords to submit to AI platforms as overview queries. Each keyword generates queries like 'best [keyword] tools' or 'how to choose [keyword]'. Example: ['best CRM for small business', 'email marketing software', 'project management tools']. NOT brand names — enter the product category or use case your brand serves. Supports up to 20 keywords per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "competitors": {
                        "title": "Competitor brand names (optional)",
                        "type": "array",
                        "description": "Competitor brand names to compare against your brand in AI overviews. The actor tracks whether each competitor is mentioned, recommended, and at what position — and computes share of voice (your brand's mentions vs total brand+competitor mentions). Example: ['Salesforce', 'Pipedrive', 'Monday.com']. NOT domains — enter brand names as they appear in sentences. Leave empty to skip competitor comparison.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "platforms": {
                        "title": "AI platforms to query",
                        "type": "array",
                        "description": "Which AI platforms to check for brand visibility in overviews. Valid values: 'perplexity' (Sonar with real-time citations), 'chatgpt' (GPT-4o Search Preview), 'claude' (Claude Sonnet with web_search tool), 'gemini' (Gemini 2.5 Flash with Google Search grounding). All four use live web search — results reflect current AI overview content. Defaults to all four platforms.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "perplexity",
                            "chatgpt",
                            "claude",
                            "gemini"
                        ]
                    },
                    "queryTemplates": {
                        "title": "Query template categories",
                        "type": "array",
                        "description": "Built-in purchase-intent query templates to generate for each keyword. Options: 'best_of' (best [keyword] solutions in 2026), 'comparison' (how do leading [keyword] platforms compare), 'how_to_choose' (how to select the right [keyword] for your business), 'buyer_intent' (what [keyword] do most companies use), 'feature_query' (what features matter in a good [keyword]), 'versus' (your brand vs alternatives for [keyword] — requires brandName). Defaults to best_of, comparison, how_to_choose.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "best_of",
                            "comparison",
                            "how_to_choose"
                        ]
                    },
                    "customQueries": {
                        "title": "Custom queries (optional)",
                        "type": "array",
                        "description": "Specific questions to submit verbatim to all AI platforms for every keyword. Supports {keyword} and {brand} placeholders (e.g., 'What do industry analysts say about {brand} for {keyword}?'). These run in addition to queryTemplates. Example: 'What are the most recommended {keyword} tools for enterprise use?'. NOT URLs — provide full question strings in plain English.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxQueriesPerKeyword": {
                        "title": "Max queries per keyword",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of distinct queries to run per keyword across all templates. Each query × platform = one check billed at $0.096. Default is 3 queries/keyword — covers best_of + comparison + how_to_choose at one query each. Set to 5–6 for deeper coverage including buyer_intent and feature_query. Lower to 1–2 for fast overview spot-checks.",
                        "default": 3
                    },
                    "responseFormat": {
                        "title": "Response format",
                        "enum": [
                            "concise",
                            "detailed"
                        ],
                        "type": "string",
                        "description": "Controls the length of the overview_excerpt field stored per result. 'concise' stores the first 300 characters of the AI response — faster to review and lower storage. 'detailed' stores the first 550 characters — better for reading the full brand context and competitor mentions. Does not affect what is tracked or scored — only the excerpt length.",
                        "default": "detailed"
                    },
                    "webhookUrl": {
                        "title": "Webhook URL (optional)",
                        "type": "string",
                        "description": "An HTTPS endpoint that receives a POST request when the run completes. Payload is the full run summary JSON including brand_visibility_score, overview_presence_score, competitor_threats, share_of_voice map, keyword_scores, and recommendations. Compatible with Make.com, Zapier, n8n, Slack incoming webhooks, and any HTTP endpoint that accepts JSON."
                    },
                    "demoMode": {
                        "title": "Demo / health check mode",
                        "type": "boolean",
                        "description": "Set to true to verify the actor is functional without making any AI API calls and without consuming credits. The actor exits immediately with a success message. Use for integration testing, scheduling health checks, or MCP tool validation in CI pipelines. Set to false (default) for real brand visibility tracking runs.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
