# AI Brand Visibility Tracker: ChatGPT & Perplexity (`scoutforge/ai-search-visibility-tracker`) Actor

Track how ChatGPT and Perplexity mention your brand. Get the AI answers with cited sources, brand rank, share of voice vs competitors and alerts when visibility drops. Cheaper than the official ChatGPT and Perplexity scrapers.

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

## Pricing

from $30.00 / 1,000 perplexity 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

## Open ChatGPT. Type the question your best customer would type.

Count the brands it names. Is yours one of them?

If not, that customer never saw your ad, never visited your site, never entered your funnel. Your analytics show nothing, because nothing happened. And your Google rank tracker cannot see it: it only measures Google's blue links, not what the AI says.

**AI Brand Visibility Tracker** shows you what ChatGPT and Perplexity say about your brand, for every question you care about, every week. You get the answer, your rank, the sources the AI cites, your share of voice against competitors, and an alert when your visibility drops.

**Try it first.** On a free Apify account, your first run covers 2 prompts on both engines. Enter your brand, see the answers. Nothing to install, no API key to find.

***

### What you get, for every prompt and every engine

- **The full AI answer**, word for word
- **Brand mentioned:** yes or no
- **Brand rank:** first, second, third, or absent
- **Domain cited:** is your website one of the sources the AI links to
- **Competitors named** in the same answer
- **Cited sources:** every URL the AI used to build its answer

And across the whole run:

- **Mention rate** per engine (for example: named in 6 answers out of 10)
- **Share of voice** against the competitors you track
- **Average rank** when you are mentioned
- **Change since your last run**, stored automatically under your project name
- **A webhook alert** (n8n, Slack, Zapier, Make) when your mention rate falls by the number of points you choose

***

### Who uses it

**SEO and GEO agencies.** One project per client, one weekly schedule, one table for the monthly report. Generative engine optimization (GEO) needs a baseline; this gives you one. It is also a five-minute audit: show any prospect that AI does not name them.

**SaaS founders and marketing managers.** Find out which competitors the AI recommends instead of you, and which review sites, blogs and listicles it quotes. Those pages are where you need to appear.

**Consultants and freelancers.** The easiest opening line you will ever have: "I asked ChatGPT about your market. Your name did not come up."

**Anyone who needs raw answers.** Use it as a ChatGPT and Perplexity search scraper: prompt in, answer and citations out, in JSON.

***

### Don't know which prompts to test? Start with these five patterns

Replace the brackets. Write them the way your customer would type them.

1. `best [product category] for [customer type]`
2. `top [competitor] alternatives`
3. `[your brand] vs [competitor]`
4. `how to choose a [product category]`
5. `is [your brand] worth it`

Run 3 to 4 variations of each pattern. Twenty prompts give a measurement, one prompt gives an anecdote.

***

### How to run it

1. Enter your prompts.
2. Enter your brand, your domain and the competitors your buyers compare you to.
3. Choose Perplexity, ChatGPT (with web search), or both.
4. Run it. Then **schedule it weekly** (Apify Schedules) with the same project name, so the history and the alerts build up.

Example input:

```json
{
  "prompts": ["best CRM for small agencies", "top HubSpot alternatives"],
  "brand": "Pipedrive",
  "domain": "pipedrive.com",
  "competitors": ["HubSpot", "Salesforce", "Zoho"],
  "engines": ["perplexity", "openai"],
  "projectName": "pipedrive"
}
```

| Field | What to enter |
|---|---|
| `prompts` | The questions your customers ask AI |
| `brand` | Your brand name |
| `domain` | Your website, for example `example.com` |
| `competitors` | Competitor names to compare against |
| `engines` | `perplexity`, `openai`, or both |
| `projectName` | Keeps the history between runs |
| `webhookUrl` | Optional. Receives an alert when visibility drops |
| `alertDropPoints` | Drop in mention rate that triggers the alert (default 10) |

***

### What the output looks like

One row per prompt and per engine:

```json
{
  "engine": "perplexity",
  "prompt": "best CRM for small agencies",
  "brandMentioned": true,
  "brandRank": 2,
  "domainCited": true,
  "competitorsMentioned": ["HubSpot", "Zoho"],
  "answer": "...",
  "citations": ["https://..."]
}
```

A run summary is saved in the `OUTPUT` record: checks, mention rate, share of voice, domain cited rate and average rank per engine, with the change since the previous run.

***

### What it costs

You pay per check. One check is one prompt sent to one engine. No subscription, no minimum.

| Engine | Price per check |
|---|---|
| Perplexity | **$0.03** |
| ChatGPT (OpenAI, with web search) | **$0.06** |

A full run of 20 prompts on both engines is 40 checks, **$1.80**. Run weekly, that is about $7.80 a month to know where you stand in AI answers.

Free Apify accounts are limited to 2 prompts per run. Paid accounts have no prompt limit.

***

### Five rules for better results

1. **Ask real questions.** AI answers full sentences. Test with the sentences your customers type.
2. **Use 10 to 20 prompts per topic.** One answer is an anecdote. Twenty are a measurement.
3. **Keep the same project name.** Trends only appear when runs are compared.
4. **Track the competitors your buyers compare you to**, not only the ones you fear.
5. **Read the citations.** The sites an AI quotes are the sites you need to be listed on.

***

### Questions

**Which engines are supported?** Perplexity and ChatGPT (OpenAI models with web search).

**Do I need an API key?** No. Run it from Apify and pay per check.

**Will the same prompt always give the same answer?** No. AI answers vary. That is why the Actor measures mention rate across several prompts and runs instead of one answer.

**Something does not work?** Open an issue on this page. Every issue gets an answer.

***

*Run it once. Look at the first table. You will know something about your market that you did not know this morning.*

# Actor input Schema

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

Questions to ask the AI engines (e.g. 'best CRM for small agencies').

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

Brand name to track in the answers. Leave empty to only get raw answers.

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

Your website domain, e.g. mybrand.com. Used to check if it appears in cited sources.

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

Competitor brand names to track in the answers, used to compute share of voice.

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

AI engines to query. Supported values: perplexity, openai.

## `projectName` (type: `string`):

History is stored per project so runs can be compared over time.

## `perplexityPreset` (type: `string`):

Perplexity Agent API preset: fast, low, medium, high or xhigh. 'fast' is the cheapest.

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

OpenAI model used with the web search tool. Change it if the API rejects the model name.

## `webhookUrl` (type: `string`):

Receives a POST request when the mention rate drops (n8n, Slack, Zapier...).

## `alertDropPoints` (type: `integer`):

Send an alert when the mention rate drops by at least this many points versus the previous run.

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

Optional. Used only if the PERPLEXITY\_API\_KEY environment variable is not set.

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

Optional. Used only if the OPENAI\_API\_KEY environment variable is not set.

## Actor input object example

```json
{
  "prompts": [
    "best CRM for small agencies"
  ],
  "engines": [
    "perplexity",
    "openai"
  ],
  "projectName": "default",
  "perplexityPreset": "fast",
  "openaiModel": "gpt-4.1-mini",
  "alertDropPoints": 10
}
```

# Actor output Schema

## `results` (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": [
        "best CRM for small agencies"
    ],
    "engines": [
        "perplexity",
        "openai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scoutforge/ai-search-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 = {
    "prompts": ["best CRM for small agencies"],
    "engines": [
        "perplexity",
        "openai",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scoutforge/ai-search-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 '{
  "prompts": [
    "best CRM for small agencies"
  ],
  "engines": [
    "perplexity",
    "openai"
  ]
}' |
apify call scoutforge/ai-search-visibility-tracker --silent --output-dataset

```

## MCP server setup

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