# AI Visibility Tracker: ChatGPT, Gemini, Perplexity & AI Mode (`brightgro/ai-visibility-check`) Actor

Check whether ChatGPT, Gemini, Perplexity and Google AI Mode name your brand when people ask your prompts. For each prompt and engine: mentioned or not, how often, whether your domain is cited, which competitors appear, and the cited domains.

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

## Pricing

$40.00 / 1,000 engine 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: ChatGPT, Gemini, Perplexity & AI Mode

Find out whether AI search engines name your brand when people ask the questions your buyers ask. Give a brand, your domain, a list of prompts and, if you like, your competitors. The actor asks each prompt on each engine you choose and reports what the answer says about you. The answers come from DataForSEO's AI optimization and SERP data.

### Input

- Brand name: the name to look for, for example `Notion`.
- Brand domain: your website, for example `notion.so`, to check whether the answer cites you.
- Prompts: up to 50 questions, for example `best note taking app for teams`.
- Engines: ChatGPT, Gemini, Perplexity and Google AI Mode. All four by default.
- Competitors: up to 20 names to look for in the same answers.
- Country and language: where the search runs from (16 countries) and the language code.

### Output

One row for each prompt on each engine:

| Field | What it holds |
|---|---|
| engine, prompt, brand | What was checked |
| brand_mentioned, mention_count | Whether the answer names the brand, and how often |
| first_mention_at_pct | How far into the answer the first mention is, from 0 (the start) to 100 |
| brand_domain_cited | Whether a cited source is on your domain |
| competitors_mentioned | Which of your competitors the answer names |
| cited_domains | The domains the answer cites |
| answer_excerpt | The first 1,500 characters of the answer |
| checked_at | When the check ran |

Run it on a schedule to track your AI visibility over time.

### Price

One `check` event for each prompt on each engine, at the price on this page. Four engines and ten prompts are 40 events. A check that an engine could not answer is not charged and gets a row with `status` set to `engine_error`. When the run's spending limit is reached, the run stops and keeps the rows it already has.

### Limits

- AI answers change from one run to the next. A single check is a sample, not a ranking.
- A brand is matched by its name as a whole word, not by spelling variants.

# Actor input Schema

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

The name to look for in each answer, for example Notion.

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

Your website, for example notion.so. Used to check whether the answer cites you.

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

Questions your buyers ask, up to 50. Each prompt on each engine is one event.

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

The AI engines to check. Leave empty for all four.

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

Competitor names to look for in the same answers, up to 20.

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

Where the search runs from.

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

Language code, for example en or de.

## Actor input object example

```json
{
  "brand": "Apify",
  "brandDomain": "apify.com",
  "prompts": [
    "best web scraping platform"
  ],
  "engines": [
    "perplexity"
  ],
  "country": "US",
  "language": "en"
}
```

# Actor output Schema

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

Check whether ChatGPT, Gemini, Perplexity and Google AI Mode name your brand when people ask your prompts. For each prompt and engine: mentioned or not, how often, whether your domain is cited, which competitors appear, and the cited domains.

# 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": "Apify",
    "brandDomain": "apify.com",
    "prompts": [
        "best web scraping platform"
    ],
    "engines": [
        "perplexity"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("brightgro/ai-visibility-check").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": "Apify",
    "brandDomain": "apify.com",
    "prompts": ["best web scraping platform"],
    "engines": ["perplexity"],
}

# Run the Actor and wait for it to finish
run = client.actor("brightgro/ai-visibility-check").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": "Apify",
  "brandDomain": "apify.com",
  "prompts": [
    "best web scraping platform"
  ],
  "engines": [
    "perplexity"
  ]
}' |
apify call brightgro/ai-visibility-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brightgro/ai-visibility-check"
        }
    }
}
```

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/pvC8G9tmMvE3uSpmk/builds/jxfqBz2Ecr9gkpUAC/openapi.json
