# AI Brand Visibility Tracker — AI Overview & Perplexity (`aitorsm/ai-visibility-tracker`) Actor

Track whether ChatGPT, Google AI Overview, Perplexity, Gemini and Copilot mention your brand when buyers ask for a recommendation. Repeat checks give a real mention rate with a margin of error, plus who gets named instead, what changed since last week, and what each gap is worth.

- **URL**: https://apify.com/aitorsm/ai-visibility-tracker.md
- **Developed by:** [Aitor Sanchez-Mansilla](https://apify.com/aitorsm) (community)
- **Categories:** SEO tools, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $450.00 / 1,000 ai visibility checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Visibility Tracker — Brand Mentions in Google AI Overview & Perplexity

Your buyers have stopped searching and started asking. When someone asks ChatGPT, Google
AI Overview or Perplexity to recommend a tool like yours — does your name come up, or a
competitor's?

This tells you, with an honest margin of error rather than a number that only looks certain.

No subscription. No API keys. Pay for the checks you run.

### What you get

For every question, on every AI platform you pick:

- **How often you are mentioned** — as a rate across repeat checks, with a margin of error
- **Whether your site is cited as a source**, not just whether your name appears
- **Which competitors come up instead**, and how consistently
- **What changed since last time** — mentions up or down, new rivals, sources gained or lost
- **What the gap is worth**, using real monthly searches and what advertisers pay per click
- **A shareable summary report** — a standalone page with your overall mention rate, share of
  voice, the questions you are absent from ranked by value, and which assistants' citations
  are worth reading. Built from the measured numbers, not written by a language model.

### The thing nobody else tells you

Ask an AI assistant the same question twice and you often get two different answers.
Every other tracker asks once and reports the result as if it were a fact.

We ask several times and report what actually happened:

> **cited in 3 of 5 checks — 60%, somewhere between 23% and 88%**

That range is the honest part. It is the difference between "we slipped this week" and
"that is just normal variation", and you cannot tell them apart from a single check.

We also grade each platform separately. Google AI Overview and Perplexity are consistent
enough to trust. ChatGPT will reliably tell you *whether* you get mentioned, but the sources
it quotes change almost every time — so every result says which of its own numbers you
should rely on, in plain English.

### Try it free

Leave **See a free sample first** switched on and you get a complete example instantly —
no charge, no setup. Turn it off when you want to measure your own brand.

### Don't know what your buyers ask?

Most people guess badly at this. Leave the questions empty, enter one topic instead, and
the questions people genuinely ask about it are found for you and ranked by buying intent.

### Good for

- **Answer Engine Optimisation (AEO) and Generative Engine Optimisation (GEO)** — knowing
  where you stand before you spend on fixing it
- Proving to a client or a board that AI visibility work is or is not landing
- Catching a competitor the moment they start appearing in answers you used to own
- Deciding which topics deserve content next, weighted by what they are actually worth
- Watching a launch land — schedule it weekly and the trend builds itself

### Example

**Input**

```json
{
  "brand": "Notion",
  "brandDomain": "notion.so",
  "seedTopic": "project management software",
  "samples": 5,
  "surfaces": ["aiOverview", "perplexity"],
  "weightByDemand": true
}
```

**Output** — one row per question, per platform

```json
{
  "brand": "Notion",
  "query": "What is the best project management software?",
  "surface": "perplexity",
  "samples": 5,
  "mentionedIn": 3,
  "mentionRate": 0.6,
  "ciLow": 0.23,
  "ciHigh": 0.88,
  "confidence": "stable",
  "citationReliability": "reliable",
  "domainCitedIn": 2,
  "competitors": ["asana (5/5)", "monday.com (5/5)", "clickup (3/5)"],
  "citedDomains": ["reddit.com", "asana.com", "monday.com"],
  "previousMentionRate": 0.8,
  "mentionRateChange": -0.2,
  "newCompetitors": ["linear"],
  "monthlySearches": 33100,
  "avgCpcUsd": 22.4,
  "missedSearchesPerMonth": 13240,
  "gapValueUsd": 59315.2
}
```

Export to JSON, CSV or Excel, or feed it into a sheet, a dashboard or your own reporting.

### Frequently asked questions

**Is the report AI-generated?**
No. It is computed directly from the measured results — no language model touches it, so it
cannot invent a number. A model is used only to read brand names out of each AI answer.

**How is this different from the other AI visibility tools?**
Two things. Everyone else asks once and reports a rank; we ask several times and give you a
rate with a margin of error, because the underlying answers genuinely move. And we attach
real search volume and cost-per-click, so a gap comes with a number attached instead of a
score out of 100.

**Which AI platforms are covered?**
Google AI Overview, Perplexity, ChatGPT, Google Gemini, Microsoft Copilot and Google AI
Mode. The first two are on by default because they are the most consistent.

**Do I need an OpenAI key or any other account?**
No. Nothing to sign up for, nothing to configure, no keys of your own.

**Why does ChatGPT show as less reliable?**
Because it is, and we would rather say so. Ask it the same question repeatedly and the
websites it quotes are almost entirely different each time, though whether it names your
brand is far steadier. So mention rates from ChatGPT are usable; its source list is not,
and each result says which is which.

**How many checks should I run per question?**
Three is a good default. One gives you an impression with no error bar. Five narrows the
range noticeably. Ten is rarely worth the wait.

**Can I track competitors as well?**
Yes, and you do not have to name them — rivals are picked up from whatever the answers
actually recommend, which regularly surfaces names people were not expecting.

**Can I run it automatically?**
Yes. Schedule it weekly and each run reports what moved since the last one. Your history
stays on your own account.

**Does it work in other languages and countries?**
Yes. Answers differ by market, so set the country your customers are in. English gives the
richest AI answers today.

### Also worth a look

**[Google Rank Tracker](https://apify.com/aitorsm/google-rank-tracker)** — the classic
other half: where you rank in ordinary Google results, with the same real search volume and
cost-per-click attached.

# Actor input Schema

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

Returns a ready-made example straight away so you can see exactly what you get. Nothing is checked and nothing is charged. Switch this off to measure your own brand.

## `brand` (type: `string`):

The name you want to look for. It is matched against the brands each AI answer actually recommends — so if the answer says 'try Notion or Coda', both are recorded.

## `brandDomain` (type: `string`):

Adding this also tells you whether your own pages are being used as a source for the answer, not just whether your name is mentioned. Being cited is what sends you traffic.

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

The questions your buyers ask an AI assistant when they are looking for what you sell. Write them the way a real person would type them. One per line. Not sure what they ask? Leave this empty and fill in the topic below instead.

## `seedTopic` (type: `string`):

Enter one topic and we look up what people genuinely search around it, then keep the questions with real buying intent. Saves you guessing. Anything you typed above is always kept as well.

## `maxDiscoveredPrompts` (type: `integer`):

Only used with a topic above. Every question is checked on every platform you select, so a bigger number means a longer, costlier run.

## `samples` (type: `integer`):

AI assistants do not return the same answer twice, so one check is an anecdote. Repeat checks give a mention rate with a margin of error, letting you separate a real drop from normal variance. Five are included in the price — the minimum for a rate worth acting on. Beyond five, each additional check is billed.

## `surfaces` (type: `array`):

Google AI Overview and Perplexity return the most consistent answers and are on by default. ChatGPT and Copilot report brand mentions reliably, but the sources they cite change between identical queries — every row grades which of its own numbers to trust.

## `weightByDemand` (type: `boolean`):

Adds how many people search for each topic every month and what advertisers pay per click, then estimates what the questions you are missing from are costing you. Turns a list of gaps into a case you can take to a budget meeting.

## `assumedCtrPercent` (type: `integer`):

Only affects the estimated value above. 20 assumes one in five people act on seeing a brand. Lower it if you want a more cautious figure. The plain count of missed searches is always reported separately and assumes nothing.

## `report` (type: `boolean`):

Adds a run-level summary plus a shareable HTML report: overall mention rate weighted by search demand, share of voice, the questions you are absent from ranked by value, what the gap is worth monthly, and which assistants' citations are reliable.

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

Reports what moved since you last ran this: mentions up or down, competitors that have just appeared, sources you gained or lost. Your history is kept on your own account and never leaves it. Schedule this weekly and you get a trend line.

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

Leave empty and rivals are picked up automatically from whatever the answers actually recommend — which regularly turns up names you were not expecting.

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

Two-letter country code — answers differ by market (us, gb, es, de…).

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

Two-letter language code. AI answers are richest in English, so 'en' is recommended unless you specifically need another market.

## Actor input object example

```json
{
  "demoMode": true,
  "brand": "Notion",
  "brandDomain": "notion.so",
  "queries": [
    "What are the best web scraping tools?"
  ],
  "seedTopic": "project management software",
  "maxDiscoveredPrompts": 5,
  "samples": 2,
  "surfaces": [
    "aiOverview"
  ],
  "weightByDemand": false,
  "assumedCtrPercent": 20,
  "report": true,
  "trackChanges": true,
  "competitors": [
    "Asana",
    "Trello"
  ],
  "country": "us",
  "language": "en"
}
```

# Actor output Schema

## `overview` (type: `string`):

Mention rate, margin of error and reliability for every question on every assistant checked.

## `changes` (type: `string`):

What moved since your previous check: mention rate up or down, competitors that just appeared, citations gained and lost.

## `competitors` (type: `string`):

Which brands get named instead of yours, and which websites the answers credit.

## `reliability` (type: `string`):

How consistent each assistant was across repeat checks, and which of its numbers to trust.

# 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 = {
    "demoMode": true,
    "brand": "Apify",
    "brandDomain": "apify.com",
    "queries": [
        "What are the best web scraping tools?"
    ],
    "maxDiscoveredPrompts": 5,
    "samples": 2,
    "surfaces": [
        "aiOverview"
    ],
    "weightByDemand": false,
    "assumedCtrPercent": 20,
    "report": true,
    "trackChanges": true,
    "country": "us",
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("aitorsm/ai-visibility-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 = {
    "demoMode": True,
    "brand": "Apify",
    "brandDomain": "apify.com",
    "queries": ["What are the best web scraping tools?"],
    "maxDiscoveredPrompts": 5,
    "samples": 2,
    "surfaces": ["aiOverview"],
    "weightByDemand": False,
    "assumedCtrPercent": 20,
    "report": True,
    "trackChanges": True,
    "country": "us",
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("aitorsm/ai-visibility-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 '{
  "demoMode": true,
  "brand": "Apify",
  "brandDomain": "apify.com",
  "queries": [
    "What are the best web scraping tools?"
  ],
  "maxDiscoveredPrompts": 5,
  "samples": 2,
  "surfaces": [
    "aiOverview"
  ],
  "weightByDemand": false,
  "assumedCtrPercent": 20,
  "report": true,
  "trackChanges": true,
  "country": "us",
  "language": "en"
}' |
apify call aitorsm/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LSuU6W4jX3UfSsxb4/builds/gehWJ75ln3MrfjCds/openapi.json
