# AI Brand Visibility Tracker (`technofystore/ai-visibility-tracker`) Actor

Track how ChatGPT, Perplexity, Gemini, Google AI Overviews and AI Mode mention your brand vs competitors: mentions, rank, cited sources, sentiment and share of voice.

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

## Pricing

from $4.00 / 1,000 google ai mode checks

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

Find out how **ChatGPT, Perplexity, Gemini, Google AI Overviews and Google AI Mode** talk about your brand. For every prompt and every AI engine you get the full answer, whether your brand is mentioned, **where it ranks against your competitors**, which **sources are cited** (and whether your own site is one of them), a simple sentiment score and your **share of voice**.

### What does AI Brand Visibility Tracker return?

**One row per prompt × engine** (`type: "check"`):

| Field | Description |
|---|---|
| `prompt`, `engine`, `engineLabel` | What was asked and where |
| `status` | `OK`, `NOT_SHOWN` (Google showed no AI answer for this prompt), `FAILED` or `SKIPPED` |
| `answerText` | The AI answer |
| `brandMentioned`, `brandMentionCount` | Whether and how often your brand (or its aliases or domain) appears |
| `firstMentionPosition` | `char` (offset of the first mention) and `rankAmongBrands` (1 = your brand is the first brand named) |
| `competitorsMentioned`, `competitorMentions` | Which competitors appear, how often and where |
| `citedUrls` | Sources cited by the answer: `position`, `title`, `url`, `domain`, `isBrandDomain` |
| `brandDomainCited`, `competitorDomainsCited` | Whether your site, or a competitor's, is cited |
| `sentiment`, `sentimentScore` | Simple positive / neutral / negative sentiment around your brand |
| `keySource`, `timestamp`, `error` | Run metadata |

**One row per engine plus an "All engines" row** (`type: "summary"`): mention rate, average rank, how often your site is cited, sentiment counts, **share of voice** against each competitor and the top cited domains. The same summary is saved as `SUMMARY_BY_ENGINE` in the run's key-value store.

The dataset has three ready-made views: **Checks**, **Summary by engine** and **Cited sources**. Download as JSON, CSV or Excel, or use the API.

### How to use it

1. Enter your **brand name**, aliases and website.
2. Add **competitors**, one per line: `Name`, `Name | domain.com` or `Name | domain.com | alias 1, alias 2`.
3. Add the **prompts** your customers ask AI assistants.
4. Pick the **AI engines**, the country and the language.
5. Click **Start**. Schedule the Actor weekly to track changes over time.

#### Input example

```json
{
  "brandName": "HubSpot",
  "brandAliases": ["HubSpot CRM"],
  "brandDomain": "hubspot.com",
  "competitors": ["Salesforce | salesforce.com", "Pipedrive | pipedrive.com", "Zoho CRM | zoho.com | Zoho"],
  "prompts": ["What is the best CRM for a small business?", "Which CRM is easiest to use for a startup?"],
  "engines": ["chatgpt", "perplexity", "gemini", "google_ai_overview", "google_ai_mode"],
  "country": "US",
  "language": "en"
}
```

#### Output example (one check)

```json
{
  "type": "check",
  "prompt": "Which CRM is easiest to use for a startup?",
  "engine": "google_ai_mode",
  "engineLabel": "Google AI Mode",
  "status": "OK",
  "answerText": "When it comes to \"easiest to use\" for a startup, HubSpot is widely considered the gold standard...",
  "brandMentioned": true,
  "brandMentionCount": 4,
  "firstMentionPosition": { "char": 49, "rankAmongBrands": 1 },
  "competitorsMentioned": ["Pipedrive", "Zoho CRM"],
  "citedUrls": [
    { "position": 4, "title": "HubSpot CRM", "url": "https://www.hubspot.com/products/crm", "domain": "hubspot.com", "isBrandDomain": true }
  ],
  "brandDomainCited": true,
  "competitorDomainsCited": ["Pipedrive", "Zoho CRM"],
  "sentiment": "positive",
  "keySource": "own",
  "error": null
}
```

### Pricing

You pay per successful check (one prompt on one engine). Checks where Google shows no AI answer, failed checks and skipped checks are **never charged**.

| Engine | Price per check |
|---|---|
| ChatGPT (with web search) | $0.065 |
| Perplexity | $0.015 |
| Gemini (with Google Search) | $0.09 |
| Google AI Overviews | $0.005 |
| Google AI Mode | $0.005 |
| Any engine **with your own API key** | $0.004 |

**Example:** 50 prompts on all five engines ≈ **$9.00**. 50 prompts on Google AI Overviews and AI Mode ≈ **$0.50**. 50 prompts on ChatGPT and Perplexity ≈ **$4.00**. With your own OpenAI and Perplexity keys ≈ **$0.40** (plus your own API usage).

Set a **maximum cost per run** in the run options; the Actor stops cleanly when it is reached.

