# AI Visibility Tracker: ChatGPT, Perplexity, Gemini & Google (`ksvan/ai-visibility-tracker`) Actor

Does AI recommend your brand? Ask ChatGPT, Perplexity, Gemini, Copilot, Google AI Mode and AI Overviews your customers' questions and get brand mentions, rank vs competitors, citations, share of voice, gap questions and the sources AI cites.

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

## Pricing

Pay per event

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, Perplexity, Gemini & Google AI

**Does AI recommend your brand?** This Actor asks **ChatGPT, Perplexity, Gemini, Microsoft Copilot, Google AI Mode and Google AI Overviews** the questions your customers ask, then analyses every answer: **is your brand mentioned, in which position compared with competitors, is your website cited as a source**, what share of the conversation you get and in which tone. You also get a **visibility score per engine**, a **competitor leaderboard**, the **gap questions** where competitors appear and you don't, and the **sites AI engines cite most**, which is your list of places to get featured.

Answers come from each engine's **public web interface**, the same answers your customers see, not from an API model that behaves differently. They are collected by Apify's official ChatGPT, Perplexity, Gemini, Copilot, AI Mode and AI Overviews scrapers, run on your account. No API keys needed.

### What you get

**One record per question and engine:**

| Field | Details |
|---|---|
| `brandMentioned`, `brandMentions` | Whether and how often your brand (or its aliases or domain) appears in the answer |
| `brandRank` | Your position among the brands named in the answer (1 = named first) |
| `shareOfVoice` | Your mentions ÷ all brand mentions in the answer |
| `brandCited`, `brandCitedUrls` | Whether the engine cites a page on your domain as a source |
| `sentiment` | Tone of the sentences around your brand: positive, negative, mixed or neutral |
| `mentionContext` | The passage where your brand is mentioned |
| `competitors` | For each competitor: mentioned, mentions, rank, cited |
| `answer`, `sources` | The full AI answer and every source URL it cites |

**A visibility report** (`REPORT` as JSON and `REPORT_MD` as Markdown in the key-value store):

- **Visibility score 0-100** overall and per engine (mention rate 40 %, rank 30 %, share of voice 20 %, citation rate 10 %)
- **Leaderboard**: you vs competitors by mention rate and citation rate
- **Gap questions**: questions where AI names competitors but not you
- **Top cited domains and pages**: the reviews, listicles and comparisons AI relies on for your category

### Use cases

- **Generative engine optimization (GEO / AEO)**: measure where you stand in AI search and track progress week by week.
- **Competitor intelligence**: see which competitors AI recommends, for which questions, and which sources push them.
- **PR and content outreach**: the most cited pages are where a mention moves AI answers the most.
- **Agencies**: run one task per client on a schedule and send the Markdown report.
- **AI agents**: brand visibility checks on demand through the Apify MCP server.

### Input example

```json
{
  "brand": "Zoho Projects",
  "brandDomain": "zoho.com",
  "brandAliases": ["Zoho"],
  "competitors": ["Asana | asana.com", "ClickUp | clickup.com", "Trello | trello.com", "monday.com | monday.com"],
  "queries": ["best project management software for small teams"],
  "category": "project management software",
  "engines": ["chatgpt", "perplexity", "gemini", "google_ai_overview"],
  "country": "us"
}
```

With a **category**, the Actor adds questions such as "best project management software", "Zoho Projects alternatives", "is Zoho Projects worth it" and "Zoho Projects vs Asana". Leave the questions empty to use only generated ones.

### Output example

```json
{
  "engine": "perplexity",
  "query": "best project management software for small teams",
  "status": "ok",
  "brandMentioned": true,
  "brandMentions": 5,
  "brandRank": 1,
  "brandsMentioned": 6,
  "shareOfVoice": 0.333,
  "brandCited": false,
  "sentiment": "positive",
  "mentionContext": "For most small teams, **Zoho Projects** is the best overall choice: it offers strong value, easy setup, time tracking…",
  "competitorsMentioned": ["Asana", "ClickUp", "Trello", "monday.com"],
  "sourcesCount": 10,
  "sourceDomains": ["pcmag.com", "asana.com", "zapier.com"]
}
```

### How much does it cost?

You pay for two things:

1. **This Actor**: $0.005 per brand check (one question on one engine) and $0.02 per visibility report.
2. **The engine scrapers** it runs on your account, at their own prices: on any paid Apify plan from **$0.002-0.005 per answer** (Perplexity $0.013), Google AI Overview $0.003 on every plan.

So 20 questions on ChatGPT, Gemini and Google AI Overview cost about **$0.62** on a paid plan, around **$0.01 per check**, several times less than AI visibility tools that charge $0.05-0.08 per check or $99+ per month.

⚠️ **Apify Free plan:** Apify charges **$0.20 per answer** for its ChatGPT, Perplexity, Gemini, Copilot and AI Mode scrapers on the Free plan. To protect you, the Actor runs only Google AI Overview on the Free plan unless you turn on **Allow Free-plan engine prices**. Set **Max cost per run** in the run options to cap this Actor's own charges.

### Tips

