AI Brand Visibility Monitor — ChatGPT, Claude, Gemini (GEO)
Pricing
from $20.00 / 1,000 visibility checks
AI Brand Visibility Monitor — ChatGPT, Claude, Gemini (GEO)
Track your brand's visibility across ChatGPT, Claude, Gemini & Perplexity (GEO/AEO). Ask the AIs your buyers' questions, get a visibility score, mention position, competitor share & Perplexity citations. Uses official APIs with your own keys. $20 per 1,000 checks; failed calls never charged.
AI Brand Visibility Tracker for ChatGPT, Claude, Gemini & Perplexity (GEO / AEO)
Track how often ChatGPT, Claude, Gemini, and Perplexity mention your brand when your customers ask them for recommendations — and whether they recommend a competitor instead. This Actor sends your buyers' real questions to the official OpenAI, Anthropic, Google, and Perplexity APIs, then analyzes every answer locally for brand mentions, mention position, competitor share, and Perplexity citations, and gives you a visibility score per AI assistant you can track over time.
It runs on your own API keys (bring-your-own-keys): every check is a normal, paid-by-you API call to an official endpoint. No scraping of ChatGPT/Gemini web apps, no fragile browser automation, no terms-of-service gray zone — and your keys are encrypted at rest and never logged.
What it does
- Asks each selected AI the prompts your buyers would actually type (e.g. "best web scraping tools 2026").
- Detects whether your brand is mentioned (whole-word, case-insensitive — "Acme" never matches "Acmeify").
- Measures where the mention appears in the answer: first, middle, or late.
- Tracks whether your brand appears before every competitor you list ("brand-first").
- Records which competitors the AIs name instead, and their share of mentions.
- For Perplexity, extracts the source domains it cites and checks whether your domain is one of them.
- Aggregates everything into a per-provider visibility score plus an overall score in a final summary item.
What it does NOT do (limitations)
- It calls the provider APIs, not the consumer ChatGPT/Gemini/Perplexity websites. The API view is the stable, comparable signal GEO tools track, but the public apps add their own system prompts and (sometimes) web search, so wording can differ.
- Only Perplexity returns web citations (
citedDomains/brandDomainCited). OpenAI, Anthropic, and Gemini default models answer from training knowledge, so those checks have no citation data. - It reports mentions, position, and citations — not sentiment or tone analysis.
- LLM answers are non-deterministic; a single run is a snapshot. Use
runsPerPrompt2–3 and weekly schedules for a reliable trend.
How it works
- You enter your brand name, the prompts your customers ask, optional competitors and domain, and an API key for each provider you select.
- For every prompt × provider × run, the Actor calls that provider's official API with your key (3 concurrent requests, with retry/backoff).
- Each answer is analyzed locally (no extra LLM call) for brand mention, position, brand-first ordering, competitors, and — for Perplexity — cited domains.
- One dataset item is written per successful check, and you are charged one
visibility-checkevent. Failed calls are logged and never charged. - A final summary item aggregates visibility scores, brand-first rate, citation rate, and competitor share per provider.
Input
| Field | Type | Default | Description |
|---|---|---|---|
brandName | string | — (required) | Brand to detect. Case-insensitive, word-boundary matching. |
prompts | array | — (required) | 1–50 questions to ask each AI. |
brandDomain | string | none | Your domain, for Perplexity citation checking (scheme/www. ignored). |
competitors | array | [] | Up to 5 competitor names to track for share + brand-first. |
providers | array | ["openai"] | Any of openai, anthropic, gemini, perplexity. |
openaiApiKey … perplexityApiKey | secret string | — | Your key per selected provider (encrypted, never logged). |
openaiModel … perplexityModel | string | cheap defaults | Per-provider model override (defaults: gpt-5-mini, claude-haiku-4-5, gemini-3.5-flash, sonar). |
temperature | number | 0.7 | Sampling temperature (auto-omitted for GPT-5 family, clamped to 0–1 for Claude). |
runsPerPrompt | integer | 1 | 1–3 runs per prompt per provider for a stabler signal. |
{"brandName": "Acme","brandDomain": "acme.com","competitors": ["Globex", "Initech"],"prompts": ["best web scraping tools 2026","which web scraping platform should a startup use?"],"providers": ["openai", "perplexity"],"openaiApiKey": "sk-...","perplexityApiKey": "pplx-...","runsPerPrompt": 2}
Output fields
One check item per successful (prompt × provider × run):
| Field | Type | Description |
|---|---|---|
type | string | Always "check" for per-check items. |
prompt | string | The question that was asked. |
provider | string | openai, anthropic, gemini, or perplexity. |
model | string | The model ID used for this check. |
runIndex | integer | Which run this is (1…runsPerPrompt). |
brandName | string | The brand that was searched for. |
brandMentioned | boolean | Whether the brand appears in the answer. |
mentionPosition | string | first, middle, late, or none. |
brandFirst | boolean | Brand appears before every mentioned competitor. |
competitorsMentioned | array | Competitors found, in order of first appearance. |
citedDomains | array | Source domains cited (Perplexity only; [] otherwise). |
brandDomainCited | boolean / null | Brand domain among the citations; null if no domain given. |
answerText | string | The AI answer, truncated to 2,000 chars (analysis uses the full text). |
checkedAt | string | ISO-8601 UTC timestamp. |
Plus one final summary item ("type": "summary", never charged):
| Field | Description |
|---|---|
brandName, brandDomain | Echoed input. |
prompts, runsPerPrompt | Run configuration. |
checksSucceeded, checksFailed | Counts across all providers. |
overallVisibilityScore | % of all successful checks that mentioned the brand. |
providers | Per-provider object: model, checksSucceeded, checksFailed, visibilityScore, brandFirstRate, brandDomainCitedRate (Perplexity + domain only). |
competitorShare | % of successful checks mentioning each competitor. |
checkedAt | ISO-8601 UTC timestamp. |
{"type": "summary","brandName": "Acme","checksSucceeded": 20,"checksFailed": 0,"overallVisibilityScore": 65.0,"providers": {"openai": { "model": "gpt-5-mini", "visibilityScore": 70.0, "brandFirstRate": 40.0 },"perplexity": { "model": "sonar", "visibilityScore": 60.0, "brandDomainCitedRate": 30.0 }},"competitorShare": { "Globex": 45.0, "Initech": 10.0 }}
Use cases
- SEO / GEO specialists — turn "are we visible in AI search?" into a weekly visibility score per assistant, with before/after evidence for content and digital-PR work.
- Brand & marketing managers — see how ChatGPT, Claude, Gemini, and Perplexity describe your brand and which competitors they recommend instead.
- Founders & indie hackers — cheaply check whether the AIs name your product when buyers ask "best tool for X," without buying a $99+/mo monitoring SaaS.
- Agencies — run the same prompt set across multiple client brands and competitors on a schedule, and deliver an AI-share-of-voice report.
- AI / automation engineers — call it as an MCP tool so an agent (Claude, Cursor) can check brand visibility on demand and reason over the results.
Why monitor AI search visibility (GEO / AEO)?
AI answers now sit in front of buying decisions, so brand visibility inside them has become a tracked marketing KPI. The 2026 AI Search Benchmark Report (312 IT/technology service firms, Jan 2025–Jan 2026) found AI-referred visitors converted at 14.2% versus 2.8% for Google organic — while AI referral share of traffic grew from under 1% to 6.4% in a year. Conductor's 2026 AEO/GEO Benchmarks Report documents the same shift. You can't optimize what you don't measure — this Actor is the measurement loop.
Pricing
This Actor is pay-per-event — there is no subscription and no monthly fee. You pay only for checks that run.
| Cost | Who you pay | Amount |
|---|---|---|
| Actor fee | Apify (pay-per-event) | $20 per 1,000 visibility checks (i.e. $0.02 per successful visibility-check event) |
| LLM API usage | The provider, via your own key | Typically well under $0.01 per check with the default cheap models (gpt-5-mini, claude-haiku-4-5, gemini-3.5-flash, sonar). Perplexity adds a small per-search fee. |
A "check" is one (prompt × provider × run) call. Example: 10 prompts × 2 providers × 1 run = 20 checks = $0.40 Actor fee, plus a few cents of your own API usage. Failed checks are never charged — a bad key, a rate limit after 3 retries, or a timeout produces a logged warning, not a billed event. If a key is rejected (401/403), all remaining checks for that provider are skipped immediately. You can also cap the maximum total cost per run in Apify Console.
Privacy: keys are encrypted and never logged
API-key fields are marked isSecret in the input schema, so Apify encrypts them at rest and decrypts them only inside your run. The Actor uses keys exclusively in request headers (never in URLs or query strings), never logs them, and never writes them to the dataset.
Track your AI visibility weekly (recommended)
GEO is a trend metric, not a one-off audit. In Apify Console, open the Actor → Schedules → create a weekly schedule with your saved input. Each run appends to a named dataset, so after a month you have a week-by-week series of visibility scores per provider. Pair it with a Slack, email, or webhook integration to get the summary delivered automatically.
Use from Claude, Cursor & other AI agents (MCP)
This Actor works as a tool over the Model Context Protocol. Add Apify's MCP server to your client and your agent can run visibility checks on demand:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/sse?actors=bikram07/ai-brand-visibility-monitor","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Or call it from code via the Apify API:
curl -X POST "https://api.apify.com/v2/acts/bikram07~ai-brand-visibility-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"brandName": "Acme", "prompts": ["best web scraping tools 2026"], "providers": ["openai"], "openaiApiKey": "sk-..."}'
FAQ
How do I check if ChatGPT mentions my brand?
Add your brand name, the questions your customers ask (e.g. "best CRM for small business"), select the openai provider, paste your OpenAI API key, and run. Each answer is analyzed for whole-word brand mentions, position, and competitor ordering — you get a per-prompt breakdown plus a final visibility score.
Is this a subscription? No. It's pay-per-event: $20 per 1,000 successful checks ($0.02 each), with no monthly fee. You pay only for the checks you run, and you can set a max-cost cap per run.
How does pricing / refunds work, and what counts as a paid check? A "check" is one (prompt × provider × run) call. You're charged only when a check succeeds; failed calls (bad key, rate limit, timeout) are never billed, so there's nothing to refund for failures. Your separate LLM API spend is billed directly by each provider on your own key.
Does it use official APIs or scrape the websites? Official APIs only — OpenAI, Anthropic, Google Gemini, and Perplexity. There is no scraping of the ChatGPT/Gemini/Perplexity web apps, which means no terms-of-service risk and no breakage when those UIs change.
Why do I need my own API keys? Honesty (no markup on LLM calls — you pay providers their real price), reliability (official APIs don't break like scraped UIs), and compliance (no ToS-violating scraping). Keys are encrypted by Apify's secret-input feature and never logged or stored in the dataset.
Why do results differ between runs?
LLM sampling is non-deterministic — the same prompt can return different answers. That's why runsPerPrompt exists: set it to 2–3 and read the aggregate visibility score rather than a single answer. Trends across weekly runs matter more than any individual check.
This Actor is independent and is not affiliated with or endorsed by OpenAI, Anthropic, Google, or Perplexity. You are responsible for your own API usage under each provider's terms.