How competitor tracking works
Auto-discovery of brands AI cites alongside yours, share of voice, and the queries where a competitor wins.
Every scan returns a list of brands the AI cited in its answer — both the engine-native references (Perplexity citations, Google AI Mode references) and brand names mentioned in the prose. We persist that data into a dedicated competitors table and build three views on top of it: Share of voice, Where you lose, and a tracked competitor list you can pin or hide.
This article explains where the numbers come from, how filtering works, and what the dashboard is and isn't telling you.
Auto-discovery: the data path
After every scan completes, a post-processing step reads each scan_result's citation arrays and folds them into the competitors table. Three filters run before a hostname is recorded:
- Self-citation drop. Your own domain is removed — you're never listed as your own competitor.
- Generic blocklist. Around 80 publishing, aggregator, and infrastructure domains are excluded by default — Wikipedia, Reddit, GitHub, Medium, LinkedIn, Forbes, G2, Capterra, news outlets, dev consultancies that publish "best tools" listicles, and so on. Full list in the methodology page.
- Subdomain prefix filter. Hostnames starting with
blog.,docs.,news.,learn.,partners.,community.,developer.(and similar publishing or doc subdomains) are dropped — a docs site isn't a competitor product. - TLD whitelist. Pseudo-domains the regex extractor sometimes picks
up (e.g.
next.js,node.js— framework names that look like hostnames but aren't) are dropped.
Surviving hostnames are upserted into the competitors table. Existing
rows have their total_mentions and last_seen_at bumped; new ones
land as auto-discovered.
Share of voice donut
The donut on the Competitors page is a simple ratio:
your share = your mention count
competitor share = each tracked competitor's mention count
"Other tracked" = sum of remaining tracked competitors below top 5
The window defaults to the last 30 days. Engines without data in the window are absent from the math (they don't drag the percentages).
If the donut shows you at 60% and a competitor at 15%, that means: of all the times AI cited somebody (you or a tracked competitor) for your monitored questions in the last 30 days, you were the citation 60% of the time. It's relative, not absolute — three competitors with thousands of mentions and one with twelve gives a different denominator.
"Where you lose"
The list answers a sharper question: on which exact queries did a tracked competitor get cited and you didn't, in the same scan run? We surface up to 10 such queries, sorted by frequency:
- Each row shows the query text, how many losing scans it has, and the competitors who got cited (with their per-row mention counts).
- The
+Nchip indicates how many more competitors beat you on that query beyond the top four shown inline. - Sorted by
losingScanCountdesc, then bylastSeenAtrecency.
If the list is empty, congratulations — within the current 30-day window, every time a tracked competitor was cited, you were too.
Manual curation
You can override auto-discovery any time:
- Pin any auto-discovered competitor to promote it into the tracked list (a tracked one will be demoted automatically if you're at tier limit).
- Hide a tracked competitor that isn't a real rival (publication, loosely related agency).
- Add manually a hostname you expect to compete with even before AI cites them — useful for new entrants.
Manual rows are pinned — they always count as tracked and survive future auto-discovery rebalancing.
What the system doesn't try to do
Trouble-shooting
"Why does Competitors show Jellyfish but Citation search doesn't find
it?" This was a real edge case in the running example (deployment
platform domain) — Jellyfish appeared in citation arrays but the prose
never said the word. Citation search v1 indexed only the prose; v2
(shipped 2026-04-30) extends the index to cover cited_domains and
competitor_mentions so brand-only citations are searchable too.
"Why did a real competitor drop off my tracked list?" Either you manually hid it, or the auto-rebalance step demoted it because a more frequently cited brand took its slot. Promote it back via the pin icon on the auto-discovered card.
"Group107.com is showing up — that's not a real brand." Rare regex parser misfires on text like "Group 107.com" can land bogus hostnames in the auto-discovered list. Click the trash icon to remove it; the blocklist is updated regularly to catch new patterns.