AI Brand Visibility Tracker: ChatGPT, Perplexity & Gemini
Pricing
from $50.00 / 1,000 ai answer checks
AI Brand Visibility Tracker: ChatGPT, Perplexity & Gemini
Check if ChatGPT, Perplexity & Gemini mention your brand. Visibility %, share of voice, sources, run-over-run trends and an HTML report. Pay per check, no subscription.
AI Answer Scorecard: an AI brand visibility tracker for ChatGPT, Perplexity and Gemini (GEO / AEO). Check whether AI search recommends your brand or your competitors, then track the change run after run. Pay per check, from $0.015 with your own API key, $0.05 with ours, no subscription. Visibility %, share of voice, position, cited sources and a client-ready HTML report.
Try it free: tick Demo mode (no AI calls, labelled example data) or paste your own OpenAI / Perplexity / Gemini API key: own-key checks work on every Apify plan, including free. The Actor's built-in keys need a paid Apify plan. A free-plan run without a key still finishes successfully with a clearly labelled demo result that tells you how to get real numbers.
What does AI Answer Scorecard track?
Give it your brand, your competitors and the questions your buyers ask. It asks OpenAI, Perplexity and Google Gemini each question through their official APIs and reports for every answer:
- Is your brand mentioned, in which position (1st, 2nd, 3rd…) and at which list rank?
- Which competitors are mentioned, and in which order?
- Which websites were cited as sources, and was your domain one of them? (OpenAI answers are always run with web search, so they carry cited sources.)
- How positive or negative is the sentence about your brand?
- Your visibility %, share of voice and top cited domains per engine.
How do I track my AI visibility week over week?
Tracking is the point of the Actor. A single check tells you where you stand; the trend tells you whether your content and PR work. Every real run:
- saves a compact summary in a named key-value store in your own Apify account (
ai-answer-scorecard-<brand>-<id>, last 52 runs, nothing leaves your account); - compares itself with the previous run and shows ▲ / ▼ changes for visibility %, share of voice, average position and cited-as-a-source %, per engine, per prompt and per competitor (who moved up or down a place);
- draws sparkline charts and a history table for the last 12 runs in the HTML report;
- writes the same numbers to
SUMMARY.trackingand addspreviousVisibilityPctandchangeVsPrevious(gained/lost/unchanged) to every dataset row, so you can push them straight to Google Sheets, Slack or a dashboard.
Changes that are smaller than the sampling noise are tagged "within noise" (the 95% ranges of the two runs overlap), so you do not chase random wobble. Set Runs per prompt to 3 or more to get a 95% confidence range around every visibility figure.
Schedule it weekly (no extra cost from us beyond the checks):
- Run the Actor once with your real input and save it as a Task (Console → Save as a new task).
- Open Schedules → Create new, set a cron such as
0 8 * * 1(every Monday 08:00), and add the task as the action. - Done. Each Monday's run is compared with the previous one. Keep the input the same (same brand, same prompts) so the comparison is like-for-like. Use Tracking ID to keep separate histories for the same brand, for example per country (
acme-uk,acme-us). If you change the prompt list the report says so and compares only the prompts present in both runs.
Scheduling costs nothing on top of the per-check price. Apify's own platform usage for a run of this size is a fraction of a cent. Optionally add a webhook / integration (Google Sheets, Slack, Make, Zapier) on the schedule's runs to get the new numbers delivered automatically.
What does the AI Answer Scorecard report look like?
A one-page, self-contained HTML report (report.html in the run's key-value store, open it in a browser or send it to a client):
- KPI cards with ▲/▼ chips: visibility, share of voice, average position, cited as a source
- Trend since the previous run: sparkline charts, change by engine, competitor movement, prompts that moved, last-12-runs history table
- By engine, share of voice vs competitors, most cited sources, visibility by prompt, sample answers with their sources
See it yourself in 30 seconds: tick Demo mode and run twice, setting Demo variation to 1 on the second run. The second report shows the ▲/▼ chips and charts for your own brand and competitors (labelled demo data, nothing billed).
How much does it cost?
Pay per event, only for answers actually delivered. No monthly fee.
| Event | Price | When |
|---|---|---|
| AI answer check | $0.05 | One answer from OpenAI, Perplexity or Gemini on the Actor's built-in keys |
| Grounded Gemini answer check | $0.10 | One Gemini answer grounded with Google Search (Google bills searches separately) |
| AI answer check (own API key) | $0.015 | You supplied your own API key and also pay the AI provider directly |
Examples: the default 2 prompts × 3 engines = 6 checks ≈ $0.30. Weekly tracking of 15 prompts × 3 engines ≈ 195 checks a month ≈ $9.75 (about $4–6 with your own keys plus provider fees). Failed answers, engines without a key and answers skipped because you hit your run's maximum cost per run are never billed. The Actor never starts a paid AI call it could not bill.
The live prices are shown on this page's pricing panel.
How does it compare with subscription AI-visibility tools?
Prices below are public list prices checked on 29 Oct 2026; they change often, so verify before you decide. The per-answer figures are our estimates for daily tracking at full plan usage.
| Tool | Public price | What you get | Approx. cost per answer at full daily use |
|---|---|---|---|
| Otterly.AI | $29 / $189 / $489 per month | 15 / 100 / 400 prompts on 4 engines; some engines are paid add-ons | about $0.016 (Lite) |
| Peec AI (third-party price tracker, 8 Oct 2026) | about $95 / $245 / $495 per month | 50 / 150 / 350 prompts, 3 models, daily | about $0.021 (Starter) |
| HubSpot AEO | $50 per month | 25 prompts daily on ChatGPT, Perplexity, Gemini | about $0.022 |
| AI Answer Scorecard | $0.05 per check, $0.015 with your own key | Any number of prompts, 3 engines, tracking + report | pay only for the checks you run |
Honest take: for daily, heavy tracking a subscription is cheaper per answer. This Actor wins for weekly or occasional tracking, one-off audits, agency pitches and anything where you do not want a monthly commitment. A 15-prompt × 3-engine weekly check is about $9.75 a month here, with no contract.
How do I run it from the API?
Replace <APIFY_TOKEN> with your token (Console → Settings → API & Integrations).
curl -X POST "https://api.apify.com/v2/acts/tan_carrel_h1q~ai-search-brand-visibility-monitor/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"brandName":"Notion","brandDomain":"notion.com","competitors":["Evernote","Obsidian"],"prompts":["What is the best note-taking app for a small team?"],"engines":["openai"],"openaiApiKey":"<YOUR_OPENAI_KEY>"}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('tan_carrel_h1q/ai-search-brand-visibility-monitor').call({brandName: 'Notion',brandDomain: 'notion.com',competitors: ['Evernote', 'Obsidian'],prompts: ['What is the best note-taking app for a small team?'],trackingId: 'notion-weekly',});const summary = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('SUMMARY');console.log(summary.value.headline, summary.value.tracking?.overall?.visibilityPct);
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("tan_carrel_h1q/ai-search-brand-visibility-monitor").call(run_input={"brandName": "Notion","brandDomain": "notion.com","competitors": ["Evernote", "Obsidian"],"prompts": ["What is the best note-taking app for a small team?"],"trackingId": "notion-weekly",})summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("SUMMARY")["value"]print(summary["headline"], summary.get("tracking", {}).get("overall", {}).get("visibilityPct"))
Can I use it with AI agents through the Apify MCP server?
Yes. Add the hosted Apify MCP server to Claude, Cursor, VS Code or any MCP client and your agent can discover and run this Actor on its own:
{"mcpServers": {"apify": { "url": "https://mcp.apify.com?tools=tan_carrel_h1q/ai-search-brand-visibility-monitor" }}}
Example prompt: "Use AI Answer Scorecard to check whether ChatGPT, Perplexity and Gemini recommend Notion for 'best note-taking app for a small team', compare with Evernote and Obsidian, and tell me what changed since the last run." Agents with the default Apify tools can also find it with search-actors ("does ChatGPT recommend my brand").
How do I use it?
- Enter your brand name (plus aliases and your domain, e.g.
notion.com). - Add competitors. Use
Name | alias | domain.comto give a competitor aliases or a domain. - Add prompts: realistic buyer questions, e.g. "What is the best CRM for a 10-person agency?". Include some that do not name any brand.
- Pick the engines, press Start, then schedule the same task weekly. Optionally set a country and answer language.
Input example:
{"brandName": "Notion","brandAliases": ["Notion Labs"],"brandDomain": "notion.com","competitors": ["Evernote", "Obsidian", "Coda | Coda.io | coda.io", "ClickUp", "Confluence"],"prompts": ["What is the best note-taking and knowledge management app for a small team?","Which tools should a startup use to organize documents and project wikis?"],"engines": ["openai", "perplexity", "gemini"],"runsPerPrompt": 1,"country": "GB","trackingId": "notion-uk-weekly"}
What data do I get?
| Output | Where | What it contains |
|---|---|---|
| Answer rows | Default dataset (view "Overview") | One row per engine × prompt × run: brandMentioned, brandPosition, brandListRank, competitorsMentioned, citations, citedDomains, brandCited, shareOfVoice, sentiment, sentimentSnippet, full answer, previousVisibilityPct, changeVsPrevious, timestamp |
| Summary | Key-value store record SUMMARY | Visibility %, share of voice, per engine and per prompt; top cited domains; run details; tracking: deltas vs the previous run, competitor movement, last-12-runs history |
| HTML report | Key-value store record report.html | The shareable AI Answer Scorecard with trend charts |
| History | Named key-value store ai-answer-scorecard-… in your account | Compact snapshot of each run (last 52) used for comparisons; delete the store to reset your history |
One dataset row (shortened):
{"checkId": "perplexity:1:1","engine": "perplexity","prompt": "What is the best note-taking and knowledge management app for a small team?","brand": "Notion","brandMentioned": true,"brandPosition": 2,"competitorsMentioned": [{ "name": "Evernote", "mentions": 1, "position": 1 }],"shareOfVoice": 40,"sentiment": "positive","brandCited": true,"citedDomains": ["notion.com", "g2.com"],"previousVisibilityPct": 0,"changeVsPrevious": "gained"}
SUMMARY.tracking.overall.visibilityPct (shortened):
{ "value": 66.7, "previous": 50, "delta": 16.7, "trend": "up", "better": true, "withinNoise": true }
(Example values are illustrative.)
How are the metrics defined?
- Visibility %: share of answers that mention your brand at least once. With Runs per prompt above 1 the report adds a 95% Wilson range (each check treated as an independent trial: a rough guide to sampling noise).
- Position: the order in which brands first appear in the answer (1 = first named among you and your competitors). List rank: the item number if the answer is a numbered or bulleted list. For the average position, lower is better.
- Share of voice: your mentions ÷ all mentions of you and the listed competitors.
- Cited %: share of answers whose source list contains your domain (needs
brandDomain). - Matching: case-insensitive, whole words, aliases, and domain/URL matching. A name followed directly by
.letters(e.g.Acme.community) is treated as part of a domain, not a mention. - Sentiment: a transparent keyword heuristic on the sentences mentioning your brand, English only. Treat it as a pointer to read the snippet, not as a verdict.
What is GEO or AEO, and what is share of voice in AI search?
Generative Engine Optimization (GEO) and Answer Engine Optimization (AEO) mean improving how often, and how favourably, AI assistants name and cite your brand. AI share of voice is your brand's share of all brand mentions (yours plus the competitors you list) across the AI answers to your buyer questions: the AI-search equivalent of rank tracking and share of voice in SEO.
Free Apify plan: own API key or demo
Apify does not pay developers for runs from free plans, and every check on the built-in keys costs real money, so the built-in keys need a paid Apify plan (trials count as paid). On a free plan you can still:
- Use your own API key: paste your OpenAI, Perplexity and/or Gemini key into the secret input fields. $0.015 per check, and you also pay your AI provider.
- Use Demo mode: free canned example data with the full tracking and report layout.
A free-plan run with no usable key does not fail: it makes no AI call, charges nothing and finishes successfully with a clearly labelled DEMO result (dataset, summary and report all marked as demo, plus a message on how to get real results). Demo results are never written to your tracking history.
FAQ
Which models are queried? Defaults: OpenAI gpt-4o-mini always with web search (so answers cite sources), Perplexity perplexity/sonar, Gemini gemini-3.5-flash-lite. With your own key you can choose any model. These are the API versions: answers in the consumer apps (ChatGPT, Perplexity, Gemini and Google AI Overviews) can differ because those apps use their own system prompts, personalisation and ranking layers.
Is this the same as what my customers see in ChatGPT? Not exactly. It is a consistent, repeatable proxy using the official APIs with web search or grounding enabled. Use it for trends and competitor comparisons, not as a replica of a consumer app.
Why does the same prompt give different results? LLMs are non-deterministic. Use Runs per prompt of 3–5 and watch the trend over several runs rather than a single number.
Does Gemini use Google Search? Only if you tick "Gemini: ground answers with Google Search" (premium event). Without it Gemini answers from its training data and returns no sources.
Where is my tracking history stored, and can I delete it? In a named key-value store (ai-answer-scorecard-…) inside your own Apify account. Delete the store, or untick Track results over time, to reset or stop it.
What if an API key is missing or invalid? Engines without a key are skipped with a clear log message; an engine whose key is rejected or out of quota is switched off for the rest of the run while the others continue. If no engine has a key you get the labelled demo result.
Is it legal and allowed? The Actor calls official APIs, not websites. You are responsible for the prompts you submit and for complying with the AI providers' terms for your own key.
Where do I report a problem? Use the Issues tab of this Actor.
Limitations
- English-only sentiment heuristic; matching is lexical (it does not understand context such as a brand that is also a common word: add precise aliases and use the domain).
- API answers are not identical to consumer chat apps; Google AI Overviews and AI Mode are not measured, and Claude, Copilot and Grok are not covered (Claude and others may be added later).
- Gemini without grounding returns no sources; grounded Gemini cites redirect links whose domain is taken from the source title.
- Position is the order of first mention in text: a proxy for prominence, not an official ranking.
- Trends are only as stable as the sampling: with a few prompts and one run each, week-to-week moves are often noise (the report flags this).
- Provider-side limits (rate limits, outages, deprecated models) can cause failed checks; they are retried, then reported in the
ERRORSrecord and not billed. - Up to 100 prompts, 30 competitors and 1,000 checks per run.
Not affiliated
AI Answer Scorecard is an independent tool. It is not affiliated with, endorsed by or sponsored by OpenAI, Perplexity, Google or any brand you monitor. Product names are used only to describe which API is queried.
Technical notes
- Node.js 22 on the Apify platform,
apifySDK, no browser, 256 MB memory is enough. - Local development:
npm install && npm test && npm run mock(mock mode needs no API keys). - The Actor owner's keys are the secret environment variables
OPENAI_API_KEY,PERPLEXITY_API_KEY,GEMINI_API_KEY.