How the index is built
The mechanic.
We’re a research tool, not an opinion. Every number on every page traces to a query you could re-run yourself. This page documents how.
Step 1 · Define the market
Three axes — geo, keyword, engine.
A market is a metro plus a specialty. For Fort Myers plastic surgery, the geographic scope is a 50-mile circle centered on Fort Myers (26.64°N, 81.87°W), broken into named sub-markets so each can be filtered independently.
Geo axis · 5 sub-markets
- Fort Myers · 26.6406, −81.8723
- Cape Coral · 26.5629, −81.9495
- Punta Gorda · 26.9298, −82.0454
- Bonita Springs · 26.3398, −81.7787
- Estero · 26.4381, −81.8067
Keyword basket · 12 money terms
- plastic surgeon
- best plastic surgeon
- plastic surgery
- breast augmentation
- facelift
- mommy makeover
- tummy tuck
- liposuction
- rhinoplasty
- Botox
- eyelid surgery
- plastic surgery cost
Engine coverage · 3 today, 5 next
- Google organic · top 20 results per (keyword, geo)
- Google map pack · the local 3-pack (bundled with the organic call)
- Bing organic · top 20 (smaller share, useful for AI-search correlation since Bing powers ChatGPT search)
- Claude · conversational citation tracking via procedure-specific prompts
- ChatGPT · same prompts as Claude (next pass)
- Grok, Perplexity, Google AI Overviews · on the roadmap
Step 2 · Run the queries
One pass. ~105 queries. ~$0.28.
Cartesian product of (geo × keyword × engine), pruned with two principles: map-pack rides on the Google call, and AI engines get conversational prompts instead of one prompt per keyword.
Tier 1 (5 core geos)
Google + map pack: 5 geos × 12 keywords = 60 queries
Bing organic: 5 geos × 6 keywords = 30 queries
Claude AI: 5 geos × 3 procedure-specific prompts = 15 queries
───────────────
105 queries / pass
DataForSEO + Anthropic API spend ≈ $0.28 per pass. Step 3 · Build the universe
Dedupe, categorize, sub-market tag.
Every organic result, every map-pack listing, every Claude-named entity is folded into one row per unique practice (keyed by domain primary, GMB place_id secondary). The aggregator filters directory sites, content pages, manufacturer brands, and out-of-market high-DR bleed.
Each practice is tagged: plastic_surgery · dermatology · med_spa · laser_clinic · cosmetic_other. The matrix shows plastic surgeons; outliers get their own section so the SERP reality stays transparent.
Step 4 · Score
The Visibility Score formula.
Per (practice, keyword, engine), a position becomes a CTR-weighted score. Engine weights are configurable so the formula can flex as AI search grows. Final score normalized 0–100 across the universe (share of voice).
score(practice) = Σ over (keyword, engine) [ kw_volume_weight × position_score(pos, engine) × engine_weight ] position_score, Google organic (CTR curve) pos 1=100 pos 2=65 pos 3=42 pos 4=28 pos 5=18 pos 6–10 ≈ 12 → 3 pos 11–20 ≈ 2 → 0.5 pos 21+ = 0 position_score, map pack: pos 1=80 pos 2=45 pos 3=25 position_score, Bing organic: same curve × 0.8 AI citation score: named 1st in response = 100 named 2nd = 70 named 3rd = 50 mentioned at all = 25 engine_weight (starting, tunable) Google organic 0.45 Google map pack 0.12 Bing organic 0.08 Claude 0.20 ChatGPT 0.15
Step 5 · Publish & refresh
Date-stamped. Re-crawled quarterly.
Every page carries the date the underlying data was captured plus a dateModified in schema markup. Markets re-run every 90 days — data refreshes, date stamps advance, AI engines that change behavior are re-scored.
Practices can request immediate takedown at any time — one email at info@medicaladvertising.agency.
Known limits
What this pass doesn’t catch.
- Practice lat/lng currently approximated to sub-market center pending GMB info lookups (planned for pass 3).
- Claude refused 4 of 12 prompts in pass 2 — the "mommy makeover" prompt triggered the medical-advice guardrail in every sub-market. Prompt phrasing is being iterated.
- Bing surfaces high-DR national practices (e.g. Dr Kenneth Hughes, Los Angeles) over local Fort Myers competitors. The matrix shows this honestly; a "local-only" filter is on the roadmap.
- ChatGPT axis pending API key — current AI signal is Claude-only.
- Site audit data on dossier pages (Section 7) lands after the Screaming Frog crawl pipeline ships in pass 3.