# AI Visibility Tracker: Gemini, Claude & Google AI Overviews (`automationnation/ai-visibility-tracker`) Actor

Track whether AI search engines mention and cite your brand. For each prompt, see if Gemini, Claude and Google AI Overviews name you, at what position against competitors, how they describe you, which sites they cite, and what changed since your last run. Client-ready report included.

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

## Pricing

from $40.00 / 1,000 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Visibility Tracker

**AI Visibility Tracker is an Apify Actor that shows whether AI search engines mention and cite your brand.** For each prompt it asks Google AI Overviews, Gemini and Claude the way a customer would. It then records whether your brand is named, its position against your competitors, how the answer describes you, which sites were cited, every other brand named, and what changed since your last run. It costs $0.05 per answer, plus $0.50 for an optional client-ready report.

Use it as an **AI visibility / GEO tracking API**:

- run it from the form or from code
- schedule it weekly to see changes over time
- let AI agents (Claude, ChatGPT, Cursor) use it through Apify's MCP server

#### Quick facts

- **Engines:**
  - Google AI Overviews, read from Google's results; overviews that load late are read in a real browser
  - Gemini with Google Search grounding
  - Claude with web search
- **Per answer you get:**
  - mentioned or not, with mention count and position among the brands you track
  - whether your site is cited, and at what position
  - which competitors are named or cited
  - sentiment, with a one-line summary of how you're described
  - every brand the answer names
  - the cited URLs and domains
  - the full answer
- **A client-ready HTML report per run:**
  - mention rate, citation rate, share of voice, average position and sentiment
  - results by engine, and brands compared side by side
  - a prompt-by-prompt grid
  - the sites AI engines cite most, and changes since the last run
- **Hidden competitors:** every company or product named in the answers is listed, including ones you don't track.
- **Changes over time:** each run is compared with the previous one, marking gained and lost mentions and citations per prompt and engine.
- **Alerts:** a Slack or Discord message (or JSON to Zapier, Make, n8n or any URL) when you gain or lose a mention or citation.
- **No prompt list?** Give it topics such as "team wiki software" and it writes realistic prompts for you.
- **Price:**
  - $0.05 per answer checked; $0.045 on Silver and $0.04 on Gold and above
  - $0.50 per report
  - answers that couldn't be checked are free

### What can you do with it?

- **Brands and marketing teams.** See whether ChatGPT-style answers recommend you or your competitors for the questions your buyers ask. Then track whether your content and PR move the numbers.
- **SEO and GEO agencies.** Run one tracker per client: schedule weekly runs and send the report.
- **PR and outreach.** "Sites AI engines cite most" shows which publications and review sites the engines rely on, so you know where to get featured.
- **Product marketing.** Read how each engine describes you, what it praises and what it warns about, and which competitors it names first.

### How to track your AI visibility

1. Click **Try for free**.
2. Enter your **brand** (for example `Notion`) and your **domain** (`notion.so`).
3. Add **competitors** as names or `Name (domain.com)`, for example `Obsidian (obsidian.md)`.
4. Add **prompts**: questions your buyers ask, such as `best note-taking app for teams`. Or add **topics** and let the Actor write the prompts.
5. Choose the engines and the country, then click **Start**.
6. Open the **Visibility report** under the run's Output, or download the data as JSON, CSV or Excel.
7. Schedule the run weekly. Each run is compared with the last, and the report lists what changed.

#### Input example

```json
{
  "brand": "Notion",
  "domain": "notion.so",
  "competitors": ["Evernote (evernote.com)", "Obsidian (obsidian.md)", "Microsoft OneNote (onenote.com)", "Confluence (atlassian.com)"],
  "prompts": [
    "What is the best note-taking app for teams?",
    "Notion vs Obsidian for personal knowledge management",
    "Best wiki software for a startup"
  ],
  "topics": ["project documentation tools"],
  "promptsPerTopic": 5,
  "engines": ["google-ai-overviews", "gemini", "claude"],
  "country": "us"
}
```

#### Output example (one answer)

