# AI Visibility Tracker: ChatGPT Visibility & LLM Visibility (`plainrows/ai-search-brand-visibility`) Actor

AI search & brand visibility tracker for ChatGPT, LLM visibility and GEO MCP tool: ask ChatGPT, Gemini, Perplexity, Google AI Mode customer questions, see if your brand is named, your site cited, which rivals appear. Answers, sources, fan-out queries. Pay per answer + a fee per question answered.

- **URL**: https://apify.com/plainrows/ai-search-brand-visibility.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** SEO tools, AI, Marketing
- **Features:** Limited permissions
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 ai answers

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 Visibility Tracker: ChatGPT Visibility & LLM Visibility

Ask **ChatGPT, Gemini and Google AI Mode** the questions your customers ask, and see in one table **whether your brand is mentioned, whether your website is cited, which competitors show up, and which sites the answers rely on**. Each answer comes with its sources, the web searches the engine ran (ChatGPT) and, if you want, the full text. **Perplexity** can be added as a fourth engine (optional, not asked by default): it is asked through the Perplexity Sonar API with web search.

It calls a commercial data API instead of driving browsers or accounts: **no proxies, no logins, no CAPTCHAs**. Each answer takes about 20 seconds; questions run three at a time. **You only pay for answers returned**: engines that fail, empty answers and questions nobody answered are free.

### Typical uses

- **AI search visibility (GEO / AEO)**: are you recommended when people ask "best CRM for a small agency" or "is Acme reliable?" — and in which position compared with your competitors?
- **Citation tracking**: which pages do the engines cite for your topics, and is your site one of them? Spot the reviews and comparison sites you need to be on.
- **Competitor monitoring**: who gets named instead of you, engine by engine, country by country.
- **Content planning**: the fan-out queries show what ChatGPT searched for to answer; the cited pages show what content wins.
- **Weekly reports and alerts**: schedule a run and send the table to Google Sheets, Looker Studio, Slack, n8n, Make or Zapier.

### What you get for each answer

One row per question and engine:

| Field | Description |
|---|---|
| `prompt`, `engine` | Your question; `chatgpt`, `gemini`, `google_ai_mode` or `perplexity` |
| `brandMentioned`, `brandMentionRank` | Your brand appears in the answer; 1 = it is named before your competitors |
| `brandDomainCited`, `brandDomainCitationRank` | Your website is among the sources or links, and at which position |
| `competitorsMentioned`, `competitorDomainsCited` | Competitors named (in order of appearance) and competitor sites cited |
| `citedDomains`, `sources` | Domains and sources (title, domain, URL) the answer cites, in order, up to 20 |
| `fanOutQueries` | Web searches ChatGPT ran to answer |
| `answerText`, `answerLength` | The answer as Markdown (optional) and its length |
| `model` | Model that answered, when the engine reports it |
| `country`, `languageCode`, `checkedAt` | Where and when the question was asked |

Brand and competitor names are matched as whole words, in any case ("Acme" does not match "Acmex"). Images in an answer are not counted as citations. Missing values are `null`, never guessed.

In the run's **Output** tab, the **Cited sources** view lists one row per source (question, engine, domain, title, URL), ready to export to CSV or Google Sheets: see which pages the AI engines rely on for your questions. From the API: `.../items?view=sources`.

### Input

```json
{
  "prompts": ["best standing desk for small spaces", "best electric standing desk under $500"],
  "brandNames": ["FlexiSpot"],
  "brandDomain": "flexispot.com",
  "competitors": ["Uplift", "Desky", "IKEA"],
  "competitorDomains": ["upliftdesk.com"],
  "engines": ["chatgpt", "gemini", "google_ai_mode"],
  "country": "US"
}
```

- **prompts**: up to 200 questions per run, kept as you type them. Each one is asked once to each engine.
- **brandNames** (optional): your brand and its variants. Without it you still get the answers, sources and competitors.
- **brandDomain** (optional): your site; subdomains count, a path is ignored (`acme.com/fr` = `acme.com`). Gemini's sources are mostly Google Shopping and Google Search pages, so Gemini rarely shows your own site as cited.
- **competitors**, **competitorDomains** (optional): up to 10 each.
- **engines**: any of `chatgpt` (ChatGPT with web search), `gemini`, `google_ai_mode`, `perplexity` (Perplexity Sonar API with web search, optional). Default: the first three.
- **country**: US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP. **languageCode** defaults to the country's main language.
- **includeAnswerText** (default true): turn off for lighter rows.