- Write questions the way customers do: "best CRM for a 5-person agency", not "CRM".
- Add aliases (short names, product names) so mentions are not missed.
- AI answers change from day to day. Schedule the Actor weekly and compare scores over time.
- Microsoft Copilot and Google AI Mode are less stable than the other engines and are off by default. When an engine returns no answer, the check is marked `no_answer` and not charged.
- Each engine is a separate Actor run on your account. If you hit your plan's concurrent-run limit, lower **Engines in parallel**.

### FAQ

**Why real web answers instead of APIs?** API models (for example OpenAI's API with web search) answer differently from chatgpt.com. Brands care about what customers actually see.

**Is my brand detection exact?** Names, aliases and your domain are matched as whole words, case-insensitive. Sentiment is a simple word-based estimate of the surrounding sentences, a signal rather than a verdict.

**Which countries?** ChatGPT, Perplexity, Gemini, Copilot and AI Mode answer from the selected country. Google AI Overview uses US results.

# Actor input Schema

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

Brand, product or company name exactly as people write it, e.g. 'Zoho Projects'.

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

Used to detect when AI engines cite your site as a source, e.g. 'zoho.com'. Mentions of the domain in the answer count as brand mentions too.

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

Spellings, short names or product names that should count as your brand.

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

One per line: 'Name', 'Name | domain.com' or 'Name | domain.com | alias1, alias2'. Up to 15. Used for rank, share of voice, the leaderboard and gap questions.

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

Prompts your customers would type into ChatGPT or Google, one per line. Leave empty and fill in a category to generate them.

## `category` (type: `string`):

Optional, e.g. 'project management software'. Adds questions like 'best {category}', '{brand} alternatives', 'is {brand} worth it' and '{brand} vs {competitor}'.

## `autoQueries` (type: `boolean`):

When a category is set (or no questions are given), add generated questions to yours.

## `maxQueries` (type: `integer`):

Upper limit on questions per run. Each question is asked on every selected engine.

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

Real answers from each engine's public web interface (what your customers see), collected by Apify's official scrapers.

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

Location the AI engines answer from (not used by Google AI Overview).

## `includeFullAnswer` (type: `boolean`):

Off keeps only the first 600 characters of each answer.

## `allowFreePlanPrices` (type: `boolean`):

On the Apify Free plan, Apify charges $0.20 per answer for ChatGPT, Perplexity, Gemini, Copilot and AI Mode (from $0.005 on any paid plan), so these engines are skipped unless you turn this on. Google AI Overview always runs.

## `maxParallelEngines` (type: `integer`):

Each engine is a separate Actor run on your account. Keep it low on plans with few concurrent runs.

## `engineTimeoutSecs` (type: `integer`):

How long to wait for one engine to answer all questions.

## `maxEngineCostUsd` (type: `number`):

Optional cap on what one engine run may charge your account.

## Actor input object example

```json
{
  "brand": "Zoho Projects",
  "brandDomain": "zoho.com",
  "brandAliases": [
    "Zoho"
  ],
  "competitors": [
    "Asana | asana.com",
    "ClickUp | clickup.com",
    "Trello | trello.com",
    "monday.com | monday.com"
  ],
  "queries": [
    "best project management software for small teams",
    "what is the cheapest project management tool with Gantt charts"
  ],
  "autoQueries": true,
  "maxQueries": 25,
  "engines": [
    "chatgpt",
    "perplexity",
    "gemini",
    "google_ai_overview"
  ],
  "country": "us",
  "includeFullAnswer": true,
  "allowFreePlanPrices": false,
  "maxParallelEngines": 2,
  "engineTimeoutSecs": 900
}
```

# Actor output Schema

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

One record per question and AI engine.

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

Score per engine, competitor leaderboard, gap questions and most cited sources.

## `reportMarkdown` (type: `string`):

The same report, ready to read or paste.

# 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": "Zoho Projects",
    "brandDomain": "zoho.com",
    "brandAliases": [
        "Zoho"
    ],
    "competitors": [
        "Asana | asana.com",
        "ClickUp | clickup.com",
        "Trello | trello.com",
        "monday.com | monday.com"
    ],
    "queries": [
        "best project management software for small teams",
        "what is the cheapest project management tool with Gantt charts"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ksvan/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": "Zoho Projects",
    "brandDomain": "zoho.com",
    "brandAliases": ["Zoho"],
    "competitors": [
        "Asana | asana.com",
        "ClickUp | clickup.com",
        "Trello | trello.com",
        "monday.com | monday.com",
    ],
    "queries": [
        "best project management software for small teams",
        "what is the cheapest project management tool with Gantt charts",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("ksvan/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": "Zoho Projects",
  "brandDomain": "zoho.com",
  "brandAliases": [
    "Zoho"
  ],
  "competitors": [
    "Asana | asana.com",
    "ClickUp | clickup.com",
    "Trello | trello.com",
    "monday.com | monday.com"
  ],
  "queries": [
    "best project management software for small teams",
    "what is the cheapest project management tool with Gantt charts"
  ]
}' |
apify call ksvan/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ksvan/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/LUdd4Y7OUxuB0muXi/builds/5YjL5DXDMMjLOkiJG/openapi.json