```json
{
  "prompt": "What is the best note-taking app for teams?",
  "engine": "google-ai-overviews",
  "engineLabel": "Google AI Overviews",
  "status": "answered",
  "visibility": "cited",
  "brandMentioned": true,
  "brandRank": 1,
  "brandCited": true,
  "brandCitationRank": 1,
  "brandSnippet": "Notion is the best all-around note-taking and workspace app for teams due to its powerful real-time collaboration, flexible…",
  "brandsInOrder": ["Notion", "Microsoft OneNote"],
  "competitorsMentioned": ["Microsoft OneNote"],
  "competitorsCited": [],
  "sentiment": "positive",
  "sentimentSummary": "Best all-around note-taking and workspace app for teams with real-time collaboration, flexible databases, and custom wiki building.",
  "brandsNamed": ["Notion", "Zapier", "Microsoft OneNote", "Microsoft 365", "Fellow", "Apple Notes", "Google Keep"],
  "citedDomains": ["notion.so", "zapier.com", "pcmag.com", "youtube.com"],
  "citedUrls": ["https://www.notion.so", "https://zapier.com/blog/best-note-taking-apps/", "https://www.pcmag.com/picks/the-best-note-taking-apps"],
  "mentionChange": "unchanged",
  "citationChange": "unchanged",
  "previousCheckedAt": "2026-10-03T16:02:01.130Z",
  "answer": "Notion is the best all-around note-taking and workspace app for teams…",
  "checkedAt": "2026-10-03T16:07:42.591Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `prompt`, `engine`, `engineLabel`, `model`, `country` | What was asked, and where |
| `status` | `answered`, or `no_ai_overview` when Google showed none for the prompt |
| `visibility` | `cited`, `mentioned` or `absent` |
| `brandMentioned`, `brandMentions`, `brandRank` | Whether and how often you're named, and your position among tracked brands by first mention (1 = named first) |
| `brandCited`, `brandCitationRank`, `brandInSources` | Whether a cited source is on your domain and at what position; whether your site was among the pages consulted |
| `brandSnippet`, `sentiment`, `sentimentSummary` | The sentence where you're named, and how the answer portrays you |
| `brandsInOrder`, `mentionedBeforeBrand`, `competitorsMentioned`, `competitorsCited` | How you compare with the competitors you track |
| `brandsNamed` | Every company or product the answer names, tracked or not |
| `citedUrls`, `citedDomains`, `sourceCount` | The sources the answer cites, and how many sites were consulted |
| `mentionChange`, `citationChange`, `previousCheckedAt` | `gained`, `lost`, `unchanged` or `new` against the last run |
| `answer`, `answerLength` | The full answer (switch off with "Include full answer text") |

The **Run summary** (key-value store `OUTPUT`) holds the same totals as the report in JSON:

- rates by engine
- the competitor comparison
- the sites cited most
- the brands named most
- changes since the last run
- anything not checked, and why

### Alerts when your AI visibility changes

Paste a Slack or Discord webhook URL into **Alert webhook URL**, then schedule the Actor weekly. After each run that gains or loses a mention or citation, you get a message like this:

```
AI visibility for Notion: mentioned in 92.9% (▲ 7.1 pts), cited in 14.3% (no change), share of voice 52% (▼ 0.6 pts).
▲ Mention gained in Claude: "What is the best project management tool for small teams?"
▼ Citation lost in Google AI Overviews: "Best wiki software for a startup"
Run and report: https://console.apify.com/view/runs/…
```

Any other URL (Zapier, Make, n8n or your own server) receives the same text plus the run summary as JSON. Choose **After every run** to get a message even when nothing changed.

### How much does it cost?

| Apify plan | Per answer checked | Report |
|---|---|---|
| Free and Bronze | $0.05 | $0.50 per run |
| Silver | $0.045 | $0.50 per run |
| Gold and above | $0.04 | $0.50 per run |

One answer is one prompt on one engine, so 20 prompts on 3 engines is 60 answers: $3, plus $0.50 for the report. Run weekly, that's about $14 a month per brand.

You're not charged when an answer couldn't be checked. That includes Gemini at its rate limit, a blocked search, or a run that hits its timeout. A prompt where Google shows no AI Overview is a checked answer, because "no overview" is itself a result. Switch off the report to skip its $0.50.

### How the engines are asked

- **Google AI Overviews:** a Google search for the prompt in your country. AI Overviews that Google builds after the page loads are read in a real browser on residential IPs.
- **Gemini:** Gemini 2.5 Flash with Grounding with Google Search, the same grounding Google's own apps use.
- **Claude:** Claude Haiku 4.5 with Anthropic's web search tool, localised to your country.

AI answers vary between runs, users and locations. Treat one run as a sample and watch the trend over several weekly runs. Questions with a clear buying intent ("best X for Y", "X vs Y", "alternatives to X") show the most brand recommendations.

### Use it with AI agents (MCP)

Add `https://mcp.apify.com?tools=automationnation/ai-visibility-tracker` to Claude, ChatGPT, Cursor or another MCP client and sign in with Apify. Then ask, for example: "Is our brand mentioned when people ask AI for the best CRM for small businesses? Compare us with HubSpot and Pipedrive."

