AI Brand Monitor: GEO / AI Search Visibility Tracker avatar

AI Brand Monitor: GEO / AI Search Visibility Tracker

Pricing

Pay per event

Go to Apify Store
AI Brand Monitor: GEO / AI Search Visibility Tracker

AI Brand Monitor: GEO / AI Search Visibility Tracker

Track how your brand appears in AI answers across ChatGPT, Gemini & Claude. Measure mention rate, share-of-voice vs competitors, ranking & cited sources — with multi-sample reliability. GEO / AEO visibility data for SEO agencies, brand & PR teams. Pay-as-you-go.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

4

Monthly active users

4 days ago

Last modified

Categories

Share

AI Brand Monitor — GEO / AI Search Visibility Tracker

AI Brand Monitor — GEO / AI Search Visibility Tracker

Is your brand what ChatGPT, Gemini and Claude recommend — or are your competitors? Buyers no longer "Google it" — they ask an AI. This Actor measures exactly how visible your brand is inside AI answers, sampling each buyer-intent prompt multiple times (AI answers are non-deterministic) and returning a reliable AI Visibility Index, share-of-voice vs. competitors, sentiment and the exact citation gaps to close. This is the new SEO — GEO (Generative Engine Optimization) / AEO (Answer Engine Optimization).

  • 🤖 ChatGPT, Gemini & Claude out of the box (Perplexity with your own key) — every answer grounded in live web search, no setup, no scraping
  • 🎯 Multi-sample reliability — each prompt is asked N times → a mention rate + stability, not a one-shot coin-flip
  • 📊 AI Visibility Index (0–100) — mention rate + rank + citation rate, with share-of-voice, sentiment and a trend delta vs. your last run
  • 🧭 Citation-gap list — the exact domains grounding competitor-only answers: your GEO to-do list

Quick start (API)

Score a brand against its competitors across three engines in one call:

curl -X POST "https://api.apify.com/v2/acts/foxlabs~ai-brand-monitor/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brand": "Notion",
"category": "project management software",
"competitors": ["Asana", "Trello", "ClickUp", "Monday.com"],
"brandDomain": "notion.so",
"engines": ["gemini", "openai", "anthropic"],
"maxPromptsPerEngine": 5,
"samplesPerPrompt": 3
}'

Prefer no code? Open the Input tab, enter your brand and the market it competes in (the two required fields), and click Start.

Getting accurate results (read this first)