**Apify free plan:** ChatGPT, Perplexity and Gemini checks run only with your own API keys (at the $0.004 own-key price). Without a key they are reported as `SKIPPED` and not charged. Google AI Overviews and AI Mode work without keys, up to 20 checks per run.

### Use cases

- **AI search visibility (GEO / AEO):** measure how often AI assistants recommend your brand.
- **Competitive benchmarking:** share of voice and ranking against named competitors, per engine.
- **Content and PR strategy:** see which sites AI engines cite, and whether yours is among them.
- **Monitoring:** schedule weekly runs and compare mention rate and rank over time.
- **Agencies:** run the same prompt set for several clients and markets.

### FAQ

**Are the answers the same as in the ChatGPT or Gemini apps?**
They come from the official APIs with web search enabled, which are close to, but not always identical to, the consumer apps. Answers also vary between runs, as they do for real users.

**Why is a Google check `NOT_SHOWN`?**
Google shows AI Overviews and AI Mode answers only for some queries. These checks are free and are reported so you know where Google shows no AI answer.

**What if one engine is down?**
The other engines keep running. The affected checks are reported as `FAILED` with the reason and are not charged.

**Can I use my own API keys?**
Yes, for ChatGPT, Perplexity and Gemini. Checks on your keys cost $0.004 each. On the Apify free plan your own keys are required for these three engines. Your keys are stored as secret input and never logged.

**How is the sentiment calculated?**
With a lightweight English and Spanish word list applied to the sentences that mention your brand. It is a quick signal, not a full opinion analysis.

### Limits

- Up to 500 prompts and 20 competitors per run.
- One country and language per run.
- Brand detection matches the brand name, aliases and domain as whole words (case and accents ignored).

# Changelog

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

# Actor input Schema

## `brandName` (type: `string`):

Your brand as people write it, e.g. "HubSpot".

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

Other names that count as your brand (product names, abbreviations, old names).

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

Your domain, e.g. hubspot.com. Used to detect when AI answers cite your site.

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

One per line: Name, or Name | domain.com, or Name | domain.com | alias 1, alias 2.

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

Questions your customers ask AI assistants, one per line.

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

Where to check your brand. Each prompt is checked once on each engine.

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

Market the answers should reflect.

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

Language code of your prompts, e.g. en, es, de.

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

Use your own key for ChatGPT checks and pay the lower "own key" price.

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

Use your own key for Perplexity checks and pay the lower "own key" price.

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

Use your own key for Gemini checks and pay the lower "own key" price.

## Actor input object example

```json
{
  "brandName": "HubSpot",
  "brandAliases": [
    "HubSpot CRM"
  ],
  "brandDomain": "hubspot.com",
  "competitors": [
    "Salesforce | salesforce.com",
    "Pipedrive | pipedrive.com",
    "Zoho CRM | zoho.com | Zoho"
  ],
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "engines": [
    "perplexity",
    "google_ai_overview"
  ],
  "country": "US",
  "language": "en"
}
```

# Actor output Schema

## `checks` (type: `string`):

One row per prompt and AI engine: answer, brand and competitor mentions, rank, cited sources and sentiment.

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

Mention rate, average rank, own-site citation rate, sentiment and share of voice per engine.

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

Sources cited by each AI answer.

## `runSummary` (type: `string`):

Totals, charged events and timing of the run.

# 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 = {
    "brandName": "HubSpot",
    "brandAliases": [
        "HubSpot CRM"
    ],
    "brandDomain": "hubspot.com",
    "competitors": [
        "Salesforce | salesforce.com",
        "Pipedrive | pipedrive.com",
        "Zoho CRM | zoho.com | Zoho"
    ],
    "prompts": [
        "What is the best CRM for a small business?"
    ],
    "engines": [
        "perplexity",
        "google_ai_overview"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("technofystore/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 = {
    "brandName": "HubSpot",
    "brandAliases": ["HubSpot CRM"],
    "brandDomain": "hubspot.com",
    "competitors": [
        "Salesforce | salesforce.com",
        "Pipedrive | pipedrive.com",
        "Zoho CRM | zoho.com | Zoho",
    ],
    "prompts": ["What is the best CRM for a small business?"],
    "engines": [
        "perplexity",
        "google_ai_overview",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("technofystore/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 '{
  "brandName": "HubSpot",
  "brandAliases": [
    "HubSpot CRM"
  ],
  "brandDomain": "hubspot.com",
  "competitors": [
    "Salesforce | salesforce.com",
    "Pipedrive | pipedrive.com",
    "Zoho CRM | zoho.com | Zoho"
  ],
  "prompts": [
    "What is the best CRM for a small business?"
  ],
  "engines": [
    "perplexity",
    "google_ai_overview"
  ]
}' |
apify call technofystore/ai-visibility-tracker --silent --output-dataset

```

## MCP server setup

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