// execute
geo-citation-tracker
GEO Citation Tracker
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
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.
