# AI Visibility Tracker - ChatGPT, Perplexity, Gemini & Claude (`veridata/ai-visibility-tracker`) Actor

Track if ChatGPT, Perplexity, Gemini and Claude mention and cite your brand. Get share of voice, mention rank, competitor comparison and top cited domains in one run. Uses official APIs, no scraping. Ideal for GEO and SEO agencies.

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

## Pricing

from $100.00 / 1,000 prompt checks

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 Visibility Tracker: Brand Mentions in ChatGPT, Perplexity, Gemini & Claude

Find out whether AI assistants recommend your brand. Give it the questions your customers ask, your brand and your competitors. In one run it asks **ChatGPT, Perplexity, Gemini and Claude** and tells you:

- **Is your brand mentioned?** How many times, and in what position compared with competitors
- **Is your website cited?** And at which citation position
- **Which competitors are mentioned** for the same question
- **Which domains AI engines cite most**, so you know where to get coverage
- **Share of voice per engine**: mention rate, citation rate and average rank

Built for SEO and GEO (generative engine optimization) agencies, marketers and brand teams who track AI search visibility on a schedule.

### Why this tracker

- **All four major AI engines in one run.** One input, one dataset, one comparable report.
- **Official APIs, no scraping.** Uses each provider's own web-search API, so runs don't break when a website changes.
- **You only pay for successful checks.** Failed or empty answers are recorded but never charged.
- **Bring your own API keys.** AI usage is billed by each provider directly to your account, at their rates.

### Guide

Step-by-step walkthrough with tips on improving your results: [How to Check if ChatGPT Mentions Your Brand (and Track It Automatically)](https://dev.to/veridata/how-to-check-if-chatgpt-mentions-your-brand-and-track-it-automatically-3b08)

### How to use

1. Enter your **brand**, optional **aliases** and **domains** (e.g. `notion.so`).
2. Add **competitors** to compare against.
3. Add **prompts**: the questions your customers ask (e.g. "best project management tool for startups").
4. Pick the **engines** and paste the matching **API keys**. Engines without a key are skipped.
5. Run it once, or **schedule** it daily or weekly to track visibility over time.

### Output

One dataset row per prompt per engine:

```json
{
  "prompt": "What is the best note-taking app for teams?",
  "engine": "chatgpt",
  "model": "gpt-5.5",
  "brand": "Notion",
  "brandMentioned": true,
  "brandMentionCount": 3,
  "brandRank": 1,
  "mentionOrder": ["Notion", "Coda", "Confluence"],
  "competitorsMentioned": ["Coda", "Confluence"],
  "brandCited": true,
  "brandCitationPosition": 2,
  "citedDomains": ["zapier.com", "notion.so"],
  "citations": [{"url": "https://zapier.com/...", "title": "..."}],
  "sourcesConsulted": [{"url": "https://...", "title": "..."}],
  "searchQueries": ["best team note taking app"],
  "answer": "For teams, Notion is ...",
  "checkedAt": "2026-11-01T09:00:00+00:00",
  "error": null
}
```

A summary report is saved to the run's key-value store under `OUTPUT`: overall and per-engine brand mention rate, citation rate, average rank, competitor mention rates and the most-cited domains.

**Rank** is the order in which your brand first appears in the answer among your brand and the competitors you listed.

### Pricing

Pay per event: you're charged per successful **prompt check** (one prompt on one engine). Set a maximum cost per run in the run options to cap spending. AI provider usage is billed separately by each provider to your own API key.

### Notes

- API answers are generated through each provider's official API with web search enabled. They can differ from what a logged-in user sees in the consumer chat apps, which personalize answers.
- AI answers vary between runs. Track trends across scheduled runs rather than a single answer.
- Model names are configurable under **Advanced** if a provider releases a newer model.

# Actor input Schema

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

The brand to track, e.g. "Notion".

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

Other names the brand goes by (product names, abbreviations).

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

Your websites, e.g. "notion.so". Used to detect when AI answers cite your site.

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

Competitor brand names to compare against.

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

Questions your customers ask AI assistants. One per line.

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

Engines to check. Each needs its API key below.

## `openaiApiKey` (type: `string`):

Needed for ChatGPT checks. Calls are billed by OpenAI to your account.

## `perplexityApiKey` (type: `string`):

Needed for Perplexity checks.

## `geminiApiKey` (type: `string`):

Needed for Gemini checks.

## `anthropicApiKey` (type: `string`):

Needed for Claude checks.

## `openaiModel` (type: `string`):

Model used for ChatGPT checks.

## `geminiModel` (type: `string`):

Model used for Gemini checks.

## `anthropicModel` (type: `string`):

Model used for Claude checks.

## `perplexityEffort` (type: `string`):

Perplexity Agent API effort level. 'fast' is cheapest.

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

Store the full AI answer in each result.

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

Max parallel checks.

## Actor input object example

```json
{
  "brand": "Notion",
  "brandAliases": [],
  "brandDomains": [
    "notion.so",
    "notion.com"
  ],
  "competitors": [
    "Coda",
    "Confluence",
    "Obsidian"
  ],
  "prompts": [
    "What is the best note-taking app for teams?",
    "Best alternatives to Confluence for a startup"
  ],
  "engines": [
    "chatgpt",
    "perplexity",
    "gemini",
    "claude"
  ],
  "openaiModel": "gpt-5.5",
  "geminiModel": "gemini-3.8-flash",
  "anthropicModel": "claude-sonnet-5-5",
  "perplexityEffort": "fast",
  "includeAnswerText": true,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

No description

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

No description

# 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",
    "brandDomains": [
        "notion.so",
        "notion.com"
    ],
    "competitors": [
        "Coda",
        "Confluence",
        "Obsidian"
    ],
    "prompts": [
        "What is the best note-taking app for teams?",
        "Best alternatives to Confluence for a startup"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("veridata/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",
    "brandDomains": [
        "notion.so",
        "notion.com",
    ],
    "competitors": [
        "Coda",
        "Confluence",
        "Obsidian",
    ],
    "prompts": [
        "What is the best note-taking app for teams?",
        "Best alternatives to Confluence for a startup",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("veridata/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",
  "brandDomains": [
    "notion.so",
    "notion.com"
  ],
  "competitors": [
    "Coda",
    "Confluence",
    "Obsidian"
  ],
  "prompts": [
    "What is the best note-taking app for teams?",
    "Best alternatives to Confluence for a startup"
  ]
}' |
apify call veridata/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

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