### Integrations and API

```bash
curl -X POST "https://api.apify.com/v2/acts/automationnation~ai-visibility-tracker/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"brand":"Notion","domain":"notion.so","prompts":["best note-taking app for teams"],"competitors":["Obsidian (obsidian.md)"]}'
```

Python and JavaScript: the `apify-client` package with Actor ID `automationnation/ai-visibility-tracker`. Send results to Google Sheets, Slack, email or a webhook through Apify integrations, or schedule the Actor weekly in Apify Console.

### FAQ

**Does it check ChatGPT and Perplexity?**
Not yet. They're planned. Today it checks Google AI Overviews, Gemini and Claude.

**How is a mention detected?**
A whole-word match of your brand name and its other names. A name with capitals matches only with those capitals, so "Notion" isn't counted in "the notion of". Add product names as **Other names for your brand**. For competitors, add other names after " / ", for example `Microsoft OneNote / OneNote`; names like "Microsoft OneNote" also match "OneNote" automatically.

**What does "position" mean?**
Your order among the brands you track, by first mention in the answer. #1 means you're named before every tracked competitor.

**Is there a limit on Apify's free plan?**
Free-plan runs check up to 15 answers each, for example 5 prompts on 3 engines, so you can try the tracker. Paid Apify plans have no limit.

**Can I keep separate histories for different clients?**
Yes. Runs with the same brand, domain and country are compared with each other. Set a **Tracker name** to keep a separate history per client or campaign.

**Why is an answer missing from a run?**
It's listed under "Not checked" in the report and in `OUTPUT` with the reason, and it isn't charged. Usually an engine was busy or Google blocked every retry.

### More from AutomationNation

