Public contract · demo-v0
How the score is built
Name + website + market → a 0–100 Recommendation Score a business owner can read in one glance. The number is AI search visibility — not Maps, not SEO, not a blended “readiness” grade.
What we measure
How often major AI answer engines mention or recommend the business when a prospective buyer asks high-intent questions in that market and trade — without using the business name in the prompt.
Branded queries (“is Harbor HVAC any good?”) are diagnostic only. They do not go into the headline number.
Visibility = appeared in N of M
Visibility % is the share of tracked unbranded prompts where the brand appeared at least once — “appeared in N of M searches.” That mention rate is the Recommendation Score backbone.
Visibility % = 100 × (prompts with a mention) / (tracked prompts) engine_score = same ratio, per engine AISearchScore = round(average(engine_scores))
Start simple: mention rate. Soften later with recommend-vs-bare-mention or top-3 position if owners say mention-alone feels unfair.
Direct vs Indirect mentions
Direct
The engine answer cites or links the brand’s own domain (your website) while naming the business.
Indirect
The answer names the brand through a third-party source — Yelp, Angi, BBB, news, Reddit, directories — not your site.
Both count toward Visibility (appeared or not). The Direct / Indirect split tells you whether engines can cite you, or only talk about you via someone else’s page.
Engines
- ChatGPT
- Google AI
- Perplexity
- Claude
Equal weight across 4 engines unless validation shows one dominates buyer behavior for local services. Engines may be added or paused; the run artifact records which set was used.
Prompts
From the business name, site, and city we generate unbranded buyer-intent prompts in three buckets:
- Category + geo (~40%) — “best carpet cleaner in {city}”
- Job-to-be-done (~40%) — “who can remove pet urine smell from carpet {city}”
- Comparison / shortlist (~20%) — “top-rated plumbers in {city} for drain cleaning”
No brand name in scored prompts. Natural language. The prompt set is stored with the run so a re-score uses the same questions.
Recommendation Score vs Fix / Audit
The headline Recommendation Score is only AI visibility (mention rate across engines). Fix Score and the AI Site Audit (NAP, GBP, schema, citations, service pages, robots/sitemap readiness) stay separate. Mixing them hides the thing owners actually feel: “AI never says our name.”
Audit findings feed the Plem action layer. They do not inflate or deflate the Recommendation Score.
Repeatability contract
A score is a run artifact. Movement is only meaningful when the contract matches:
- Business identity (name, website, market)
- Prompt-set version (e.g. demo-v0)
- Engine set + adapter versions
- Timestamp and raw answers / grades
- Headline number + Direct / Indirect counts
Re-score the same prompt set to compare weeks. Changing prompts or engines starts a new series — do not chart them as continuous.
Demo vs live (honest labels)
Demo mode
Default when no engine API keys are set. Score is deterministic from the business name hash. Prompts, competitors, and excerpts are generated so the UI is clickable. Every response is labelled DEMO / mode: "demo". We never claim these are live engine results.
Live mode
Requires one or more provider keys (OPENAI_API_KEY, etc.). Real adapters run; artifacts land under data/runs/ when Supabase is offline. Labelled mode: "live" only when adapters actually ran.
Snapshot = 1 sample
On-demand beta scores use 1 sample per (prompt × engine). That is a point-in-time snapshot, not a multi-draw average. Engine answers are non-deterministic — the same business can move several points between runs.
For validation batches and any paid re-score we plan 3 samples and take mention rate. Until then, treat the number as a labeled snapshot under a fixed prompt-set version.
This website ships in demo by default
Live ChatGPT / Google AI / Perplexity / Claude adapters plug in via lib/engines/ without changing the report layout. Check /api/health for modeHints.scoring.