AIEO.ee

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.15

Each 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 × 20

Mentions 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) × 25

Content 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.

On this page