Growth Score
The exact composition of the 0–100 number on your dashboard.
The Growth Score is one number that answers "is our search + AI visibility
getting better?". It is computed from your project's live data (no external
service), from four pillars — defined once in packages/core/src/scoring.ts.
The formula
overall = AI Visibility × 0.35
+ SEO Visibility × 0.35
+ Traffic Opportunity × 0.15
+ Content Opportunity × 0.15Each pillar is 0–100, so the overall score is 0–100.
AI Visibility (35%)
From your GEO runs in the measurement window:
mention rate = runs mentioning your brand / total runs
citation rate = runs citing your domain / total runs
SOV = your brand mentions / all brand mentions (you + competitors)
aiVisibility = mentionRate × 60 + citationRate × 20 + sov × 20Mentions dominate: being in the answer matters most; being the cited source and out-mentioned vs competitors each add a fifth.
SEO Visibility (35%)
A depth-weighted view of your tracked keywords' Google positions:
seoVisibility = (top3×10 + top10×5 + top20×2 + top100×0.5)
/ max(8, keywordsTracked × 0.6) (clamped 0–100)The buckets are cumulative: a keyword at position 2 is counted in top3 and top10 and top20 and top100 (10+5+2+0.5 = 17.5 points), while one at position 15 counts only top20+top100 (2.5 points) — so a top-3 ranking is worth 7× a position-11–20 ranking. The score rewards depth, not just coverage.
Traffic Opportunity (15%)
Monthly search volume sitting at positions 4–30 ("striking distance"), log scaled so a few huge keywords don't saturate it:
trafficOpportunity = log10(1 + opportunityVolume) × 25Content Opportunity (15%)
The estimated monthly traffic locked in open content gaps plus the gap count:
contentOpportunity = log10(1 + gapEstimatedTraffic) × 22 + min(20, openGaps × 4)Reading the score
- Rounding and clamping: each pillar and the overall score are rounded to
integers and clamped to 0–100 (
packages/core/src/scoring.ts), so small input moves can vanish in rounding — trust trends, not ±1 jitters. - Trend over absolute value — the score is comparable to itself over time. A move from 34 → 41 usually means things improved, but check the breakdown: opportunity pillars can move the number on their own (see the next point).
- The breakdown shows which pillar moved. Dashboard tooltips display all four pillar values; a dropping AI Visibility with steady SEO points at GEO (new competitor content getting cited), not at Google rankings.
- "Up" is not always "more visible": Traffic/Content Opportunity measure untapped headroom — discovering new gaps can raise the score even though nothing improved yet. Read opportunity pillars as a to-do list size, the AI/SEO pillars as actual presence.
- Fresh inputs, fresh score — pillars read the same tables the dashboard pages read (runs, rankings, gaps); after a GEO run-all or rank refresh the score updates on next load.
The score is deliberately deterministic — the same inputs always produce the same number, which is what makes week-over-week comparisons trustworthy.