AI Brand Visibility Tracker: LLM Mentions & Share of Voice
Pricing
from $10.50 / 1,000 answer checkeds
AI Brand Visibility Tracker: LLM Mentions & Share of Voice
Track your AI search visibility (GEO/AEO): do AI models name your brand when buyers ask? Mention rate, rank, competitors and share of voice per model, with change since the last run. Asks the API models behind ChatGPT, Claude, Gemini and Perplexity (not the apps); $15 per 1,000 checks plus tokens.
Pricing
from $10.50 / 1,000 answer checkeds
Rating
0.0
(0)
Developer
Michael Costa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Share
What does AI Brand Visibility Tracker do?
AI Brand Visibility Tracker asks AI models the questions your buyers ask ("what are the best project management tools for a small team?") and checks each answer for your brand: whether it's named, where it ranks, which competitors are named instead and which links are cited. A free summary row gives the mention rate per model, share of voice against your competitors and the change since your last run. It's a way to track your AI search visibility (what marketers call GEO or AEO: generative or answer engine optimization).
It asks the models through their APIs (OpenAI, Anthropic, Google, Perplexity and others via OpenRouter). These are not the answers the ChatGPT or Gemini apps show a signed-in user (why).
Input fields · API · Use it from Claude, ChatGPT or Cursor (MCP)
Jump to: Fields · Price · How to use · Track weekly · Input · Output · AI agents (MCP) · Limits · FAQ
Try it in one click: the input comes pre-filled with Trello against Asana and Monday.com, one question and one model. That's 1 check: $0.015, plus the $0.00005 start fee, plus about $0.001 of model tokens on a paid Apify plan. Then put in your own brand, competitors and buyer questions.
What data does AI Brand Visibility Tracker return?
One row per check (one question asked once of one model), including checks that failed (with the reason, never charged), and one summary row per run (free).
| Field | Example | Notes |
|---|---|---|
brandMentioned | true | Whether the answer names your brand (any of the names you gave). |
brandRank | 2 | Its position among every brand the answer names, in the answer's order. null when not named. |
competitorsMentioned | ["Asana", "Monday.com"] | Your competitors the answer names. |
competitorRanks | {"Asana": 1, "Monday.com": 3} | Their positions, on the same scale as brandRank. |
brandsNamed | ["Asana", "Trello", "Monday.com", "ClickUp"] | Every brand the answer names, tracked or not: the competitors you didn't know about. |
citedUrls, brandCited | ["https://trello.com/guide"], true | Links the answer cites or writes out; true when one is on your domain. |
answer | "For a small team, these stand out: ..." | The full answer, up to about 1,000 tokens. |
prompt, model, sample | "What are the best ...", "openai/gpt-4.1-mini", 1 | Which question, which model, which ask. |
changed | false | Whether the mention, rank or competitors differ from the same check last run; null the first time. |
valid, errors | true, [] | Only valid checks are charged and counted in the summary. |
mentionRate (summary) | 0.67 | Share of valid checks that name your brand, overall and per model. |
shareOfVoice (summary) | [{"brand": "Trello", "shareOfVoice": 0.33, ...}] | Each tracked brand's share of all tracked-brand mentions, with mention rate and average rank. |
changes (summary) | {"mentionRate": {"now": 0.67, "before": 0.5, "change": 0.17}, ...} | Against your last run with the same brand and questions. |
The full list is under Output.
How much does it cost to track brand visibility in AI answers?
Two parts, both on your Apify account:
- This actor: $15.00 per 1,000 checks ($0.015 a check), plus $0.00005 each time a run starts. A check is one question asked once of one model, and only checks whose answer came back and was read are charged.
- The models' tokens, billed by Apify's own OpenRouter actor, which this
actor calls with your run's token. On paid Apify plans that's OpenRouter's list price; on the Free plan the
OpenRouter actor charges 10 times as much (its pricing, not ours). Each check is two calls: the answer (capped at
1,000 tokens) and a short call on
openai/gpt-4.1-minithat lists the brands it names. With the default model that's about $1 per 1,000 checks on a paid plan; bigger models cost more.
- The example below: 1 check × $0.015, plus the start fee and about $0.001 of tokens.
- A month, for example: an agency tracking 4 clients weekly, each with 10 questions × 3 models × 3 samples = 90 checks a week: 4 × 90 × 4.3 weeks ≈ 1,550 checks ≈ $23, plus roughly $2-10 of tokens depending on the models.
- Caps: Max checks per run in the input, and Maximum cost per run in the run options (it covers this actor's charges; the token charges are the OpenRouter actor's, so cap those with the number of questions, models and samples). The run stops cleanly at whichever comes first: each check is counted against the limit before it's asked, and the count is given back if it fails.
Never charged by this actor: checks whose model call failed, empty answers, answers whose brand list couldn't be read, and the summary row. (A call that reached the model still used its tokens.)
How to track your brand's visibility in AI answers
- Open AI Brand Visibility Tracker and click Try for free (or Start if you're signed in).
- Put your brand in Your brand (add other names after a
|, e.g.Trello | trello.com) and your rivals in Competitors, one per line. - Write the questions your buyers ask in Questions to ask, without your brand in them: "best CRM for a 10-person agency", not "is HubSpot good?".
- Pick the Models and Samples per question (3 gives a steadier rate than 1), then click Start.
- Open the Output tab: the summary row has the rates; the check rows have each answer. Export as JSON, CSV or Excel.
Track it weekly: changes since the last run, in Slack, email or a webhook
Every run remembers its figures for the same brand and questions, and the next run's summary row says what changed: mention rate overall and per model, share of voice per brand, and which brands the answers started or stopped naming. Adding a competitor or a model keeps the history; changing a question starts a new one.
- Fill in your brand, competitors and questions and click Start. This first run is the baseline.
- Click Save as a new task (top right of the actor page).
- In Apify Console, open Schedules, click Create new, set how often (for example weekly, Monday 07:00), then Add your task.
- On the task, open the Integrations tab and pick where the results go:
- Slack: click Configure, sign in, pick the channel and the "run succeeded" event. A useful message:
{{resource.statusMessage}}(for example "Trello named in 8 of 12 checks (67%)") and a link,<https://console.apify.com/storage/datasets/{{resource.defaultDatasetId}}|results>. - Gmail: click Connect with Google, set the subject and body, and attach the dataset.
- HTTP webhook: event
ACTOR.RUN.SUCCEEDED, your URL; fetchGET https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=json(with your API token).
- Slack: click Configure, sign in, pick the channel and the "run succeeded" event. A useful message:
Turn on Only checks that changed since the last run (onlyChanges) to leave unchanged checks out of the
dataset. The summary row still covers them, and they're still charged: the question was still asked.
Example: Trello vs Asana and Monday.com
The pre-filled input:
{"brand": "Trello","competitors": ["Asana", "Monday.com"],"prompts": ["What are the best project management tools for a small team?"],"models": ["openai/gpt-4.1-mini"],"samples": 1}
It ran in 19 seconds on Apify (2026-10-02) and used 741 input and 485 output tokens across both calls. The check row, answer shortened:
{"rowType": "check","brand": "Trello","prompt": "What are the best project management tools for a small team?","model": "openai/gpt-4.1-mini","sample": 1,"webSearch": false,"answer": "For a small team, the best project management tools are those that combine ease of use, essential features, and affordability. Here are some of the top options:\n\n1. **Trello**\n - Visual, card-based organization ... \n\n2. **Asana** ...","answerTruncated": false,"brandMentioned": true,"brandRank": 1,"brandCited": false,"competitorsMentioned": ["Asana", "Monday.com"],"competitorRanks": {"Asana": 2, "Monday.com": 4},"brandsNamed": ["Trello", "Asana", "ClickUp", "Monday.com", "Basecamp", "Notion"],"citedUrls": [],"valid": true,"errors": [],"changed": null,"inputTokens": 741,"outputTokens": 485,"checkedAt": "2026-10-02T14:19:06.335185Z"}
And the summary row (the first run, so changes is null; topBrandsNamed shortened):
{"rowType": "summary","brand": "Trello","competitors": ["Asana", "Monday.com"],"prompts": ["What are the best project management tools for a small team?"],"samples": 1,"webSearch": false,"checksFailed": 0,"checks": 1,"mentions": 1,"mentionRate": 1,"models": [{"model": "openai/gpt-4.1-mini", "checks": 1, "mentions": 1, "mentionRate": 1,"sampleMentionRates": [1], "spread": 0, "averageRank": 1}],"shareOfVoice": [{"brand": "Trello", "tracked": "brand", "mentions": 1, "mentionRate": 1, "shareOfVoice": 0.333, "averageRank": 1},{"brand": "Asana", "tracked": "competitor", "mentions": 1, "mentionRate": 1, "shareOfVoice": 0.333, "averageRank": 2},{"brand": "Monday.com", "tracked": "competitor", "mentions": 1, "mentionRate": 1, "shareOfVoice": 0.333, "averageRank": 4}],"topBrandsNamed": [{"brand": "Trello", "checks": 1, "rate": 1}, {"brand": "Asana", "checks": 1, "rate": 1}, "..."],"changes": null,"checkedAt": "2026-10-02T14:19:06.198691Z"}
Run the same input again and the summary's changes compares with this run: mention rate, per model, share of
voice, and the brands newly named or no longer named; each check row says whether it changed.
Input
| Field | What it does |
|---|---|
Your brand (brand) | The company, product or website to track. Other names after |; a domain marks links to it. |
Competitors (competitors) | Up to 20 rivals, one per line, same format. |
Questions to ask (prompts) | Up to 100 buyer questions, written without your brand. |
Models (models) | Up to 5 OpenRouter model ids. Default openai/gpt-4.1-mini. |
Samples per question (samples) | 1-5 asks of each question per model. Default 1. |
Only checks that changed (onlyChanges) | Leave unchanged checks out of the dataset. Default off. |
Max checks per run (maxChecks) | Stop after this many valid checks. |
{"brand": "Trello | trello.com","competitors": ["Asana", "Monday.com | monday", "ClickUp"],"prompts": ["What are the best project management tools for a small team?","Which kanban app is easiest for non-technical people?"],"models": ["openai/gpt-4.1-mini", "anthropic/claude-haiku-4.5", "google/gemini-2.5-flash-lite"],"samples": 3,"maxChecks": 100}
Output
Check rows (rowType: "check") have the fields in the table above, plus webSearch, answerTruncated (the answer
reached the 1,000-token cap), inputTokens and outputTokens (both calls) and checkedAt. The summary row
(rowType: "summary") has brand, competitors, prompts, samples, checks, checksFailed, mentions,
mentionRate, and:
models: per model,checks,mentions,mentionRate,sampleMentionRates(the rate in each sample round) andspread(highest minus lowest round: how much the answers wobble),averageRank.shareOfVoice: per tracked brand,mentions,mentionRate,shareOfVoice,averageRank.topBrandsNamed: the 20 brands the answers name most, tracked or not, with how many checks named each.changes: against the last run,nullon the first.
The run's RUN_STATS record counts valid, failed and unchanged checks, tokens, and the first error.
Run it on a schedule, or from your own code
- Save your input as a task (Save as a new task, top right of the actor page) and add it to a schedule (Console → Schedules → Create new).
- Collect results: download the dataset as JSON, CSV or Excel; fetch the latest run's results from the
API
(
GET https://api.apify.com/v2/actor-tasks/<task id>/runs/last/dataset/items?status=SUCCEEDED&format=csv, with your API token); let a webhook tell your system when a run succeeds; or connect it to Make, Zapier or n8n through Apify's integrations.
Can I use AI Brand Visibility Tracker from an AI agent (MCP)?
Yes, through Apify's MCP server, from Claude, ChatGPT, Cursor or any other MCP client. Add this to your client's MCP configuration; your client signs you in to Apify:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=humble-echidna/ai-visibility"}}}
To use an Apify API token instead of signing in, add
"headers": {"Authorization": "Bearer <APIFY_TOKEN>"} next to url.
The agent passes {"brand": "Trello", "competitors": ["Asana"], "prompts": ["best kanban app for a small team?"]}
and reads the summary row (rowType: "summary") for the rates.
Who it's for
SEO and marketing agencies, and in-house marketers, who check every week or month whether AI models recommend their client's brand for the questions buyers ask, which competitors they name instead, and whether that's moving.
Why this one?
- Ranks against every brand named, not just yours.
brandRankcounts the brands you didn't list, andbrandsNamed/topBrandsNamedshow who they are. - Sampling with its spread. Ask each question up to 5 times per model; the summary shows the rate in each round and how far they differ, so one lucky answer doesn't read as a trend.
- History built in. Each run compares itself with the last run of the same brand and questions, in your own account. No spreadsheet to keep.
- Honest matching. Names match as whole words, only the names you give ("Monday.com" doesn't match the weekday), and the brand list comes from a separate, validated structured-output call.
- You pay for what worked. Failed calls, empty answers and unreadable ones are rows with the reason, not charges.
Limits
- API answers, not the consumer apps. No ChatGPT, Gemini or Perplexity app pages, no Google AI Overviews and no scraping of any app. The apps add their own search, location, memory and personalisation, so their answers can differ from these.
- No web search option in this version: answers come from what each model learned in training. Apify's
OpenRouter actor didn't pass OpenRouter's web search through when tested (2026-10-02).
perplexity/sonarsearches the web itself, so its answers reflect current pages and cite them incitedUrls(21 links on the example question). - Answers are capped at about 1,000 tokens. A model that "thinks" first (reasoning models) can spend that on thinking and return an empty answer, which isn't charged; pick a non-reasoning model.
- Brands, not people. Don't use it to track private individuals.
- Up to 100 questions, 5 models, 5 samples and 20 competitors per run.
FAQ
Are these the answers ChatGPT, Gemini or Perplexity users see?
No. They're the answers the same companies' models give through their APIs, to the question exactly as you wrote it, with no system prompt, no user history and no location. The apps add their own instructions, web search, memory and personalisation. API answers are a consistent, repeatable measure of what a model says about your category; they aren't a screenshot of any one user's chat.
Why ask the same question several times?
Models don't answer the same way twice. One ask can name your brand and the next can't. With 3 samples, the
mentionRate is the share of all asks, and sampleMentionRates / spread show how much it varies between rounds.
How is the rank worked out?
A second, small call on openai/gpt-4.1-mini lists every brand the answer names, in the answer's order (its
numbered list, else the order they first appear). Your brand's rank is its position in that list. That list is
checked against a JSON Schema; if it doesn't validate, the check isn't charged. Whether your brand is named at all is
also matched directly in the answer text, so the two never contradict each other.
Who pays for the model?
You do, on your own Apify account, through Apify's OpenRouter actor: this actor calls it with your run's token. No API key is needed, and we never see one.
Is it legal to track brand mentions in AI answers?
This actor scrapes nothing: it sends your questions to AI models through Apify's official OpenRouter actor, the providers' APIs, and reads the answers. Track companies, products and websites; don't use it for people. You're responsible for the questions you send and for following each model provider's usage policies.
Can I get only what changed since my last run?
Yes: the summary row's changes compares every run with the last one for the same brand and questions, and
Only checks that changed leaves unchanged check rows out (how to schedule it).
Related actors
| Actor | Use it when |
|---|---|
| SEO Audit Crawler | You also want the classic on-page SEO checks for the same client sites. |
| AI Data Extractor | You want structured data from the pages the answers cite. |
Feedback and support
Found a bug, or need a field or model option that isn't here? Open an issue on the Issues tab with the input you used.
Versions
Current version: 0.1. See the Changelog tab for what changed in each version.