Almost every "empty" or 0% result comes down to one setting: the category not matching the brand. Ten seconds here changes everything:

  1. Match category to your brand's market — every time. The category drives the prompts. If you change the brand but leave a category from a different market (say, tracking a dental clinic under project management software), every engine is asked the wrong question and your brand — correctly — scores 0%. Set the category to what your buyers actually ask AI about.
  2. Be specific — especially for a local or regional brand. A generic category like dental clinic makes engines list world-famous names, not a local practice. Add the location: dental clinic in Eskişehir, diş kliniği Ankara, plumber in Leeds. A real local brand can suddenly appear — we've watched a single clinic surface in Gemini for its city the moment the category was localised.
  3. Enter the market phrase, not a full "best …" sentence. The Actor already wraps your category in "What are the best …?", "Recommend the top …", etc. So type CRM software or dental clinic in Eskişehirnot best CRM software (you'd get "best best CRM software").
  4. A 0% result is a finding, not a failure. If your brand still scores 0% with the right, specific category, that is the insight: AI doesn't surface you for those queries yet — your GEO gap to close (earn reviews, citations and a presence on the domains listed in sourceGap). Engines often disagree — you may appear in Gemini but not ChatGPT/Claude, which tells you exactly where to work.

Rule of thumb: right brand + the market your buyers actually ask about (with a location if you're local, and no "best/top" wording) = a real, usable AI-visibility map.

What you get

The dataset holds one row per prompt × engine (aggregated over its samples), plus a single summary scorecard row. The scorecard is also written to the SUMMARY key-value record for webhooks and quick lookups.

Per-prompt row (type: "query"):

FieldTypeDescription
typestring"query" — a per-prompt result row
engine / engineLabelstringEngine id (openai) and friendly label (ChatGPT (OpenAI))
brandstringThe brand being tracked
promptstringThe buyer-intent prompt sent to the engine
samplesnumberHow many times this prompt was sampled
brandMentionedbooleanMajority verdict across samples — did the brand appear?
brandMentionedSamplesnumberHow many samples mentioned the brand
brandMentionRatePctnumber% of samples that mentioned the brand
mentionStabilityPctnumberHow consistent the outcome was (100% = every sample agreed)
brandRanknumber | nullBrand's position among the brands a representative answer lists
avgRanknumber | nullAverage rank across the samples that ranked it
mentionCountnumberAvg. times the brand is named per mentioning answer
positionScorenumber | nullWhere the brand first appears in the answer (1 = very top … 10)
sentimentstring | nullpositive / neutral / critical, from the brand's own context
excerptstringFirst sentence mentioning the brand — a human-readable evidence quote
competitorsMentioned / competitorsMentionedTextarray / stringCompetitor brands found in the answers
citationsCountnumberNumber of distinct source domains cited
sourcesTextstringThe cited publisher domains, comma-joined
answerstringThe representative AI answer (truncated to ~1500 chars)

If every sample of a prompt fails (e.g. a dead key), the row instead carries error with brandMentioned: null.

Summary scorecard (type: "summary", one row):

FieldTypeDescription
typestring"summary"
brand / categorystringWhat was tracked
competitorsarrayCompetitors compared
enginesarrayEngine labels actually queried
promptsPerEngine / samplesPerPromptnumberRun configuration
totalQueriesnumberTotal answer samples analyzed
visibilityIndexnumberComposite AI Visibility Index (0–100) — mention 50% + rank 30% + citation 20%
indexBandstringstrong (70+) / mid-tier / visibility gap
previousVisibilityIndex / visibilityIndexDeltanumber | nullThe index last run, and the change since (for scheduled trend tracking)
visibilityScorePctnumber% of all answer samples that mentioned the brand
avgRanknumber | nullOverall average brand rank
citationRatePctnumber | nullHow often engines cite your own domain (needs brandDomain; else null)
shareOfVoicePctnumberYour mentions as a share of all tracked-brand mentions
shareOfVoiceBreakdownobjectPer-brand share of voice ({ "Notion": 21.3, … })
overallSentimentstring | nullMajority sentiment across prompts
sentimentBreakdownPctobject{ positive, neutral, critical } percentages
perEngineobjectPer-engine { engineLabel, promptsRun, mentionRatePct, avgRank, errors }
topCitedSources / topCitedSourcesTextarray / stringDomains shaping answers in your category, { host, count }
sourceGap / sourceGapTextarray / stringDomains grounding competitor-only answers — your GEO to-do list
generatedAtIsostringISO 8601 run timestamp

Sample output

Illustrative records (values shown for shape, not a live measurement):

{
"type": "query",
"engine": "openai",
"engineLabel": "ChatGPT (OpenAI)",
"brand": "Notion",
"prompt": "What are the best project management software?",
"samples": 3,
"brandMentioned": true,
"brandMentionedSamples": 2,
"brandMentionRatePct": 66.7,
"mentionStabilityPct": 66.7,
"brandRank": 3,
"avgRank": 3.5,
"mentionCount": 1.5,
"positionScore": 4,
"sentiment": "positive",
"excerpt": "Notion is a flexible all-in-one workspace many teams use for project management.",
"competitorsMentioned": ["Asana", "Trello", "ClickUp"],
"competitorsMentionedText": "Asana, Trello, ClickUp",
"citationsCount": 4,
"sourcesText": "g2.com, notion.so, zapier.com, pcmag.com",
"answer": "For project management, several tools stand out. Asana and Trello are popular for simplicity, while ClickUp and Notion offer more flexible, all-in-one workspaces…"
}
{
"type": "summary",
"brand": "Notion",
"category": "project management software",
"competitors": ["Asana", "Trello", "ClickUp", "Monday.com"],
"engines": ["Gemini (Google)", "ChatGPT (OpenAI)", "Claude (Anthropic)"],
"promptsPerEngine": 5,
"samplesPerPrompt": 3,
"totalQueries": 45,
"visibilityIndex": 58,
"indexBand": "mid-tier",
"previousVisibilityIndex": 52,
"visibilityIndexDelta": 6,
"visibilityScorePct": 62.2,
"avgRank": 3.4,
"citationRatePct": 18.5,
"shareOfVoicePct": 21.3,
"shareOfVoiceBreakdown": { "Notion": 21.3, "Asana": 28.9, "Trello": 19.4, "ClickUp": 22.1, "Monday.com": 8.3 },
"overallSentiment": "positive",
"sentimentBreakdownPct": { "positive": 71.4, "neutral": 23.8, "critical": 4.8 },
"perEngine": {
"gemini": { "engineLabel": "Gemini (Google)", "promptsRun": 15, "mentionRatePct": 73.3, "avgRank": 2.9, "errors": 0 },
"openai": { "engineLabel": "ChatGPT (OpenAI)", "promptsRun": 15, "mentionRatePct": 60.0, "avgRank": 3.6, "errors": 0 },
"anthropic": { "engineLabel": "Claude (Anthropic)", "promptsRun": 15, "mentionRatePct": 53.3, "avgRank": 3.8, "errors": 0 }
},
"topCitedSources": [{ "host": "g2.com", "count": 22 }, { "host": "pcmag.com", "count": 14 }],
"topCitedSourcesText": "g2.com (22), pcmag.com (14)",
"sourceGap": [{ "host": "capterra.com", "count": 5 }, { "host": "techradar.com", "count": 3 }],
"sourceGapText": "capterra.com, techradar.com",
"generatedAtIso": "2026-07-05T09:12:44.001Z"
}

Input & filters

  • Brand — the name to track in AI answers (e.g. Notion). Use the exact brand name; matching is whole-token.
  • Category / market (required) — the market your brand competes in (e.g. CRM software, dental clinic in Eskişehir). It drives the auto-generated prompts, so it must match the brand — see Getting accurate results above. Enter the market phrase, not best ….
  • Brand domain (optional) — e.g. notion.so. Unlocks citation rate: how often engines cite your domain as a source.
  • Competitors — brands to benchmark share-of-voice against. Leave empty to track your brand only.
  • Enginesgemini, openai, anthropic run with no setup; perplexity needs your own key. Engines run in parallel.
  • Prompts per engine (1–25) — more prompts = broader coverage, higher cost.
  • Samples per prompt (1–5) — each prompt is asked this many times for a reliable rate + stability. 3 is recommended.
  • Advanced — supply your own exact prompts (overrides auto-generation with {brand}/{category} placeholders), a webhook URL for push alerts, and bring-your-own API keys per engine to run on your own provider account.

Example inputs (copy & paste)

// 1) Standard visibility scorecard vs. competitors
{ "brand": "Notion", "category": "project management software",
"competitors": ["Asana", "Trello", "ClickUp", "Monday.com"],
"brandDomain": "notion.so", "samplesPerPrompt": 3 }
// 2) Add Perplexity + run ChatGPT on your own account, deeper sampling
{ "brand": "Notion", "category": "project management software",
"engines": ["gemini", "openai", "anthropic", "perplexity"],
"perplexityApiKey": "pplx-...", "openaiApiKey": "sk-...",
"maxPromptsPerEngine": 10, "samplesPerPrompt": 4 }
// 3) Power user: your exact prompts (overrides auto-generation)
{ "brand": "Notion", "category": "project management software",
"prompts": ["Best {category} for a 10-person startup?", "Is {brand} good for {category}?"],
"samplesPerPrompt": 3 }
// 4) Single engine — track just ChatGPT, quick pass
{ "brand": "Linear", "category": "issue tracking software",
"engines": ["openai"], "maxPromptsPerEngine": 8, "samplesPerPrompt": 3 }
// 5) Brand-only baseline (no competitors), broad prompt coverage
{ "brand": "Stripe", "category": "online payment processing",
"brandDomain": "stripe.com", "maxPromptsPerEngine": 15, "samplesPerPrompt": 2 }
// 6) Maximum statistical reliability — deep sampling across engines
{ "brand": "Figma", "category": "UI design tools",
"competitors": ["Sketch", "Adobe XD", "Penpot"],
"engines": ["gemini", "openai", "anthropic"],
"maxPromptsPerEngine": 25, "samplesPerPrompt": 5 }
// 7) Scheduled monitor with Slack / n8n alert on every run
{ "brand": "Vercel", "category": "frontend hosting platform",
"competitors": ["Netlify", "Cloudflare Pages"],
"brandDomain": "vercel.com", "webhookUrl": "https://hooks.example.com/geo-alert",
"samplesPerPrompt": 3 }

Use cases

  • SEO / GEO agency reporting. Sell evidence-backed AI-visibility reports: the Visibility Index, share-of-voice and a concrete citation-gap list per client. Schedule it and every run ships a fresh, defensible scorecard — recurring revenue, not a one-off audit.
  • Competitive brand tracking. Watch your standing vs. named competitors across ChatGPT, Gemini and Claude over time. The trend delta tells you whether you're gaining or losing ground before it shows up in pipeline.
  • PR & reputation monitoring. The sentiment breakdown flags when engines start describing your brand as expensive, limited or clunky — a reputation signal you can act on early.
  • Content & GEO strategy. sourceGap names the exact domains grounding answers that recommend rivals but omit you (g2.com, capterra.com…). Earn a presence there and you move the needle where AI actually looks.
  • Founder / market reality check. In one run, find out today whether AI recommends you or your rivals for the queries your buyers actually type.
  • Automated alerts. Wire the webhookUrl to Slack / Make / n8n and get pinged the moment your visibility drops after an engine or model update.

Performance & throughput

Engines run concurrently — each engine's prompts stay sequential to respect per-provider rate limits, so total wall-time is bounded by the slowest engine, not the sum. A default run (3 engines × 5 prompts × 3 samples) completes in a few minutes; every extra engine, prompt or sample multiplies the number of AI calls (and cost) linearly. Each call has a 60s timeout with resilient backoff on transient errors, and a depleted/quota-exhausted key is detected and skipped fast rather than retried. There are no proxies to configure.

Integrations

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('foxlabs/ai-brand-monitor').call({
brand: 'Notion', category: 'project management software',
competitors: ['Asana', 'Trello', 'ClickUp'], samplesPerPrompt: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const summary = items.find((i) => i.type === 'summary');
console.log(summary.visibilityIndex, summary.shareOfVoicePct);

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("foxlabs/ai-brand-monitor").call(run_input={
"brand": "Notion", "category": "project management software",
"competitors": ["Asana", "Trello", "ClickUp"], "samplesPerPrompt": 3,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("type") == "summary":
print(item["visibilityIndex"], item["shareOfVoicePct"])

Make / n8n / Zapier — run this Actor from the Apify app and map the summary fields, or set a webhookUrl in the input and the Actor POSTs the full scorecard to Slack / Make / Zapier / n8n the moment a run finishes. Pair with Apify Scheduler for weekly tracking — the trend delta does the rest.

Apify MCP (use it as a tool inside any AI agent — no install). Call this Actor from Claude, Cursor, ChatGPT agents, LangChain, Make, Zapier or n8n via the Model Context Protocol:

  • Hosted (zero setup) — point your MCP client at https://mcp.apify.com?tools=foxlabs/ai-brand-monitor
  • Self-hosted (stdio clients — Claude Desktop, Cursor, Cline, Continue):
{
"mcpServers": {
"ai-brand-monitor": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--tools", "foxlabs/ai-brand-monitor"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}

Your agent can then ask "How visible is Notion in AI search?" and get the scorecard back inline.

Data quality (how the numbers are made)

  • Multi-sample, not one-shot. AI answers are non-deterministic — ask the same question three times and the brand list can change. We sample each prompt samplesPerPrompt times and report a rate + stability, so you know how much to trust each number. During testing we ran the same prompt repeatedly and watched the mention rate move between runs — that variance is real, and it's exactly why single-shot trackers mislead.
  • Deterministic detection. Brand and competitor mentions are found by exact, whole-token matching (no fuzzy guessing); rank is the order brands appear in; positionScore is where the brand first surfaces.
  • Real publisher domains. Cited sources are de-duplicated and normalized to the true publisher host — including resolving Gemini's grounding-redirect URLs back to the real domain — so topCitedSources and the citation gap are actionable, not opaque.
  • No fabrication. Every metric is computed from the engines' actual answers. Missing values are null, never a guess. citationRatePct is null unless you supply a brandDomain.
  • Transparent sentiment (v1). Sentiment is a fast, explainable keyword model over the brand's mention context — not a black-box LLM judgment.

Pricing

Pay-as-you-go — you're billed per successful AI query (one event per sample). Failed or errored samples are never charged (fair billing). Cost scales with engines × prompts × samples, so start small and scale the sampling once you see the signal. Prefer to run on your own provider account? Bring your own API key per engine in the Advanced inputs and pay that provider directly. There's an Apify free tier to evaluate the full feature set first. See the Actor's pricing panel for current rates.

FAQ

Do I need any API keys? No — Gemini, ChatGPT and Claude run out of the box. Only Perplexity requires you to paste your own key. You can also bring your own key for any engine to run on your own account.

Which engines are supported? Gemini (Google), ChatGPT (OpenAI) and Claude (Anthropic) with live web search, plus Perplexity (bring-your-own-key). An engine with no available key is skipped automatically.

Why sample each prompt multiple times? Because AI answers vary run to run. One shot is noise dressed up as data. Sampling gives you a mention rate and a stability score instead of a coin-flip.

What is the AI Visibility Index? A single 0–100 headline score combining mention rate (50%), average rank (30%) and citation rate (20%), banded as strong / mid-tier / visibility gap. When no brandDomain is set, the score is renormalized over the two components that are available.

How do you measure citation rate? Of the answers that mention your brand, how many also cite your own domain as a source. Add your brandDomain to unlock it.

Do the engines agree? Often not. In testing, Gemini and ChatGPT both recommended Notion for "project management software" while Claude didn't mention it at all. Your visibility isn't one number — it's different on every surface, which is why multi-engine tracking matters.

How fresh are the answers? Each run queries the engines live with web search enabled, so you see what buyers see right now — not a cached snapshot.

Can I use my own prompts? Yes. Fill the Advanced prompts field (with {brand} / {category} placeholders) to override the auto-generated buyer-intent prompts entirely.

Can I schedule it and get alerts? Yes — pair with Apify Scheduler for weekly tracking, and set a webhookUrl to push the scorecard to Slack / Make / Zapier / n8n on every run. The trend delta shows whether you're gaining or losing ground.

Is this affiliated with OpenAI, Google, Anthropic or Perplexity? No. It calls their official APIs; all brand and product names belong to their respective owners.

Troubleshooting

  • "No usable AI engine" error → none of your selected engines had a key available. Keep the default engines (Gemini / ChatGPT / Claude), or paste your own key in the Advanced inputs.
  • Low or zero visibility → first check the category matches the brand and is specific (add a location for a local brand — see Getting accurate results); a mismatched or too-generic category is the #1 cause. If it's right and you're still at 0%, that's the real result — AI genuinely isn't surfacing the brand yet — so check the exact spelling (matching is whole-token) and read sourceGap for the domains to earn.
  • An engine is skipped or perEngine.errors > 0 → its key is missing or out of quota. Failed samples aren't charged; supply your own key for that engine or drop it from engines.
  • Run slower than expected → more engines / prompts / samples means more AI calls. Engines run in parallel, but each engine's prompts run sequentially — trim maxPromptsPerEngine or samplesPerPrompt for a faster pass.
  • Not affiliated with OpenAI, Google, Anthropic or Perplexity. This Actor queries their official APIs; brand and product names are the property of their owners.
  • AI answers are non-deterministic. Treat the metrics as a strong directional signal, sampled for reliability — not an absolute, permanent truth. Model and web-index updates on the providers' side will shift results over time (that's what the trend delta is for).
  • Sentiment is v1 — a transparent, deterministic keyword model, not an LLM judge. It's explainable and free of extra API cost; it is not a substitute for reading the flagged excerpts.
  • Bring-your-own-key runs execute on your own provider account under that provider's terms and billing.
  • Brand matching is token-based. Very short or ambiguous brand names can over- or under-match — use the exact brand name for clean results.

Support

Questions, a metric you'd like added, or a custom build? Open the Issues tab on this Actor, or email info@foxlabs.com.tr. We reply fast.

If this Actor saves you time, a ⭐ review really helps.

Changelog

0.1.15 — 2026-07-09

  • Clearer inputs & guidance. Made brand and category required and dropped the demo-only competitor/domain prefills, so a leftover category from a different market can't silently return 0%. Added a Getting accurate results guide (match the category to your brand; localise it for local brands; use the market phrase, not "best …") and a runtime check that fails fast with a clear message if the category is missing.

0.2 — 2026-07-05

  • Reworked docs to the foXLabs gold standard: API quick-start, full output-field reference (per-prompt + summary), illustrative sample records, JS / Python / Make / MCP integrations, expanded FAQ, troubleshooting and honest limits.

0.1.10 — 2026-07-05

  • Hardened output handling so an edge-case value can never trip dataset-schema validation.

0.1.9 — 2026-06-27

  • Resilience fix: API quota/billing-exhaustion errors (HTTP 429 insufficient_quota) are now detected and failed-fast instead of retried as transient rate limits. A depleted engine key is skipped in ~1s instead of wasting ~30s of dead retries per call — keeping runs fast and well within platform time limits.

Part of the foXLabs data platform — company, contact, ownership, procurement, financial and AI-search visibility intelligence. Browse the full Actor suite and free GEO/SEO how-to guides at data.foxlabs.com.tr.