- **[Google AI Overview Tracker](https://apify.com/automationnation/aeo-auditor)**: whether Google's AI Overviews cite your site, keyword by keyword, at scale.
- **[Google Trends Scraper & API](https://apify.com/automationnation/google-trends-scraper)**: interest over time, by region and city, rising queries and Trending now.
- **[App Store Reviews Scraper](https://apify.com/automationnation/app-store-reviews-scraper)** and **[Google Play Reviews Scraper](https://apify.com/automationnation/google-play-reviews-scraper)**: app reviews with developer replies, for any app and country.

Questions or a missing feature? Open an issue on the Actor's **Issues** tab. Fixes usually ship within a day.

# Changelog

This Actor's version history is a separate document: https://apify.com/automationnation/ai-visibility-tracker/changelog.md

# Actor input Schema

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

Your brand or product name, as people write it (for example "Notion"). A name with capitals matches only with those capitals, so "Notion" isn't found in "the notion of".

## `domain` (type: `string`):

Your site, for example "notion.so". Used to check whether AI answers cite your pages (subdomains count).

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

Product names or spellings that should count as your brand, for example "Notion AI".

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

Up to 25 competitors, each as a name, a domain, or "Name (domain.com)" to track their citations too. Add other names after " / ", for example "Microsoft OneNote / OneNote".

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

Questions people ask AI assistants in your market, one per line, for example "best CRM for small business" or "Notion vs Obsidian". Each prompt is asked on every engine you choose.

## `topics` (type: `array`):

Optional: topics such as "team wiki software". The Actor writes realistic prompts for each (without brand names) and checks them too.

## `promptsPerTopic` (type: `integer`):

How many prompts to write for each topic.

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

Cap on prompts per run (written plus your own).

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

Which AI engines to ask. Each prompt on each engine is one answer checked.

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

Two-letter country code for localised answers, for example us, gb, de, au.

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

Interface language for Google AI Overviews, for example en, de, fr.

## `aioBrowserFallback` (type: `boolean`):

Google builds many AI Overviews after the page loads. Those are read in a real browser on residential IPs (slower). Switch off to skip them; skipped answers aren't charged.

## `analyzeAnswers` (type: `boolean`):

For each answer: every company or product it names (to reveal competitors you don't track) and how it describes your brand. Included in the price.

## `generateReport` (type: `boolean`):

A shareable report (REPORT in the key-value store): visibility rates, share of voice, competitors, top cited sites, prompt-by-prompt results and changes. $0.50, charged once per run.

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

Save each engine's full answer in the dataset.

## `alertWebhookUrl` (type: `string`):

Get a message when mentions or citations change: a Slack or Discord webhook URL, or any Zapier, Make, n8n or HTTPS endpoint (which receives JSON).

## `alertOn` (type: `string`):

When to send the alert.

## `trackerName` (type: `string`):

Optional: keeps a separate history, for example one per client or campaign. Runs with the same brand, domain, country and tracker name are compared with each other.

## Actor input object example

```json
{
  "brand": "Notion",
  "domain": "notion.so",
  "competitors": [
    "Evernote (evernote.com)",
    "Obsidian (obsidian.md)",
    "Microsoft OneNote (onenote.com)"
  ],
  "prompts": [
    "What is the best note-taking app for teams?"
  ],
  "promptsPerTopic": 5,
  "maxPrompts": 200,
  "engines": [
    "claude",
    "google-ai-overviews"
  ],
  "country": "us",
  "language": "en",
  "aioBrowserFallback": true,
  "analyzeAnswers": true,
  "generateReport": true,
  "includeAnswerText": true,
  "alertOn": "changes"
}
```

# Actor output Schema

## `report` (type: `string`):

Client-ready report: visibility rates, share of voice, competitors, top cited sites, prompt-by-prompt results and changes.

## `visibility` (type: `string`):

No description

## `citations` (type: `string`):

No description

## `brands` (type: `string`):

No description

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

No description

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

Rates by engine, competitors, top cited domains, brands named, changes and anything not checked.

# 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 = {
    "brand": "Notion",
    "domain": "notion.so",
    "competitors": [
        "Evernote (evernote.com)",
        "Obsidian (obsidian.md)",
        "Microsoft OneNote (onenote.com)"
    ],
    "prompts": [
        "What is the best note-taking app for teams?"
    ],
    "engines": [
        "claude",
        "google-ai-overviews"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("automationnation/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 = {
    "brand": "Notion",
    "domain": "notion.so",
    "competitors": [
        "Evernote (evernote.com)",
        "Obsidian (obsidian.md)",
        "Microsoft OneNote (onenote.com)",
    ],
    "prompts": ["What is the best note-taking app for teams?"],
    "engines": [
        "claude",
        "google-ai-overviews",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("automationnation/ai-visibility-tracker").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 '{
  "brand": "Notion",
  "domain": "notion.so",
  "competitors": [
    "Evernote (evernote.com)",
    "Obsidian (obsidian.md)",
    "Microsoft OneNote (onenote.com)"
  ],
  "prompts": [
    "What is the best note-taking app for teams?"
  ],
  "engines": [
    "claude",
    "google-ai-overviews"
  ]
}' |
apify call automationnation/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

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

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/reAs4MrBSg4eKggBk/builds/46SdLcam60KbZ7OmI/openapi.json