### Output example

Real row from 2026-10-09 (ChatGPT, US; answer text and source links shortened here):

```json
{
  "prompt": "best standing desk for small spaces",
  "engine": "chatgpt",
  "found": true,
  "model": "gpt-6",
  "brandMentioned": true,
  "brandMentionRank": 1,
  "brandDomainCited": false,
  "brandDomainCitationRank": null,
  "competitorsMentioned": [
    "Desky",
    "Uplift"
  ],
  "competitorDomainsCited": [
    "upliftdesk.com"
  ],
  "citedDomains": [
    "staples.com",
    "desky.com",
    "bestbuy.com",
    "wfhworld.com",
    "deskfinds.com",
    "upliftdesk.com"
  ],
  "sources": [
    {
      "title": "Shop at Staples",
      "domain": "staples.com",
      "url": "https://www.staples.com/flexispot-ec2-40-w-electric-rectangular-adjustable-standing-desk-white-ec2w-4024w/product_24686947"
    },
    {
      "title": "Shop at Desky",
      "domain": "desky.com",
      "url": "https://desky.com/products/dual-small-standing-desk"
    }
  ],
  "fanOutQueries": [
    "best compact standing desks for small spaces 2026 reviews dimensions"
  ],
  "answerText": "For a small bedroom, apartment, or home-office corner, I’d look for a standing desk that’s **40–42 inches wide, around 24 inches deep, and electrically height-a…",
  "answerLength": 4846,
  "country": "US",
  "languageCode": "en",
  "checkedAt": "2026-10-09T13:21:40.000Z",
  "schemaVersion": "1.0"
}
```

### Pricing

Two charges, no subscription, no fee per run (see the **Pricing** tab for the current prices):

- **AI answer**: per answer returned (one engine's answer to one question). Three engines and ten questions = up to 30 answers.
- **Question asked**: a small fixed fee once per question that got at least one answer, whatever the number of engines. Each engine asked costs us the same whether it answers or comes back empty; this fee pays for the empty ones, so empty answers themselves are never billed.

Engines that fail, empty answers and questions with no answer at all are never billed (no question fee either). The run never spends more than the maximum cost you set: it asks only the engines the remaining budget can pay for.

**Free Apify plan:** each run asks the first 3 questions, so you can test the output. A paid Apify plan removes this limit.

### Good to know

- AI answers change from one run to the next, even for the same question: track trends over several runs (a weekly schedule), not a single answer.
- Answers are those of a logged-out user in the chosen country and language, not of a personal account with its history.
- In our test on 2026-10-09 (one shopping question), ChatGPT cited 6 sources, Google AI Mode 3, and Gemini's 5 sources were Google Shopping product pages: what counts as a citation differs from one engine to another.
- Not affiliated with OpenAI or Google.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): questions run, questions with no answer, answers billed, answers that came back without text (not billed), engines that failed, and anything skipped because of the free-plan or budget limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~ai-search-brand-visibility/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"prompts": ["best CRM for a small agency"], "brandNames": ["Acme"], "brandDomain": "acme.com"}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/ai-search-brand-visibility`, schedule it weekly and send the rows to Google Sheets or Slack.

**AI agents (MCP):** add `https://mcp.apify.com?tools=plainrows/ai-search-brand-visibility` to Claude, Cursor or any MCP client.

### FAQ

**How do I check if ChatGPT recommends my brand?**
Put the questions your customers ask in **prompts**, your brand in **brandNames**, and run. `brandMentioned` and `brandMentionRank` tell you, engine by engine.

**Does it use my ChatGPT account?**
No account is needed or used. Answers come from a commercial data API.

**Which AI engines?**
ChatGPT (with web search), Gemini and Google AI Mode by default. Perplexity is optional: add `perplexity` to engines (Perplexity Sonar API with web search, same price per answer). Claude is not included.

