AI Brand Visibility & Citation Audit — Repeat-Tested AEO/GEO
Pricing
from $24.00 / 1,000 ai answer analyzeds
AI Brand Visibility & Citation Audit — Repeat-Tested AEO/GEO
ChatGPT, Perplexity, Gemini & Google AI Overview: does your brand get named? Every question is asked 3-5 times, so you see which findings are stable and which are noise.
Pricing
from $24.00 / 1,000 ai answer analyzeds
Rating
0.0
(0)
Developer
Anton Y.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare
AI Brand Visibility Audit — Repeat-Tested
Ask an AI engine the same question twice and you can get two different answers. Every other visibility checker runs each question once and reports the result as if it were a measurement. This one runs each question 3–5 times and shows you the spread.
Does ChatGPT recommend your brand? Perplexity? Gemini? Google's AI Overview? This Actor asks the questions your buyers actually type — never naming you, so the engines aren't just reading your name back — then reports how often you are named, in what position, who gets named instead, which sources the engines cite, and which of those findings are stable enough to act on.
Why repeats matter more than the score
Answer engines are non-deterministic. In published testing, mention rates for the same brand and the same question swing by tens of percentage points between runs, and the set of sources cited on two runs of the same day can overlap by less than 10%.
That means a single-run report is one draw from a random variable, presented as a fact. If you take a 40% visibility score from a one-shot tool and brief your team on it, you may be acting on noise.
This Actor gives you the number and the honesty check next to it:
mention_rate_pct— how often you were named across all answersunstable_pairs_pct— the share of question × engine pairs where repeated runs disagreed with each otherunstable_pairs— exactly which ones, with the hit count (2 of 3 runs)
A 60% mention rate with 10% unstable pairs is a finding. The same 60% with 70% unstable pairs is a coin flip, and you should know which one you bought.
What you get
Two record types in the dataset.
Per answer — one row for every question × engine × repeat:
| Field | Meaning |
|---|---|
engine, run | which engine, which repeat |
question | the buyer question asked |
brand_mentioned | were you named in this answer |
brand_rank_in_answer | your position in the order options appear |
named_instead | competitors named in this answer, de-duplicated |
cited_sources | URLs the engine cited |
sources_readable | whether this engine's citations resolved to real URLs at all |
answer_text | the full raw answer, so you can check our work |
Summary — one row per run:
| Field | Meaning |
|---|---|
mention_rate_pct | overall share of answers naming you |
top5_rate_pct | share where you appeared in the first five options |
mention_rate_by_engine_pct | per-engine breakdown |
unstable_pairs_pct / unstable_pairs | the repeat-test result |
own_site_cited_in_answers | how often engines cited your domain |
answers_with_readable_sources | how many answers the domain figures were computed over |
engines_without_readable_sources | engines whose citations could not be resolved (see Notes) |
top_competitors_named | who is being recommended instead of you |
top_cited_domains | where the engines are getting their opinion |
own_site_cited_in_answers = 0 is the single most actionable line in the
report: it means the engines' opinion of your category is assembled entirely
from third-party pages, and no amount of editing your own site changes it until
you appear on those pages.
Input
Give it a brand name. Everything else has a sensible default.
{"brandName": "Plausible Analytics","website": "plausible.io","description": "Privacy-friendly website analytics, a lightweight alternative to Google Analytics.","engines": ["chatgpt", "perplexity"],"questionCount": 5,"repeats": 3}
Leave prompts empty and buyer questions are generated from your description —
under a hard rule that no generated question may name your brand, because a
question that names you measures nothing. Supply prompts (one per line) to
use your own.
category is worth setting if you know it ("website analytics tools"). Left
empty it is inferred. It controls which names count as competitors: without a
category, extraction tends to pull in frameworks, hosting providers and
databases mentioned in passing, which shifts your reported position.
What you pay
Two separate charges, and it's fair that you see both before you run:
- This Actor: $0.03 per answer received and parsed. One question, on one engine, once. So the default 5 questions × 2 engines × 3 repeats = 30 events = $0.90. Failed engine runs and answers we cannot parse are not charged.
- The engine scrapers this Actor calls, billed to your own account by Apify's own first-party scrapers. This is where the plan you are on matters a lot:
| Your Apify plan | Scraper cost per answer | 30-answer audit (5 q × 2 engines × 3 repeats) |
|---|---|---|
| Paid (Starter and up) | ~$0.005–0.014 | ~$0.30 in scraper fees |
| FREE | $0.20 | $6.00 in scraper fees |
The free tier costs 40× more per answer, because that is how Apify's scrapers price free-plan usage — it is not our fee. On a free account, run 2 questions × 1 engine × 3 repeats (6 answers) to see the output shape, and move to a paid plan before tracking a brand for real. The economics of this Actor only work on a paid plan, and we would rather say so up front than have you discover it in your usage bill.
Set Max total charge on the run to cap the first component. The Actor stops
cleanly when the limit is reached and reports stopped_on_spend_limit: true
rather than silently truncating.
Choosing repeats
| Repeats | Use it for |
|---|---|
| 1 | A quick look at output shape. Not a measurement — no stability data is produced |
| 3 | Default. The usual acceptance-test minimum, and enough to separate stable findings from noise |
| 5 | Before a board deck or a budget decision, when you need the spread to be tight |
Notes and limits
- Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by OpenAI, Perplexity, Google or Microsoft. Engine names are used only to identify which service each answer came from.
- Answers reflect the engines at the moment of the run, from the geography and session conditions of the underlying scrapers. Re-running next week will give different numbers — that is the nature of the thing being measured, and the reason the stability columns exist.
- Competitor and position extraction is done by a language model over the
answer text.
answer_textis included in every row so you can verify any number yourself. - Cited-source metrics are engine-dependent, and we tell you when. Google's
AI Overview returns its citations as opaque Google redirect links with no
resolvable destination, so for that engine we cannot report which domains
were cited. Rather than counting those answers as "no sources", they are
excluded from the source metrics, and
answers_with_readable_sourcesplusengines_without_readable_sourcestell you exactly what the domain figures were computed over. Per-answer,sources_readablesays the same thing. - Brand-name matching accepts product suffixes (
NotionmatchesNotion AI) but rejects matches resting on a single short word, to avoid crediting you with someone else's mention.
Track it over time
Schedule the Actor weekly with the same input, and the dataset becomes a
time series of both your visibility and its stability. Use the same prompts
each time — regenerated questions measure a different thing.