AI Brand Visibility Monitor: ChatGPT, Claude & Gemini Mentions
Under maintenancePricing
from $100.00 / 1,000 claude checks
AI Brand Visibility Monitor: ChatGPT, Claude & Gemini Mentions
Under maintenanceAI search visibility tracker for GEO and AEO: asks ChatGPT, Claude and Gemini your customers' questions through the official APIs with web search and records brand mentions, rank, tone, competitors and cited sources, with the change since the last run. $0.08 to $0.10 per answer.
Pricing
from $100.00 / 1,000 claude checks
Rating
0.0
(0)
Developer
Local Wire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Features
Share
AI Brand Visibility Monitor is an AI search visibility tracker: it asks ChatGPT's models, Claude and Gemini your customers' questions through the official OpenAI, Anthropic and Gemini APIs with web search on, and records whether your brand is mentioned, ranked and cited. $0.08 to $0.10 per answer, no start fee, no subscription.
Use it for generative engine optimisation (GEO) and answer engine optimisation (AEO) work: measure where you stand in AI answers today, see which competitors and which web pages the assistants rely on, and track the change week by week.
For every answer the Actor records:
- whether your brand is mentioned, how many times, and where it comes in the order of brands named (rank 1 = named first);
- how the passage about you reads (positive, neutral, negative or mixed);
- which competitors are named and ranked, and whether their sites are cited;
- which pages and domains are cited, whether your own site is among them, and what the engine searched for;
- the change since the previous run (new, gained, lost, changed, unchanged) when you run it on a schedule.
What it covers, plainly: ChatGPT's models (OpenAI API), Claude (Anthropic API) and Gemini (Gemini API), each with its web search tool switched on. It does not cover Perplexity, Google AI Overviews, AI Mode, Copilot or any other assistant. Answers come from the providers' APIs, not from the consumer apps, so they can differ from what you see when you type the same question into chatgpt.com, claude.ai or the Gemini app (see Limitations).
What you get
One dataset record per check. A check is one prompt asked of one engine: 10 prompts on three engines is 30 checks and 30 records.
{"id": "openai-5d0c1f6f1a2b9e47","type": "check","engine": "openai","engineLabel": "ChatGPT (OpenAI API)","model": "gpt-6.1-terra","prompt": "Best HR software for small UK companies?","country": "GB","brand": "Humaans","status": "ok","error": null,"brandMentioned": true,"mentionCount": 2,"mentionRank": 2,"firstMentionAt": 0.19,"sentiment": "positive","sentimentScore": 0.6,"snippets": ["Humaans is a modern, fast platform built for small and mid-sized companies, and users praise its clean interface. It lacks built-in payroll, so you connect a payroll provider."],"brandCited": true,"brandCitations": ["https://humaans.io/"],"competitors": [{ "name": "BambooHR", "mentioned": true, "mentionCount": 3, "mentionRank": 1, "firstMentionAt": 0.07, "cited": true, "citedUrls": ["https://www.bamboohr.com/pricing/"] },{ "name": "Personio", "mentioned": true, "mentionCount": 1, "mentionRank": 3, "firstMentionAt": 0.41, "cited": false, "citedUrls": [] }],"competitorsMentioned": ["BambooHR", "Personio"],"citations": [{ "url": "https://www.techradar.com/best/best-hr-software", "domain": "techradar.com", "title": "Best HR software of 2026" },{ "url": "https://humaans.io/", "domain": "humaans.io", "title": "Humaans: HRIS for modern companies" }],"citedDomains": ["techradar.com", "humaans.io"],"sources": [{ "url": "https://www.techradar.com/best/best-hr-software", "domain": "techradar.com", "title": null },{ "url": "https://humaans.io/", "domain": "humaans.io", "title": null },{ "url": "https://www.g2.com/categories/core-hr", "domain": "g2.com", "title": null }],"sourceDomains": ["techradar.com", "humaans.io", "g2.com"],"searchQueries": ["best HR software for small UK companies 2026"],"searchCount": 1,"answer": "For a small UK company the usual shortlist is BambooHR, Humaans and Personio. ...","answerLength": 2140,"previous": { "checkedAt": "2026-11-02T08:00:09.000Z", "brandMentioned": false, "mentionRank": null, "sentiment": null, "brandCited": false },"change": "gained","checkedAt": "2026-11-09T08:00:12.000Z"}
Output fields
| Field | Meaning |
|---|---|
engine, engineLabel, model | Which assistant answered and the model id the API reported. |
prompt, country, brand | What was asked. |
status | ok, truncated (answer cut at the token limit), refused (the model declined), no_answer, or error (the provider failed; error holds the message and the record is free). |
brandMentioned, mentionCount, mentionRank, firstMentionAt | Mention facts. mentionRank counts only the brands you track (yours plus competitors); firstMentionAt is the position of the first mention as a fraction of the answer (0 = the first words). |
sentiment, sentimentScore | Tone of the passages about your brand: positive, neutral, negative or mixed, with a score from -1 to 1. A word-list heuristic with negation handling, not a judgement; read the snippets. |
snippets | Up to three passages mentioning the brand. |
brandCited, brandCitations | Whether a page on one of your domains (or a subdomain) is cited, and which. |
competitors[], competitorsMentioned | Per competitor: mentioned, count, rank, position, cited, cited URLs. |
citations[], citedDomains | Pages cited in the answer (url, domain, title). |
sources[], sourceDomains | Every page the engine read while answering (a superset of the citations where the API exposes it). |
searchQueries, searchCount | What the engine searched for and how many searches it ran. |
answer, answerLength | The full answer text (email addresses and phone numbers removed). answer is null when includeAnswer is off. |
previous, change | The last result for the same engine, model, prompt and brand, and the change: new, gained, lost, changed (rank, tone or citation moved) or unchanged. |
checkedAt | When the answer was produced (UTC). |
The dataset has two table views, Checks and Citations. The run's key-value store also holds an OUTPUT summary: checks planned and completed, errors, answers that mention the brand in total and per engine, the stop reason and the account's daily allowance.
Quick start
The form opens with a one-check example: one prompt, one engine (ChatGPT). Press Start and you get one record for $0.09. The same input as JSON:
{"brand": "Apify","brandDomains": ["apify.com"],"competitors": ["Bright Data | brightdata.com", "Zyte | zyte.com"],"prompts": ["What are the best web scraping platforms for developers?"],"engines": ["openai"],"maxChecks": 10}
Then make it yours:
- Put your brand in
brand, your sites inbrandDomains, and any other spellings inbrandAliases. - Replace the prompt with the questions your customers ask, one per line. Write them as a person would: "best payroll software for a 20-person company", not "payroll software".
- Add
anthropicandgeminitoengineswhen you want all three assistants. - Raise
maxChecksto at least prompts × engines. - Schedule the run (weekly is a sensible start) and read the
changefield.
Note that engines asks all three when the field is left out of an API call, so list the engines you want.
Input reference
| Field | Type | Default | Meaning |
|---|---|---|---|
brand (required) | string | The brand, product or company name to look for. Matching is case-insensitive on whole words. | |
brandAliases | string[] | Other spellings that also count as a mention ("Humaans HR", "humaans.io"). | |
brandDomains | string[] | Your own domains. A cited page on one of them, or on a subdomain, sets brandCited. | |
competitors | string[] | Other brands to track in the same answers, one per line. "Name | domain.com" also tracks their citations; "Name; alias; domain.com" adds aliases. | |
prompts (required) | string[] | The questions, up to 200 per run and 600 characters each. Duplicates are asked once. | |
country | string | none | Two-letter country code (GB, US, DE) to localise web search. Applies to ChatGPT and Claude; Gemini has no location setting. |
engines | string[] | all three | Any of openai, anthropic, gemini. |
openaiModel | string | gpt-6.1-terra | gpt-6.1-terra or gpt-6-luna (standard price), gpt-6.1-sol (premium price). |
anthropicModel | string | claude-sonnet-5-5 | claude-sonnet-5-5 or claude-haiku-5-5 (standard), claude-opus-5-5 (premium). |
geminiModel | string | gemini-3.8-flash | gemini-3.8-flash, gemini-3.6-flash or gemini-3.5-flash-lite (standard), gemini-3.1-pro-preview (premium). |
maxSearches | integer | 5 | Web searches Claude may run for one answer (1 to 10). ChatGPT and Gemini decide for themselves. |
maxChecks | integer | 60 | Stop after this many checks (1 to 500). Checks beyond it are not run and not charged. |
includeAnswer | boolean | true | Return the full answer text in each record. |
compareWithPrevious | boolean | true | Remember each check's last result and fill previous and change. |
Use cases
- GEO and AEO baselines. Before you change anything, record which of your category's questions mention you on each assistant, at what rank and with what tone.
- AI share of voice. Ask 20 to 50 category questions and count the answers that name you against the answers that name each competitor. The
OUTPUTsummary gives mentions per engine;competitors[]gives the same facts for each rival. - Citation and source analysis.
citedDomainsandsourceDomainsshow which review sites, directories, forums and publishers the assistants read for your category. Those are the pages worth being on. - Competitor monitoring. Track when a competitor starts to be named first, or when their own site begins to be cited.
- Launch and campaign tracking. Schedule a weekly run and filter on
change=gainedorlostto see what moved after a launch, a PR push or a content update. - Agency reporting. Run one task per client and export the Checks view to CSV, Excel or Google Sheets.
- Brand safety. Read the
snippetsandsentimentfor prompts such as "is X any good?" or "X problems" to see how the assistants describe you.
Pricing
Pay per check, by engine and model tier. There is no start fee and no monthly fee.
| Engine | Standard models | Price per check | Premium model | Price per check |
|---|---|---|---|---|
| ChatGPT (OpenAI API) | GPT-6.1 Terra (default), GPT-6 Luna | $0.09 | GPT-6.1 Sol | $0.15 |
| Claude (Anthropic API) | Claude Sonnet 5.5 (default), Claude Haiku 5.5 | $0.10 | Claude Opus 5.5 | $0.18 |
| Gemini (Gemini API) | Gemini 3.8 Flash (default), 3.6 Flash, 3.5 Flash-Lite | $0.08 | Gemini 3.1 Pro Preview | $0.15 |
The price includes the provider's API usage and its web search fees: you do not need your own OpenAI, Anthropic or Google keys.
Worked examples with the default models:
| Run | Checks | Cost |
|---|---|---|
| The quick-start example: 1 prompt on ChatGPT | 1 | $0.09 |
| 1 prompt on all three engines | 3 | $0.09 + $0.10 + $0.08 = $0.27 |
| 10 prompts on all three engines | 30 | 10 × $0.27 = $2.70 |
| 20 prompts on all three engines, every week | 60 a week | $5.40 a run, about $23.40 a month |
| 10 prompts on Gemini only, every day | 10 a day | $0.80 a day, about $24 a month |
What is and is not charged:
- A check is charged when the provider returns an answer, including the rare answer that is
truncated,refusedor empty (no_answer), because the provider bills for it. - A check that fails at the provider (rate limit, outage, authentication) is written as a
status: "error"record and is free. - Checks that
maxChecks, the daily allowance or the run's maximum cost prevent are never sent, so they cost nothing.
To cap a run, set maxChecks, or set the run's maximum cost in the Console (the maxTotalChargeUsd API parameter): the Actor checks before each provider call that another check still fits and stops when it does not.
Daily allowance. Because every check costs real API usage on our side, each Apify account has a daily allowance: 15 checks a day on free plans, 1,000 a day on paid plans. When it is used up, the run stops with a clear status message and the remaining checks can run the next day (UTC).
Use it from the API
Run the Actor and get the records back in one HTTP call:
curl -X POST "https://api.apify.com/v2/acts/localwire~ai-brand-visibility/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>&maxTotalChargeUsd=1" \-H "content-type: application/json" \-d '{"brand": "Humaans","brandDomains": ["humaans.io"],"competitors": ["BambooHR | bamboohr.com", "Personio | personio.com"],"prompts": ["Best HR software for small UK companies?"],"engines": ["openai", "gemini"],"country": "GB"}'
Each answer involves live web searches and can take tens of seconds, so for more than a handful of checks start the run asynchronously (POST /v2/acts/localwire~ai-brand-visibility/runs) and read the dataset when it finishes.
With the official clients:
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("localwire/ai-brand-visibility").call({brand: "Humaans",prompts: ["Best HR software for small UK companies?"],engines: ["openai"],});const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("localwire/ai-brand-visibility").call(run_input={"brand": "Humaans","prompts": ["Best HR software for small UK companies?"],"engines": ["openai"],})items = client.dataset(run["defaultDatasetId"]).list_items().items
Use it from an AI agent (MCP)
Apify hosts an MCP server at https://mcp.apify.com. Add it to any MCP client (Claude, ChatGPT, Cursor, VS Code and others) and sign in with your Apify account, or send your API token as an Authorization: Bearer header. To expose just this Actor as a tool, use:
https://mcp.apify.com?tools=localwire/ai-brand-visibility
The agent can then run a check itself. A prompt such as "Use localwire/ai-brand-visibility to ask ChatGPT whether Humaans is recommended for small UK companies, and list the domains it cited" is enough.
Two things an agent should know, because it sees the input schema's defaults and not the Console's example values:
enginesdefaults to all three engines. Pass"engines": ["openai"](or another single engine) for a one-check call.maxChecksdefaults to 60. Pass a small number when experimenting.
Integrations
Runs can be scheduled in the Apify Console, called from the API, or connected to other tools through Apify's integrations: Make, n8n, Zapier, LangChain, webhooks and others. Datasets export as JSON, CSV, Excel, XML or RSS, or straight to Google Sheets through an integration. A common setup is a weekly schedule plus a webhook or Make/Zapier scenario that posts the records whose change is gained or lost to Slack or e-mail.
How it works
- ChatGPT: OpenAI Responses API with the
web_searchtool (sources included), low reasoning effort. Citations come from the answer'surl_citationannotations, sources from the search calls. - Claude: Anthropic Messages API with the
web_searchserver tool (up tomaxSearchessearches), low effort. Citations come from the text blocks'web_search_result_locationentries, sources from the search result blocks. - Gemini: Gemini API
generateContentwith Grounding with Google Search. Cited pages come fromgroundingSupports, read pages fromgroundingChunks; Google's redirect links are resolved to the real page URLs. Gemini decides for itself whether to search and often answers from memory, so every request carries a short system instruction to ground the answer in current web sources and cite them.
Each prompt is sent on its own, with no conversation history, no memory and no persona. Mentions are whole-word, case-insensitive matches of the brand name and aliases. Ranks compare the first mention of each tracked brand. The tone score counts positive and negative cue words in the sentences that name the brand (and the pronoun sentences that follow), flipping a cue after "not", "no", "never" and the like.
No chat interface is scraped, and no accounts, browsers or proxies are involved.
FAQ
How do I check if ChatGPT mentions my brand?
Put your brand in brand, the question in prompts, set engines to ["openai"] and run. brandMentioned answers the question; mentionRank, snippets and citations show where and how. One check costs $0.09.
What is GEO (generative engine optimisation) and how does this help?
GEO, also called AEO (answer engine optimisation) or LLM SEO, is the work of getting your brand named and your pages cited in AI-generated answers. You cannot improve what you do not measure: this Actor gives you the measurement (mentions, rank, tone, citations, competitors) on a fixed prompt set so you can compare before and after.
How do I measure AI share of voice?
Ask a set of category questions (20 or more gives steadier numbers) and divide the answers that mention you by all answers. The OUTPUT summary has mentioned and ok in total and per engine. Do the same with each entry of competitors[] to get each rival's share. The Actor reports the counts; it does not output a single share-of-voice score.
Does it track Perplexity or Google AI Overviews?
No. It covers ChatGPT's models, Claude and Gemini through their official APIs. Perplexity, Google AI Overviews, AI Mode and Copilot are not covered.
Are the answers the same as in the ChatGPT, Claude and Gemini apps?
Not exactly. The consumer apps add their own system prompts, memory, personalisation, location and sometimes different models and search behaviour. API answers with web search are a close, reproducible view of what the same models say, not a screenshot of the app. Treat the results as a consistent benchmark over time.
Why do results change between runs?
AI answers are not deterministic and the web search results behind them change. One answer is an anecdote. Ask several prompts, run on a schedule, and read trends.
Do I need my own OpenAI, Anthropic or Google API keys?
No. The provider calls are made on the Actor's keys and their cost is included in the price per check.
Can I track competitors?
Yes. List them in competitors, optionally with a domain ("Zyte | zyte.com"). Each gets its own mention count, rank and cited flag in every record.
How do I export the results to CSV or Google Sheets?
Open the run's dataset and choose CSV or Excel, or call https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&view=overview. For Google Sheets use Apify's Google Sheets integration or a Make/Zapier scenario.
How often should I run it?
Weekly suits most brands. Daily is useful around a launch. Each scheduled run compares with the previous one for the same engine, model, prompt and brand.
Is there a free trial?
There is no separate trial, but a first test is cheap: the one-check quick start costs $0.09, and accounts on Apify's free plan can run up to 15 checks a day, paid from the plan's platform credit.
Limitations
- API, not the apps. See the FAQ above: API answers can differ from the consumer apps.
- Three engines only. No Perplexity, Google AI Overviews, AI Mode, Copilot, Grok or Meta AI.
- Answers vary. The same prompt can be answered differently minutes apart.
- Tone is a heuristic. Use
sentimentto sort, then read the snippets. - Mentions are name matches. A brand whose name is a common word ("Notion", "Monday") can match unrelated uses; add specific aliases and check the snippets.
countryapplies to ChatGPT and Claude only. Gemini's grounded search has no location setting.- English cue words. Mention detection works in any language; the tone label is built on English words and is unreliable for answers in other languages.
- Model list. Model ids are the providers' current ones. If a provider retires a model, pick another in the input; the record reports the model the API actually used.
- Daily allowance of 15 (free plans) or 1,000 (paid plans) checks per account, and at most 500 checks per run.
- Failures. A temporary provider error is retried once; after three failures in a row, or an authentication failure, that engine is skipped for the rest of the run and the status message says so.
- Privacy. Answers are about brands and products. Email addresses and phone numbers that appear in answer text are removed before it is stored. No user or account data is collected.