Methodology — how the numbers are built
The full picture of weights, freshness, noise filtering, and the trade-offs we accepted along the way.
This page is the long-form reference for the choices behind every number on the dashboard. The shorter, feature-specific articles link back here when you want to see the reasoning underneath the headline.
Engine weights
GEO Score is a weighted average across the three engines we track:
0.45
ChatGPT
60% AI-search share, dominant chat audience
0.30
Google AI Mode
1.5B users / month — biggest reach
0.25
Perplexity
Citation-rich, technical-buyer trust
Sources for the calibration (Q2 2026):
- averi.ai — B2B SaaS Citation Benchmarks 2026
- stackmatix — AI Search Market Share 2026
- exposureninja — AI Search CMO Cheatsheet
- authoritytech — 11% platform overlap audit
We re-evaluate weights quarterly. The current calibration replaced a 2025 default that overweighted ChatGPT (0.55) before Google AI Mode's public roll-out matured.
The visibility baseline (0.4)
The GEO Score formula multiplies mention rate by:
BASELINE + (1 − BASELINE) × avgQuality
with BASELINE = 0.4. Why 0.4 and not 0 or 1?
- 0 would mean a "pure quality" score — being mentioned at quality 0.40 would count for ~16% of being mentioned at 0.90, which feels punitive given that "you're in the answer at all" is the hard part.
- 1 would mean visibility alone is the whole signal — quality framing wouldn't move the score, which we know matters for buyer signal (a top-list mention is genuinely more valuable than being option 7 of 12).
- 0.4 lands the score where being mentioned with no qualitative lift is worth 40% of the credit available, and a strong recommendation takes you the rest of the way. Three engines × 0.4 baseline still leaves 60% of the score driven by quality — quality matters, but isn't a binary gate.
Mention quality buckets
We classify each mention into one of four buckets and assign a quality score (0–1):
| Bucket | Quality | Rule of thumb |
|---|---|---|
not_mentioned | 0.00 | Brand absent. |
mentioned | 0.40 | Named in passing or as part of a list. |
recommended | 0.70 | Singled out positively. |
top_recommended | 0.90 | Top-of-list, dedicated section. |
A small classifier handles ambiguous cases. Most mentions resolve
deterministically from sentence patterns (X is the best, X | Static sites & Jamstack, listicle position).
Noise filtering
Auto-discovery for Competitor tracking applies four filters before persisting a hostname:
- Self-citation drop — your own domain.
- Generic blocklist — about 80 publishing, aggregator, and infrastructure hosts (Wikipedia, Reddit, GitHub, Medium, news outlets, generic agency listicle sites).
- Subdomain prefix filter —
blog.,docs.,news.,learn.,partners.,community.,developer.,tutorials.,articles.,guide(s).,support.,help.,resources.,forum(s).,press.. - TLD whitelist — pseudo-domains the regex parser sometimes picks
up (
next.js,node.js) are dropped.
The full blocklist is reviewed every release. If a real competitor is caught by accident, you can add it back manually via the Add competitor dialog.
Data freshness
| Metric | Refresh cadence |
|---|---|
| GEO Score (Overview hero) | Daily on Pro/Business — pulse cron at 04:00 UTC. |
| Mention Rate | Same as GEO Score. |
| Discovery Readiness (Page health) | Weekly — Monday 04:00 UTC, plus on-demand re-run. |
| Content audit per-page rows | Same as Page health. |
| Competitor share of voice | 30-day rolling window, recomputed at every dashboard load (no nightly job). |
| "Where you lose" | 30-day rolling window, recomputed on load. |
| Citation excerpt search | Real-time over 90-day window — no cache. |
| Trend charts | Snapshot per scan; weekly deep scan adds a stable point. |
A daily pulse scan touches a sub-set of monitored questions to detect fast movers between weekly runs. Manual scans always count toward the score and refresh dashboard numbers immediately.
Honest limitations
Where the numbers live
Everything described here is computed from rows in your Supabase project, scoped to your user via row-level security. We never share data across tenants. No third party sees your raw answer text.
If you want to read the actual sentences behind any signal, the Citation excerpt search is the entry point.
The visibility stack, top to bottom
The dashboard layers are deliberately ordered from "can AI find you at all" up to "how is AI talking about you":
- Discovery (gate). Can the AI bot fetch your site? Covered by
How AI bots discover your site
and the
AI Crawlability Monitor —
if
robots.txtorX-Robots-Tag: noindexblocks the bot, every layer above is blind. - Page health (structural). What can the bot make sense of once it fetches? Covered by Content audit — schema, headings, citations, freshness.
- Mention quality (semantic). When the AI does cite you, what is it saying? Covered by Mention vs. citation and the GEO Score calculation.
- Competitive context (relative). Who is AI citing instead of you? Covered by Competitor tracking.
A "0 mentions" result on the GEO Score is most often a layer-1 problem, not a layer-3 problem. Always check Crawlability first.