# Google AI Overview Brand Monitor (`leohryndev/google-ai-overview-brand-monitor`) Actor

Check any keyword list for Google AI Overviews — plus Google AI Mode and Brave AI — and see whether YOUR brand gets cited, or your competitors. Full answers, all citations, share of voice, gap keywords, cross-engine comparison, change alerts. Built for GEO/AEO reporting and scheduling.

- **URL**: https://apify.com/leohryndev/google-ai-overview-brand-monitor.md
- **Developed by:** [Leo Hryn](https://apify.com/leohryndev) (community)
- **Categories:** SEO tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 query analyzeds

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

## Google AI Overview Brand Monitor — Multi-Engine GEO / AEO Tracker (AI Overviews + AI Mode + Brave)

**Is your brand visible in Google's AI answers?** This Actor checks any list of keywords for Google **AI Overviews** — and optionally **Google AI Mode**, the conversational search tab — and tells you — per keyword and in an aggregate report — whether **your brand gets cited**, whether **competitors get cited instead**, and where the **gaps and opportunities** are. Built for SEO agencies, in-house SEO teams, and anyone doing **Generative Engine Optimization (GEO)** or **Answer Engine Optimization (AEO)**.

Classic rank tracking is no longer enough: when Google shows an AI Overview, it absorbs most of the clicks. The new question every client asks is *"does the AI mention us?"* — this Actor answers it, at scale, on a schedule.

### What it does

For every keyword you provide, the Actor:

1. Runs a real Google search (country + language of your choice, via residential proxies in that country).
2. Detects whether an **AI Overview** is shown.
3. Extracts the **full AI Overview answer text** (structured into paragraphs, headings, and list items).
4. Extracts **every cited source** — URL, domain, title, and citation position.
5. Extracts the **top classic organic results** so you can compare AI visibility vs. organic rankings.
6. Analyzes **brand visibility**: is your domain cited? Is your brand name mentioned in the answer text? Which competitors are cited, and where?
7. **Optionally checks Google AI Mode too** (`includeAiMode`): full conversational answer, comparison tables (parsed into structured data — brands usually appear right there), every cited source, and the same brand/competitor analysis. You see where AI Overviews and AI Mode disagree about your brand — they often do.
8. Builds an **aggregate report**: AI Overview coverage rate, brand citation rate, competitor share of voice, top-cited domains in your niche, **gap keywords** (competitor cited, you absent) and **opportunity keywords** (you rank top-10 organically but are invisible in the AI answer).

### Why teams use it

- **Agency reporting** — add an "AI visibility" section to every monthly SEO report. Clients ask for this now.
- **GEO/AEO strategy** — find the exact keywords where competitors are cited and you are not, then fix the content gap.
- **Content strategy** — the top-cited-domains report shows which sites Google's AI trusts in your niche; study and out-do them.
- **Monitoring** — schedule daily/weekly runs and watch your AI citation rate move as you publish.
- **Research** — the full answer text + citations is a clean dataset for any AI-search analysis.

### Input example

```json
{
    "queries": ["best crm for small business", "hubspot alternatives", "email marketing software"],
    "brandDomains": ["hubspot.com"],
    "brandNames": ["HubSpot"],
    "competitorDomains": ["salesforce.com", "zoho.com", "pipedrive.com"],
    "competitorNames": ["Salesforce", "Zoho", "Pipedrive"],
    "countryCode": "us",
    "languageCode": "en"
}
````

Works for any country/language combination where Google shows AI Overviews (US, UK, most of Europe including Spanish/German/French/Italian/Portuguese queries, India, Japan, Brazil, and more).

### Output example (per keyword)

```json
{
    "kind": "query-result",
    "query": "hubspot alternatives",
    "countryCode": "us",
    "languageCode": "en",
    "aiOverviewPresent": true,
    "aiOverviewText": "Pipedrive: Best for sales teams seeking simplicity. Pricing starts at roughly $14–15 per user/month...",
    "textBlocks": [
        { "type": "list_item", "text": "Pipedrive: Best for sales teams seeking simplicity..." }
    ],
    "citations": [
        { "position": 1, "url": "https://www.zoho.com/crm/", "domain": "zoho.com", "title": "Zoho CRM" },
        { "position": 2, "url": "https://reevo.ai/...", "domain": "reevo.ai", "title": "reevo.ai" }
    ],
    "citationCount": 8,
    "organicResults": [
        { "position": 1, "url": "https://...", "domain": "...", "title": "..." }
    ],
    "brandAnalysis": {
        "brandCited": false,
        "brandMentionedInText": true,
        "brandTextMentions": ["HubSpot"],
        "competitorsCited": { "zoho.com": [1], "pipedrive.com": [5] },
        "brandOrganicRank": { "hubspot.com": 2 },
        "competitorOrganicRanks": { "zoho.com": 4 }
    }
}
```

### Aggregate report (last dataset row + run OUTPUT)

```json
{
    "kind": "summary",
    "totals": {
        "queriesAnalyzed": 50,
        "aiOverviewPresent": 38,
        "aiOverviewRate": 0.76,
        "brandCited": 11,
        "brandCitationRate": 0.289
    },
    "shareOfVoice": {
        "brand": { "domains": ["hubspot.com"], "citedOnQueries": 11 },
        "competitors": { "salesforce.com": 17, "zoho.com": 9 }
    },
    "topCitedDomains": [ { "domain": "zapier.com", "citations": 21 } ],
    "gapKeywords": [
        { "query": "hubspot alternatives", "competitorsCited": ["zoho.com"], "brandOrganicRank": { "hubspot.com": 2 } }
    ],
    "opportunityKeywords": [
        { "query": "crm with email automation", "brandOrganicRank": { "hubspot.com": 3 } }
    ]
}
```

`gapKeywords` = the keywords to attack first: a competitor is cited in the AI answer and you are not. `opportunityKeywords` = you already rank top-10 organically, but the AI ignores you — usually a content-format problem, and usually fixable.

### Three AI surfaces, one report — and they disagree

Turn on `includeAiMode` and `includeBrave` and every keyword is checked on **three** AI answer surfaces: Google AI Overviews, Google AI Mode (the conversational tab), and Brave Search's "Answer with AI". Each row then carries a `crossEngine` block:

```json
"crossEngine": {
    "enginesWithAnswer": ["aiOverview", "aiMode", "brave"],
    "enginesCitingBrand": ["aiOverview"],
    "brandCitedOnAllEngines": false,
    "citationOverlap": { "aiOverview_vs_aiMode": 0.16, "aiOverview_vs_brave": 0.05 }
}
```

Why it matters: in our own 25-keyword study, **Google's AI Overviews and AI Mode shared only ~16% of their cited sources** (every comparable query was under 25% overlap). Being cited on one surface tells you almost nothing about the others. Each extra engine bills as one additional analyzed query — so a 3-engine check costs 3 units.

### Change tracking (for scheduled monitoring)

Set `trackChanges: true` and each run is compared to the previous one (per `trackingKey`). You get a `changes` report row listing, per keyword: **brand citations GAINED or LOST**, AI Overviews **appearing or disappearing**, citation-set diffs, and **new competitor citations**. This is the "did our AI visibility move?" alert every scheduled run should carry — and it's free (no extra charge). Pipe `brandCitationsLost` to a Slack alert and you'll know the moment Google drops you from an answer.

### Scheduling & integrations

- **Schedule it** — run daily/weekly from the Apify Console (Schedules → cron). Each run appends fresh rows, so you get a time series of your AI visibility.
- **API** — start runs and fetch results from any language (`POST /v2/acts/.../runs`); see the API tab.
- **Google Sheets / Looker Studio** — export the dataset as CSV/JSON or connect via the Apify Google Sheets integration for live dashboards.
- **n8n / Make / Zapier** — trigger runs and pipe `gapKeywords` into Slack alerts, client reports, or task managers.
- **MCP / AI agents** — this Actor works as an MCP tool: your Claude/agents can call it directly ("check if brand X is cited for these 20 keywords").

### Pricing

Pay per keyword analyzed. Each analyzed keyword includes: AI Overview detection + full text + all citations + organic comparison + its slice of the aggregate report. With `includeAiMode: true`, the AI Mode analysis bills as one additional analyzed query per keyword. No subscription, no minimums — pay only for what you run.

### FAQ

**Is scraping Google search results legal?** This Actor only collects publicly available search results — the same pages any user sees. It collects no personal data and accesses nothing behind a login. Publicly available SERP data collection is standard industry practice (rank trackers have done it for 20+ years).

**Why do some keywords show no AI Overview?** Google doesn't show AI Overviews for every query — coverage varies by topic, country, and language. That's data too: the report tells you what share of your keyword set triggers AI answers at all.

**Does it work outside the US?** Yes. Set `countryCode`/`languageCode` (e.g. `de`/`de`, `es`/`es`, `gb`/`en`). Requests are routed through residential proxies in the target country, so you see what a real local user sees.

**How accurate are the citations?** Citations are extracted directly from the AI Overview block, deduplicated, in on-page order. The Actor uses a two-tier fetch: a fast HTTP tier, plus a real-browser verification tier that expands "Show more" to reveal the full citation set whenever the fast tier can't already confirm your brand's citation status — so "brand not cited" verdicts are always browser-verified (no cheap false negatives).

**How is this different from a plain "AI Overview scraper"?** Plain scrapers give you raw overview text per query. This Actor is built for the actual workflow: brand + competitor analysis, share of voice, gap/opportunity keyword detection, and report-ready aggregates — the deliverable an SEO team needs, not just raw HTML soup.

**Does it cover Google AI Mode?** Yes — set `includeAiMode: true`. Each keyword then gets a second analysis of the AI Mode tab: answer text, structured comparison tables, all cited sources, brand/competitor visibility. An AI Mode check counts as one additional analyzed query in pricing. Multi-engine tracking (Perplexity, Bing Copilot) is next on the roadmap.

***

*Keywords: Google AI Overview scraper, AI Overview tracker, AI Overview API, brand monitoring AI search, GEO tool, generative engine optimization, AEO, answer engine optimization, AI SEO, LLM visibility, AI share of voice, track brand in Google AI, AI citation tracker, SGE tracker.*

# Actor input Schema

## `queries` (type: `array`):

Search queries to check for AI Overviews (one per line). Example: your money keywords, category terms, comparison queries your buyers search.

## `brandDomains` (type: `array`):

Domains that count as YOUR brand when they appear in AI Overview citations, e.g. `yourbrand.com`. Subdomains match automatically.

## `brandNames` (type: `array`):

Optional brand names to detect as plain-text mentions inside the AI Overview answer (case-insensitive), e.g. `HubSpot`.

## `competitorDomains` (type: `array`):

Competitor domains to track in citations, e.g. `salesforce.com`, `zoho.com`.

## `competitorNames` (type: `array`):

Optional competitor names to detect as plain-text mentions inside the AI Overview answer.

## `countryCode` (type: `string`):

Google country (gl parameter + proxy country). Two-letter code, e.g. `us`, `gb`, `de`, `es`, `fr`.

## `languageCode` (type: `string`):

Google UI language (hl parameter), e.g. `en`, `de`, `es`, `fr`, `pt-BR`.

## `includeAiMode` (type: `boolean`):

Additionally analyze Google's AI Mode (the conversational search tab) for each keyword: full answer, comparison tables, all cited sources, and brand/competitor visibility. Counts as a second analyzed query per keyword.

## `includeBrave` (type: `boolean`):

Additionally analyze Brave Search's 'Answer with AI' for each keyword — a second search engine with its own AI answer and a different citation set. Counts as one more analyzed query per keyword. Adds cross-engine comparison to every row.

## `trackChanges` (type: `boolean`):

Remember each run's results and report what changed since last time: brand citations GAINED/LOST per keyword, AI Overviews appearing/disappearing, new competitor citations. Ideal for scheduled monitoring — free, no extra charge.

## `trackingKey` (type: `string`):

Namespace for change tracking. Use a different key per client/keyword set.

## `includeOrganicResults` (type: `boolean`):

Also extract the top classic organic results for each query, so you can compare AI visibility vs organic rankings (spot keywords where you rank #1 organically but are invisible in the AI answer).

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

How many queries to process in parallel.

## `browserFallback` (type: `boolean`):

When the fast HTTP tier finds no AI Overview for a query, verify with a real browser (AI Overviews sometimes render only client-side). More accurate, slightly slower. Disable for maximum speed/cheapness.

## `debugSaveHtml` (type: `boolean`):

Store fetched SERP HTML into the key-value store for troubleshooting.

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

Proxy for the browser tier. Residential proxies in the target country are strongly recommended (default).

## Actor input object example

```json
{
  "queries": [
    "best crm for small business",
    "hubspot vs salesforce",
    "email marketing software"
  ],
  "brandDomains": [
    "hubspot.com"
  ],
  "brandNames": [
    "HubSpot"
  ],
  "competitorDomains": [
    "salesforce.com",
    "zoho.com",
    "pipedrive.com"
  ],
  "competitorNames": [
    "Salesforce",
    "Zoho",
    "Pipedrive"
  ],
  "countryCode": "us",
  "languageCode": "en",
  "includeAiMode": false,
  "includeBrave": false,
  "trackChanges": false,
  "trackingKey": "default",
  "includeOrganicResults": true,
  "maxConcurrency": 3,
  "browserFallback": true,
  "debugSaveHtml": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "queries": [
        "best crm for small business",
        "hubspot vs salesforce",
        "email marketing software"
    ],
    "brandDomains": [
        "hubspot.com"
    ],
    "brandNames": [
        "HubSpot"
    ],
    "competitorDomains": [
        "salesforce.com",
        "zoho.com",
        "pipedrive.com"
    ],
    "competitorNames": [
        "Salesforce",
        "Zoho",
        "Pipedrive"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leohryndev/google-ai-overview-brand-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 = {
    "queries": [
        "best crm for small business",
        "hubspot vs salesforce",
        "email marketing software",
    ],
    "brandDomains": ["hubspot.com"],
    "brandNames": ["HubSpot"],
    "competitorDomains": [
        "salesforce.com",
        "zoho.com",
        "pipedrive.com",
    ],
    "competitorNames": [
        "Salesforce",
        "Zoho",
        "Pipedrive",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leohryndev/google-ai-overview-brand-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 '{
  "queries": [
    "best crm for small business",
    "hubspot vs salesforce",
    "email marketing software"
  ],
  "brandDomains": [
    "hubspot.com"
  ],
  "brandNames": [
    "HubSpot"
  ],
  "competitorDomains": [
    "salesforce.com",
    "zoho.com",
    "pipedrive.com"
  ],
  "competitorNames": [
    "Salesforce",
    "Zoho",
    "Pipedrive"
  ]
}' |
apify call leohryndev/google-ai-overview-brand-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=leohryndev/google-ai-overview-brand-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google AI Overview Brand Monitor",
        "description": "Check any keyword list for Google AI Overviews — plus Google AI Mode and Brave AI — and see whether YOUR brand gets cited, or your competitors. Full answers, all citations, share of voice, gap keywords, cross-engine comparison, change alerts. Built for GEO/AEO reporting and scheduling.",
        "version": "1.0",
        "x-build-id": "M7HpajzUFOYIyF54q"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/leohryndev~google-ai-overview-brand-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-leohryndev-google-ai-overview-brand-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/leohryndev~google-ai-overview-brand-monitor/runs": {
            "post": {
                "operationId": "runs-sync-leohryndev-google-ai-overview-brand-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/leohryndev~google-ai-overview-brand-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-leohryndev-google-ai-overview-brand-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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Keywords / queries",
                        "minItems": 1,
                        "type": "array",
                        "description": "Search queries to check for AI Overviews (one per line). Example: your money keywords, category terms, comparison queries your buyers search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "brandDomains": {
                        "title": "Your brand domain(s)",
                        "type": "array",
                        "description": "Domains that count as YOUR brand when they appear in AI Overview citations, e.g. `yourbrand.com`. Subdomains match automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "brandNames": {
                        "title": "Your brand name(s)",
                        "type": "array",
                        "description": "Optional brand names to detect as plain-text mentions inside the AI Overview answer (case-insensitive), e.g. `HubSpot`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "competitorDomains": {
                        "title": "Competitor domain(s)",
                        "type": "array",
                        "description": "Competitor domains to track in citations, e.g. `salesforce.com`, `zoho.com`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "competitorNames": {
                        "title": "Competitor name(s)",
                        "type": "array",
                        "description": "Optional competitor names to detect as plain-text mentions inside the AI Overview answer.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countryCode": {
                        "title": "Country",
                        "pattern": "^[a-zA-Z]{2}$",
                        "type": "string",
                        "description": "Google country (gl parameter + proxy country). Two-letter code, e.g. `us`, `gb`, `de`, `es`, `fr`.",
                        "default": "us"
                    },
                    "languageCode": {
                        "title": "Language",
                        "type": "string",
                        "description": "Google UI language (hl parameter), e.g. `en`, `de`, `es`, `fr`, `pt-BR`.",
                        "default": "en"
                    },
                    "includeAiMode": {
                        "title": "Also check Google AI Mode",
                        "type": "boolean",
                        "description": "Additionally analyze Google's AI Mode (the conversational search tab) for each keyword: full answer, comparison tables, all cited sources, and brand/competitor visibility. Counts as a second analyzed query per keyword.",
                        "default": false
                    },
                    "includeBrave": {
                        "title": "Also check Brave AI answers",
                        "type": "boolean",
                        "description": "Additionally analyze Brave Search's 'Answer with AI' for each keyword — a second search engine with its own AI answer and a different citation set. Counts as one more analyzed query per keyword. Adds cross-engine comparison to every row.",
                        "default": false
                    },
                    "trackChanges": {
                        "title": "Track changes vs previous run",
                        "type": "boolean",
                        "description": "Remember each run's results and report what changed since last time: brand citations GAINED/LOST per keyword, AI Overviews appearing/disappearing, new competitor citations. Ideal for scheduled monitoring — free, no extra charge.",
                        "default": false
                    },
                    "trackingKey": {
                        "title": "Tracking key",
                        "type": "string",
                        "description": "Namespace for change tracking. Use a different key per client/keyword set.",
                        "default": "default"
                    },
                    "includeOrganicResults": {
                        "title": "Include top organic results",
                        "type": "boolean",
                        "description": "Also extract the top classic organic results for each query, so you can compare AI visibility vs organic rankings (spot keywords where you rank #1 organically but are invisible in the AI answer).",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many queries to process in parallel.",
                        "default": 3
                    },
                    "browserFallback": {
                        "title": "Browser verification for missing AI Overviews",
                        "type": "boolean",
                        "description": "When the fast HTTP tier finds no AI Overview for a query, verify with a real browser (AI Overviews sometimes render only client-side). More accurate, slightly slower. Disable for maximum speed/cheapness.",
                        "default": true
                    },
                    "debugSaveHtml": {
                        "title": "Save raw HTML (debug)",
                        "type": "boolean",
                        "description": "Store fetched SERP HTML into the key-value store for troubleshooting.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy for the browser tier. Residential proxies in the target country are strongly recommended (default).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