**Why do two runs give different answers?**
AI engines vary their answers. Compare several runs over time.

**How do I also get how often a keyword is used in AI tools?**
[Keyword Search Volume](https://apify.com/plainrows/keyword-search-volume) adds an AI search volume per keyword (from October 24, 2026).

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Bing Keyword Search Volume & CPC](https://apify.com/plainrows/bing-keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Competitor Keywords API (Ranked Keywords)](https://apify.com/plainrows/competitor-keywords-api) · [Bulk Website Traffic Checker](https://apify.com/plainrows/website-traffic-checker) · [SEO Competitors & Keyword Gap Finder](https://apify.com/plainrows/seo-competitors-keyword-gap) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Backlink API (Referring Domains & Backlinks Data)](https://apify.com/plainrows/backlink-api) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [AliExpress Scraper](https://apify.com/plainrows/aliexpress-scraper) · [Kleinanzeigen Scraper (Germany)](https://apify.com/plainrows/kleinanzeigen-scraper) · [AutoScout24 Scraper (Cars, Europe)](https://apify.com/plainrows/autoscout24-scraper) · [Kijiji Scraper (Canada)](https://apify.com/plainrows/kijiji-scraper) · [Marktplaats Scraper (Netherlands)](https://apify.com/plainrows/marktplaats-scraper) · [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

**Compared with other APIs:** [Is your brand in ChatGPT, Gemini and Google AI Mode answers?](https://nadaho.github.io/plainrows/brand-visibility-in-ai-answers/) · [Which of your keywords show a Google AI Overview? (bulk check)](https://nadaho.github.io/plainrows/keywords-with-ai-overviews/)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

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

Questions your customers would ask an AI assistant, one per line, as they would type them ("best CRM for a small agency", "is Acme reliable?"). Each question is asked once to each engine. Up to 200 per run.

## `brandNames` (type: `array`):

Your brand name and its variants ("Acme", "Acme CRM"). Matched as whole words, any case. Leave empty to only collect the answers and their sources.

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

Your domain (acme.com): tells whether the answer cites or links your site, and at which position. Subdomains count; a path is ignored. Gemini mostly cites Google pages, so it rarely shows your site as cited.

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

Competitor names to look for in the answers (up to 10).

## `competitorDomains` (type: `array`):

Competitor domains to look for in the cited sources (up to 10).

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

Which engines to ask. Each answer is billed once. Perplexity is optional: add it to also ask Perplexity (Sonar API with web search).

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

Where the question is asked from.

## `languageCode` (type: `string`):

Two-letter language code, e.g. "en" or "fr". Leave empty to use the country's main language (for example German for Switzerland, French for Belgium).

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

Adds the answer as Markdown (answerText). Turn off for lighter rows.

## Actor input object example

```json
{
  "prompts": [
    "best standing desk for small spaces"
  ],
  "brandNames": [
    "FlexiSpot"
  ],
  "brandDomain": "flexispot.com",
  "competitors": [
    "Uplift",
    "Desky",
    "IKEA"
  ],
  "engines": [
    "chatgpt",
    "gemini",
    "google_ai_mode"
  ],
  "country": "US",
  "includeAnswerText": true
}
```

# Actor output Schema

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

No description

## `sources` (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 = {
    "prompts": [
        "best standing desk for small spaces"
    ],
    "brandNames": [
        "FlexiSpot"
    ],
    "brandDomain": "flexispot.com",
    "competitors": [
        "Uplift",
        "Desky",
        "IKEA"
    ],
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/ai-search-brand-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": ["best standing desk for small spaces"],
    "brandNames": ["FlexiSpot"],
    "brandDomain": "flexispot.com",
    "competitors": [
        "Uplift",
        "Desky",
        "IKEA",
    ],
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/ai-search-brand-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": [
    "best standing desk for small spaces"
  ],
  "brandNames": [
    "FlexiSpot"
  ],
  "brandDomain": "flexispot.com",
  "competitors": [
    "Uplift",
    "Desky",
    "IKEA"
  ],
  "country": "US"
}' |
apify call plainrows/ai-search-brand-visibility --silent --output-dataset

```

## MCP server setup

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