# AI Search Visibility Tracker: ChatGPT, Gemini, AI Overviews (`kaz_kakyo/ai-search-visibility`) Actor

Track brand mentions, mention order, cited sites and share of voice across ChatGPT, Gemini and Google AI Overviews. Monitor AI search visibility (GEO) against competitors. $0.03 per captured answer plus Apify's run-start fee; blocked or missing answers incur no answer charge.

- **URL**: https://apify.com/kaz_kakyo/ai-search-visibility.md
- **Developed by:** [Heim](https://apify.com/kaz_kakyo) (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 $30.00 / 1,000 ai answer checkeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AI Search Visibility Tracker: ChatGPT, Gemini, AI Overviews

See how AI assistants answer the questions your buyers ask, and whether they name your brand.

For each prompt (for example *"What is the best CRM for a small business?"*), the actor asks **ChatGPT**, **Gemini** and **Google's AI Overview** and returns one row per answer with:

- **Which of your brands were named**, how often, and in what order (`position` 1 = named first)
- **Which sites the answer cited**, and whether your own domains were among them
- The full answer text (optional)

The run summary adds **share of voice** for every brand, overall and per engine: the share of answers that mention it, its average position, and how often it was named first.

Use it to track generative engine optimisation (GEO) over time, benchmark against competitors, or check which publications AI answers rely on in your category. Schedule it weekly on Apify to build a trend. No accounts, API keys or logins needed.

### How much does it cost?

| Event | Price | When |
|---|---|---|
| `answer-checked` | $0.03 | One captured AI answer (one prompt on one engine), analysed and delivered |

10 prompts on all three engines cost at most **$0.90** per run. Apify also bills its start event (`apify-actor-start`): $0.00005 per GB of run memory, so $0.0001 per run at the default 2 GB.

You are **not** charged when an engine blocks, times out or replies with an error instead of an answer, when Google shows no AI Overview for a prompt, when an overview could not be captured, or for duplicate prompts. Every such outcome is listed in the free **status** dataset.

### Input

| Field | Example | Notes |
|---|---|---|
| `prompts` | `["What is the best CRM for a small business?"]` | Up to 25 per run, 500 characters each |
| `brands` | `["HubSpot \| HubSpot CRM", "Salesforce", "Zoho"]` | Your brand and competitors, up to 20. Add spelling variants after `\|` |
| `engines` | `["chatgpt", "gemini", "google-ai-overview"]` | Any subset |
| `trackedDomains` | `["hubspot.com", "zoho.com"]` | Optional: domains to look for in citations (subdomains count) |
| `includeAnswerText` | `true` | Turn off for smaller datasets |

Brand matching ignores case and matches whole words only, so "Zoho" does not match "Zohodesk".

### Output

```json
{
  "engine": "chatgpt",
  "prompt": "What is the best CRM for a small business?",
  "brandsMentioned": ["HubSpot", "Zoho", "Pipedrive"],
  "firstBrandMentioned": "HubSpot",
  "brandResults": [
    { "brand": "HubSpot", "mentioned": true, "mentions": 2, "position": 1 },
    { "brand": "Salesforce", "mentioned": false, "mentions": 0, "position": null },
    { "brand": "Zoho", "mentioned": true, "mentions": 1, "position": 2 },
    { "brand": "Pipedrive", "mentioned": true, "mentions": 1, "position": 3 }
  ],
  "citedDomains": ["pcmag.com", "zapier.com"],
  "trackedDomainsCited": [],
  "citations": [{ "url": "https://www.pcmag.com/picks/the-best-small-business-crm-software", "domain": "pcmag.com" }],
  "answerChars": 3284,
  "answerText": "For most small businesses, I recommend HubSpot CRM…",
  "checkedAt": "2026-10-16T09:00:00.000Z"
}
```

Google AI Overview rows also carry `sourceNames`: the source labels and link titles Google shows with the overview (for example "PCMag" or "Best CRM for Small Business in 2026 | Slack").

The share-of-voice summary is saved as `OUTPUT` in the run's key-value store.

### Honest limits

- **Logged-out answers from a US data-centre address.** ChatGPT and Gemini are asked in a fresh, logged-out browser session, with no history or personalisation. Signed-in users, other countries and paid plans can see different answers.
- **Answers vary.** The same prompt can get a different answer an hour later. Track trends over several runs rather than reading too much into one answer.
- **Gemini answers have no links** when logged out, so Gemini rows have no citations.
- **Google AI Overview:** US English results only. The answer text is the part of the overview Google shows before "Show more"; brand mentions are counted in that text, while citations cover every source attached to the overview. When Google hides a source's article link behind an encrypted redirect, the citation is the publisher's homepage: the domain is exact, the page is not. For some prompts Google builds the overview in the browser after the page loads; those are reported as `ai_overview_not_captured` and are free.
- **Not covered:** Perplexity and Google AI Mode. Both require sign-in or block automated access.
- **Speed:** each ChatGPT or Gemini answer takes about 30 seconds. The engines run in parallel, so 25 prompts take roughly 15–20 minutes.

### Telemetry

When telemetry is configured, each run records anonymous usage events to the developer's own storage: a salted hash of the caller account ID (never the raw ID), whether the caller is on a paid plan, the run ID, the run origin (e.g. web console vs API), timestamps, and the number of charged events. No prompts, brands, answers or other inputs and results are collected; this only measures adoption (distinct and returning users) and revenue.

# Actor input Schema

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

Questions your buyers ask an AI assistant, for example "What is the best CRM for a small business?". Each prompt is asked once per engine. Up to 25 per run, 500 characters each.

## `brands` (type: `array`):

Your brand and competitors. Add spelling variants after a | sign, for example "HubSpot | HubSpot CRM". Matching ignores case and whole-word only. Up to 20.

## `engines` (type: `array`):

chatgpt (chatgpt.com, logged out), gemini (gemini.google.com, logged out), google-ai-overview (the AI Overview on a Google results page, US English).

## `trackedDomains` (type: `array`):

Optional. Your site and competitors' sites, for example "hubspot.com". Each answer row lists which of these the answer cited (subdomains count). Up to 20.

## `includeAnswerText` (type: `boolean`):

Keep the full answer in each row. Turn off for smaller datasets; brand and citation results are always included.

## Actor input object example

```json
{
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "brands": [
    "HubSpot",
    "Salesforce",
    "Zoho",
    "Pipedrive"
  ],
  "engines": [
    "chatgpt",
    "gemini",
    "google-ai-overview"
  ],
  "includeAnswerText": true
}
```

# Actor output Schema

## `answers` (type: `string`):

One row per prompt and engine: brands mentioned, their order, citations and the answer text.

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

Per-brand mention rate, average position and first-place count, overall and per engine, plus every outcome count.

# 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 = {
    "prompts": [
        "What is the best CRM for a small business?"
    ],
    "brands": [
        "HubSpot",
        "Salesforce",
        "Zoho",
        "Pipedrive"
    ],
    "engines": [
        "chatgpt",
        "gemini",
        "google-ai-overview"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaz_kakyo/ai-search-visibility").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 = {
    "prompts": ["What is the best CRM for a small business?"],
    "brands": [
        "HubSpot",
        "Salesforce",
        "Zoho",
        "Pipedrive",
    ],
    "engines": [
        "chatgpt",
        "gemini",
        "google-ai-overview",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("kaz_kakyo/ai-search-visibility").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "brands": [
    "HubSpot",
    "Salesforce",
    "Zoho",
    "Pipedrive"
  ],
  "engines": [
    "chatgpt",
    "gemini",
    "google-ai-overview"
  ]
}' |
apify call kaz_kakyo/ai-search-visibility --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kaz_kakyo/ai-search-visibility"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/RYovwcz6fO5b8cfzX/builds/4iTGNicsyhG9DFeSO/openapi.json
