# AI Search Visibility Tracker: ChatGPT, Perplexity & Gemini (`magenta_waterwheel/ai-search-visibility`) Actor

AI visibility tracker for GEO (generative engine optimization): ask ChatGPT, Perplexity and Gemini your prompts with live web search and see if your brand is mentioned or cited, with full answer, cited sources, brand rank vs competitors and citation position. From $0.04 per answer.

- **URL**: https://apify.com/magenta_waterwheel/ai-search-visibility.md
- **Developed by:** [Huss](https://apify.com/magenta_waterwheel) (community)
- **Categories:** SEO tools, AI, Marketing
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $40.00 / 1,000 perplexity answers

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 Answers

**AI Search Visibility Tracker** asks **ChatGPT**, **Perplexity** and **Gemini** the questions your customers ask, with **live web search turned on**, and tells you whether **your brand is mentioned**, whether **your website is cited**, which **sources** each assistant relies on and where you rank against **competitors**. It is a simple, pay-per-answer way to measure and track **AI search visibility**: an **AI visibility tracker** for **GEO (generative engine optimization)** and AEO (answer engine optimization).

No AI subscriptions, API keys or monthly plan needed. Paste prompts, add your brand and domain, click **Start**, and export to JSON, CSV or Excel, or call it from the API, a schedule, Make, Zapier, n8n or an AI agent.

### Why use this AI visibility tracker?

|                                    | AI Search Visibility Tracker              | Checking assistants by hand | GEO / AEO subscription tools |
| ---------------------------------- | ----------------------------------------- | --------------------------- | ---------------------------- |
| ChatGPT, Perplexity and Gemini     | Yes, one run                              | Three apps, copy and paste  | Usually                      |
| Live web search answers            | Yes, every engine searches the web        | Depends on settings         | Usually                      |
| Brand mention, rank, citation      | Per answer, plus a run summary            | Manual                      | Yes                          |
| Full answer and cited URLs         | Yes, raw data you own                     | Manual                      | Often dashboard only         |
| API, schedules, no-code, AI agents | Yes                                       | No                          | Plan dependent               |
| Price                              | **$0.04-$0.18 per answer**, pay as you go | Your time                   | Monthly plans                |

### What data do you get?

- 💬 **Full answer** from each assistant for each prompt.
- 🔗 **Citations**: every source cited in the answer with its position, URL, title and domain, plus (optionally) every source the engine retrieved.
- 🔎 **Search queries** the assistant ran to answer your prompt.
- 🏷️ **Brand mentioned**: yes/no, how many times, and where the first mention is. Aliases count too.
- 🥇 **Brand rank**: the order your brand appears in compared with your competitors (1 = mentioned first).
- 🌐 **Domain cited**: whether your website is a cited source and at which position, including subdomains.
- 🥊 **Competitors**: mentioned yes/no, count and rank for each competitor you list.
- 📊 **Run summary**: per engine brand mention rate, domain citation rate and average brand rank.

### Who uses AI visibility tracking?

- **SEO and content teams** checking whether their pages are cited by AI assistants and which competitor pages are.
- **Brand and marketing managers** tracking share of voice in ChatGPT, Perplexity and Gemini answers week by week.
- **Agencies** reporting AI search visibility to clients next to classic rankings.
- **Founders and product marketers** finding out what AI tells buyers about their category and their product.

### How to check if ChatGPT, Perplexity and Gemini mention your brand

1. Click **Try for free** (paid Apify plan needed to run) and open the input.
2. Add the **prompts** your customers ask, one per line, for example *"best CRM for real estate agents"*.
3. Enter **your brand**, **your domain** and up to a few **competitors**.
4. Keep all three **AI engines** (ChatGPT, Perplexity and Gemini) or pick the ones you need, and click **Start**.
5. Open the **Brand visibility** view, or download the full answers as JSON, CSV or Excel.

### Input example

```json
{
    "prompts": [
        "What is the best project management software for small teams?",
        "Asana vs Trello: which is better for a startup?"
    ],
    "engines": ["chatgpt", "perplexity", "gemini"],
    "brand": "Trello",
    "domain": "trello.com",
    "competitors": ["Asana", "Monday.com", "ClickUp"],
    "country": "US"
}
```

### Output example

One record per prompt and engine. The example below is shortened and illustrative; real answers change from day to day.

```json
{
    "prompt": "What is the best project management software for small teams?",
    "engine": "perplexity",
    "model": "openai/gpt-6-luna",
    "answer": "For small teams, Trello, Asana and ClickUp are the most common picks[1][2]. Trello is the simplest for kanban boards[3] ...",
    "citations": [
        {
            "position": 1,
            "url": "https://www.example-reviews.com/best-pm-software",
            "title": "Best project management software",
            "domain": "example-reviews.com"
        },
        {
            "position": 2,
            "url": "https://www.example-blog.com/pm-tools-small-teams",
            "title": "PM tools for small teams",
            "domain": "example-blog.com"
        },
        { "position": 3, "url": "https://trello.com/guide", "title": "Trello guide", "domain": "trello.com" }
    ],
    "citationCount": 3,
    "searchQueries": ["best project management software small teams"],
    "brand": "Trello",
    "brandMentioned": true,
    "brandMentionCount": 2,
    "brandFirstMentionIndex": 17,
    "brandRank": 1,
    "domain": "trello.com",
    "domainCited": true,
    "domainCitationPosition": 3,
    "domainCitationCount": 1,
    "competitors": [
        { "name": "Asana", "mentioned": true, "mentionCount": 1, "rank": 2 },
        { "name": "Monday.com", "mentioned": false, "mentionCount": 0, "rank": null },
        { "name": "ClickUp", "mentioned": true, "mentionCount": 1, "rank": 3 }
    ],
    "country": "US",
    "answeredAt": "2026-10-08T17:00:00.000Z",
    "error": null
}
```

The **RUN_SUMMARY** record in the key-value store adds per-engine totals, for example `{"perplexity": {"answers": 20, "brandMentionRate": 65, "domainCitationRate": 30, "averageBrandRank": 1.8}}`.

### How much does AI visibility tracking cost?

You pay per answer (one prompt asked on one engine):

| Engine     | Price per answer |
| ---------- | ---------------- |
| Perplexity | $0.04            |
| Gemini     | $0.08            |
| ChatGPT    | $0.18            |

Failed answers, skipped engines and duplicate prompts are free. There is no subscription and no extra fee for the AI providers or web search; it is all included. One prompt on all three engines costs $0.30; Perplexity and Gemini together cost $0.12. If you call the API without choosing engines, Perplexity and Gemini are used.

| Use case                                        | Answers | Cost    |
| ----------------------------------------------- | ------- | ------- |
| Quick check: 2 prompts on 3 engines             | 6       | $0.60   |
| Category audit: 50 prompts on 3 engines         | 150     | $15     |
| Weekly tracking: 20 prompts, 3 engines, 4 weeks | 240     | $24     |
| Daily tracking: 10 prompts, Perplexity only     | ~300/mo | ~$12/mo |

Set a **maximum cost per run** in the run options and the Actor stops before going over it. The tool needs a **paid Apify plan** because every answer has a real AI and web search cost.

### Use it with AI agents (MCP) and the API

Add this Actor as a tool in Claude, ChatGPT, Cursor, VS Code or any other MCP client through the [Apify MCP server](https://docs.apify.com/mcp):

```text
https://mcp.apify.com?tools=magenta_waterwheel/ai-search-visibility
```

Then ask, for example: *"Check whether ChatGPT, Perplexity and Gemini recommend our product for these 10 buyer questions and list the sources they cite instead of us."* The Actor runs with **limited permissions**, so it can only access its own run storage.

For results in a single HTTP request, call the synchronous endpoint with your [Apify API token](https://console.apify.com/settings/integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/magenta_waterwheel~ai-search-visibility/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prompts":["best CRM for real estate agents"],"brand":"Acme CRM","domain":"acmecrm.com"}'
```

### Integrations and scheduling

- ⏰ **Schedule** weekly or daily runs to track AI visibility over time.
- 🔗 **Send results** to Google Sheets, Looker Studio, Slack, webhooks, Make, Zapier or n8n.
- 📤 **Export** as JSON, CSV, Excel, XML or HTML.

### FAQ

#### Which models answer?

ChatGPT answers come from OpenAI's Responses API with the web search tool and `chat-latest`, the model OpenAI lists for ChatGPT. Perplexity answers come from Perplexity's Agent API with Perplexity web search, and Gemini answers from Google's Gemini API with Grounding with Google Search. Each record shows the exact model. API answers are close to, but not always identical with, what a signed-in user sees in the consumer apps, which can also personalize answers.

#### Does it support ChatGPT?

Yes. ChatGPT answers use OpenAI's API with web search turned on, so each answer comes with the sources it cites and the searches it ran. They are close to, but not always the same as, what you see in the ChatGPT app.

#### Why do answers change between runs?

AI answers are not deterministic and the web results behind them change. For trends, track the same prompts on a schedule and compare the mention and citation rates in the run summary rather than single answers.

#### How is a brand mention detected?

Your brand name and aliases are matched case-insensitively as whole words, so "Acme" does not match "Acmeville". Add aliases for product names, abbreviations or former names.

#### Why is my domain mentioned but not cited?

`domainCited` only counts sources the assistant cites in its answer. `domainInSources` tells you whether your site was retrieved at all, which shows how close you are to being cited.

#### Can I localize the answers?

Set `country` to a two-letter code (US, GB, DE...) to localize ChatGPT's and Perplexity's web search. Write the prompt in the language you want the answer in.

#### Can I use it on the Free plan?

No. Each answer has a real AI and web search cost that Apify doesn't cover on the Free plan, so the Actor needs a paid Apify plan. Free-plan runs end immediately with a notice and no charge.

#### I found a bug or need a feature

Open an issue in the **Issues** tab with a link to your run. We aim to reply within one business day.

If this saved you time, a quick rating on the Store helps a lot: [leave a review](https://apify.com/magenta_waterwheel/ai-search-visibility/reviews).

### More tools from the same developer

| Actor                                                                                       | What it does                                                          | Price                  |
| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------- |
| [Keyword Search Volume API](https://apify.com/magenta_waterwheel/keyword-search-volume)     | Google Ads search volume, CPC, competition and trends in bulk         | $1.50 / 1,000 keywords |
| [Telegram Channel Scraper](https://apify.com/magenta_waterwheel/telegram-channel-scraper)   | Public Telegram channel messages, views, reactions and media links    | $0.50 / 1,000 messages |
| [Document & PDF to Markdown](https://apify.com/magenta_waterwheel/document-to-markdown)     | PDF, Word, PowerPoint, Excel and HTML to LLM-ready Markdown, with OCR | $3 / 1,000 pages       |
| [App Store Reviews Scraper](https://apify.com/magenta_waterwheel/app-store-reviews-details) | Apple App Store reviews and app details in any country                | $0.25 / 1,000 reviews  |

# Actor input Schema

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

Questions your customers ask AI assistants, one per line (up to 2,000 characters each). Each prompt is asked once on every selected engine with live web search. Duplicates are removed.

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

Which assistants to ask. ChatGPT uses OpenAI web search, Perplexity its own web search and Gemini Google Search grounding. Each engine is one answer per prompt. If you leave this empty, Perplexity and Gemini are used.

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

Brand or product name to look for in the answers (case-insensitive, whole words). Leave empty to just collect answers and sources.

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

Other spellings or product names that count as a mention, for example "Trello Premium" or a former name.

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

Domain to look for in the cited sources, like example.com. Subdomains (blog.example.com) count too.

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

Competitor names. Each answer shows whether each one is mentioned and the order brands appear in (brandRank 1 = mentioned first).

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

Optional two-letter country code (US, GB, DE...) to localize ChatGPT's and Perplexity's web search. Gemini ignores it.

## `includeSources` (type: `boolean`):

Add every source the engine retrieved, not only the ones cited in the answer.

## Actor input object example

```json
{
  "prompts": [
    "best CRM for real estate agents",
    "what is the cheapest web hosting for wordpress"
  ],
  "engines": [
    "chatgpt",
    "perplexity",
    "gemini"
  ],
  "brand": "Trello",
  "brandAliases": [],
  "domain": "trello.com",
  "competitors": [
    "Asana",
    "Monday.com",
    "ClickUp"
  ],
  "country": "",
  "includeSources": true
}
```

# Actor output Schema

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

No description

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

No description

## `allRecords` (type: `string`):

No description

## `runSummary` (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 = {
    "prompts": [
        "What is the best project management software for small teams?",
        "Asana vs Trello: which is better for a startup?"
    ],
    "engines": [
        "chatgpt",
        "perplexity",
        "gemini"
    ],
    "brand": "Trello",
    "domain": "trello.com",
    "competitors": [
        "Asana",
        "Monday.com",
        "ClickUp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("magenta_waterwheel/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 project management software for small teams?",
        "Asana vs Trello: which is better for a startup?",
    ],
    "engines": [
        "chatgpt",
        "perplexity",
        "gemini",
    ],
    "brand": "Trello",
    "domain": "trello.com",
    "competitors": [
        "Asana",
        "Monday.com",
        "ClickUp",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("magenta_waterwheel/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 project management software for small teams?",
    "Asana vs Trello: which is better for a startup?"
  ],
  "engines": [
    "chatgpt",
    "perplexity",
    "gemini"
  ],
  "brand": "Trello",
  "domain": "trello.com",
  "competitors": [
    "Asana",
    "Monday.com",
    "ClickUp"
  ]
}' |
apify call magenta_waterwheel/ai-search-visibility --silent --output-dataset

```

## MCP server setup

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