// execute

geo-citation-tracker

GEO Citation Tracker

Execute engineIntermediate
bash
$npx skills add sarojkjha/aaj-marketing-skills --skill geo-citation-tracker

// when to use it

Measure what AI engines actually say about a brand, on a fixed prompt set, over time. Separates being named in an answer from having your own page cited as the source — then says plainly whether movement since the last run is real or inside the noise floor.

// what you give

The brand, its category prompts, the engines to track, the competitors to track against — and, for a readout, the logged result of each prompt on each engine.

// what you get

A required prompt-set size, or a scored run giving presence rate, citation rate, rank-weighted visibility, share of voice, framing, and an explicit verdict on whether movement since the last run is real.

// see it run

agent · execute
$
view engine source

Examples

// prompt

node resources/citation-tracker.js --demo

// result

▸ DEMO 1 — design mode

GEO CITATION TRACKER — PROMPT SET DESIGN
════════════════════════════════════════════════════════════
Baseline presence rate      30.0%
Change worth detecting      +15.0 pts  (→ 45.0%)
Confidence / power          95.0% / 80.0%
Engines tracked             4
────────────────────────────────────────────────────────────
PROMPTS PER ENGINE, PER RUN    160
TOTAL QUERIES PER RUN          640   (160 × 4 engines)
────────────────────────────────────────────────────────────
What you could detect at other prompt-set sizes:
  prompts   smallest detectable change
       20        40.6 pts
       30        33.1 pts
       50        25.7 pts
       75        21.0 pts
      100        18.2 pts

⚠  VIABILITY WARNING
   160 prompts per engine is a heavy manual run. Either accept a
   larger detectable change, track fewer engines, or treat this as
   directional monitoring rather than measurement — and say so in the report.

Cadence: monthly. Hold the prompt set FIXED between runs — changing
prompts changes the measurement, and the delta becomes uninterpretable.


▸ DEMO 2 — readout mode

GEO CITATION TRACKER — READOUT · Brightlane · 2026-07-24
════════════════════════════════════════════════════════════
VERDICT   ESTABLISHED

  Presence rate       32.5%  ████████················   named in 13/40 answers
  Citation rate        5.0%  █·······················   own domain sourced in 2/40
  Visibility score     16.5  ████····················   rank-weighted
  Share of voice      17.6%  ████····················   vs 3 tracked competitors

BY ENGINE
  engine            n   presence   citation  visibility
  chatgpt          10      40.0%      10.0%        20.8
  perplexity       10      40.0%      10.0%        20.8
  claude           10      30.0%       0.0%        18.3
  ai_overviews     10      20.0%       0.0%         5.8

SHARE OF VOICE
    Userflow                 35.1%  ██████············
    Appcues                  31.1%  ██████············
  ▸ Brightlane               17.6%  ███···············
    Chameleon                16.2%  ███···············

FRAMING (of answers where mentioned)
  recommended 4   neutral 8   negative 1

MOVEMENT
  Presence  27.5% → 32.5%   +5.0 pts   p = 0.626
  → NOT DISTINGUISHABLE FROM NOISE. Do not report this as a result.
     At n = 40, the smallest change you could reliably detect is 29.3 pts.
  Citation  5.0% → 5.0%   +0.0 pts   p = 1.000

WHAT THIS MEANS
  Mentioned but not sourced. Engines know the brand and describe it from
  their own priors — they are not reading and linking your pages. This is a
  content-extractability problem, not an awareness problem.
  → Run geo-content-optimization on the pages that should be the source.

(Demo data. Replace with a real logged run.)

// faq

// human in the loop

Need a human in the loop?

AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.