FOUND SCORE v1.0 Deterministic AI-visibility scorecard Methodology ID: found-score-1.0 Product: Found Vintage: 2026-09 Status: frozen (do not change weights in this vintage) This file is the scorecard. Code implements it exactly. If code and this file ever disagree, this vintage is wrong until patched as found-score-1.1. 1. Design goal -------------- The same website, scored 100 times, MUST return the same integer Found Score, the same ladder label, and the same four platform scores. Grok (grok-4.5) is allowed to read the page and label evidence. Grok is NOT allowed to pick the number. The number is computed in code from eight pillar levels (0–4) and the weights below. Idempotency is enforced twice: A. Formula freeze. Weights, level mapping, ladder cut-points, and platform multipliers are constants named found-score-1.0. B. Result freeze. The first successful analysis for a canonical URL under this vintage is stored. Every later lookup returns that row, even if the live HTML later changes, even if Grok would now answer differently. That is how 100 identical requests stay identical. 2. What is scored ----------------- Found Score estimates how ready a public company website is to be RECOMMENDED, CITED, MENTIONED, or left ABSENT when a buyer asks ChatGPT, Gemini, Perplexity, or Google who to use in a category. It is not a rank tracker. It does not log in to those products. It does not promise traffic, leads, or sales. It is a published scorecard on the public web page plus (when available) a conservative extraction pass. The FREE teaser is the locked integer, ladder, four platform scores, and a one-line summary. The PAID report ($199.00 USD once, PayPal) is the same locked number plus failing areas and numbered remediations (impact × difficulty). 3. Canonical URL (the unit of analysis) --------------------------------------- Input is a website, not a social profile. - Allow only http/https. Reject localhost, loopback, link-local, RFC1918, .localhost, .local, .internal. - Lowercase the host. Strip a leading www. Strip a trailing dot. - Ignore port 80/443. Ignore hash. Ignore the entire query string (utm_*, gclid, etc. do not create a new company). - Lowercase the path. Strip a trailing slash except at the root. - The stored key is always https://{host}{path} with path omitted at /. http://WWW.Example.com/Path/?utm_source=ad#x → https://example.com/path Two spellings that canonicalize together ALWAYS share one frozen score. 4. Fetch (Layer A input) ------------------------ - HTTPS preferred (http is upgraded before fetch). - 8 second timeout, 5 redirects, 400 KB cap, HTML only. - User-Agent: FoundScore/1.0. - Private hosts are blocked (SSRF). - Scripts and styles are stripped. Title, meta, canonical, Open Graph, JSON-LD, headings, links, word count, and a text excerpt are extracted. - content_hash = SHA-256 of the stripped text (first 80,000 characters). Hash is an audit field. It does not by itself trigger a rescore in v1.0. If fetch fails, Layer A levels are all 0. Grok may still label the URL from the host and any partial HTML. That result is still frozen after first success. If both fail, the request errors and nothing is stored. 5. Eight pillars (weights sum to 100) ------------------------------------- entityClarity 16 Can an assistant tell who you are, by name? schemaMachine 12 JSON-LD, Open Graph, canonical. categoryFit 16 Does the page answer buyer questions? citability 14 Docs, pricing, dated evidence, lists. authority 12 sameAs and third-party corroboration. trust 10 HTTPS, about, contact, privacy. answerReady 12 FAQs, lists, definitions. differentiation 8 Specific ICP, not generic “we help businesses”. Each pillar has an integer level 0, 1, 2, 3, or 4. points(pillar) = round(weight × level / 4) Found Score = clamp(sum of points, 0, 100) // integer 0–100 6. Layer A — HTML levels (fully deterministic given the HTML) ------------------------------------------------------------- entityClarity +1 title length ≥ 3 +1 at least one H1 +1 H1 matches title (normalized) OR Organization.name present +1 Organization / LocalBusiness / Brand / SoftwareApplication JSON-LD clamp 0–4 schemaMachine +1 canonical OR og:title +1 og:title AND og:description +1 any JSON-LD +1 Organization-class JSON-LD +1 FAQPage schema OR sameAs count ≥ 2 clamp 0–4 categoryFit +1 wordCount ≥ 80 +1 wordCount ≥ 200 +1 wordCount ≥ 500 +1 pricing/plans link OR headingCount ≥ 5 +1 wordCount ≥ 800 AND about link AND headingCount ≥ 8 clamp 0–4 citability +1 blog/docs/resources link +1 pricing link +1 date hint in text (year, updated, published) +1 wordCount ≥ 400 +1 listCount ≥ 3 clamp 0–4 authority +1 sameAs ≥ 1 +1 sameAs ≥ 3 +1 external links ≥ 5 +1 a sameAs or external URL on LinkedIn, Wikipedia, Crunchbase, GitHub, G2, Capterra, Clutch, Product Hunt, YouTube, X/Twitter +1 Organization-class JSON-LD clamp 0–4 trust +1 https +1 contact link OR mailto +1 privacy/legal/terms link +1 about link +1 team/careers link clamp 0–4 answerReady +1 FAQ schema OR “FAQ” in title/H1 +1 listCount ≥ 2 +1 headingCount ≥ 4 +1 300 ≤ wordCount ≤ 8000 +1 meta description length ≥ 40 clamp 0–4 differentiation +1 title length 15–70 +1 meta description length ≥ 40 +1 positioning phrase (we help/are/build, built for, unlike, designed for…) +1 headingCount ≥ 3 +1 pricing link clamp 0–4 The same HTML always produces the same Layer A levels. Unit tests lock this. 7. Layer B — Grok extraction (optional, first run only) ------------------------------------------------------- When XAI_API_KEY is present and the URL is not yet frozen, grok-4.5 is called ONCE with temperature 0, max 900 tokens, and a frozen extraction prompt. Grok returns JSON pillar levels 0–4 plus a one-line teaser summary. It does not return the Found Score. Invalid JSON is ignored. Combined level (per pillar): level = round( (htmlLevel × 2 + grokLevel) / 3 ) missing Grok → level = htmlLevel HTML is weighted 2/3 so a chatty model cannot dominate the scorecard. After this compute, the row is inserted. Later requests never call Grok again for this canonical URL + vintage. 8. Ladder --------- 80–100 Recommended first name an assistant would give 55–79 Cited on the shortlist, with a reason 30–54 Mentioned present, easy to skip 0–29 Absent not in the room Cut-points are closed on the lower bound except Absent. 9. Platform scores (derived, no extra model call) ------------------------------------------------- Four integers 0–100, same locked vintage. platformScore = round( 100 × Σ (level/4 × weight × multiplier) / Σ (weight × multiplier) ) Multipliers (found-score-1.0): ChatGPT Gemini Perplexity Google entityClarity 1.2 1.0 1.1 1.0 schemaMachine 0.8 1.5 0.9 1.4 categoryFit 1.1 1.2 1.0 1.3 citability 1.4 1.0 1.5 0.9 authority 1.1 0.9 1.4 1.0 trust 0.8 1.2 0.8 1.3 answerReady 1.3 1.0 1.2 0.9 differentiation 1.0 0.8 1.0 0.8 These are not live queries of those products. They re-weight the same evidence toward how each assistant tends to use the public web. 10. Company name ---------------- First non-empty of: JSON-LD Organization.name, og:site_name, first H1 if ≤ 60 chars, title before | or —, else the registrable label of the host. Grok may replace this on first run if it returns companyName. Frozen after. 11. Teaser vs paid report ------------------------- FREE teaser (user-initiated, cached): score, ladder, four platform scores, one-line summary, weakest pillar names. No numbered how-to. PAID report ($199.00 USD, PayPal, one URL): The SAME locked score (injected; Grok cannot change it). Failing areas = pillars with level ≤ 2. Numbered remediations from the frozen catalog (impact high/medium/low, difficulty high/medium/low), optionally extended by a second Grok call (temperature 0, max 2200 tokens, frozen report prompt). Catalog always ships even if Grok is down so delivery is instant. The report is generated immediately after verified payment. A 12-hour lag may be introduced later; v1 is instant. 12. Remediation catalog (v1.0) ------------------------------ A fix is included when the locked pillar level ≤ maxLevel. entity-h1 entityClarity ≤2 high impact, low difficulty entity-jsonld entityClarity ≤3 high / low schema-og schemaMachine ≤2 high / low schema-faq schemaMachine ≤3 high / medium category-icp categoryFit ≤2 high / low category-prompts categoryFit ≤3 high / medium cite-pricing citability ≤2 high / medium cite-docs citability ≤2 high / medium auth-sameas authority ≤2 medium / low auth-third authority ≤3 high / high trust-basics trust ≤2 medium / low answer-lists answerReady ≤2 high / medium diff-icp differentiation ≤2 medium / low Sort: impact high→low, then pillar weight. Then number 1..N. Grok extras are appended, de-duplicated by title, then re-numbered. 13. Worked numeric check ------------------------ All pillars at level 4 → 100 Recommended. All pillars at level 0 → 0 Absent. entityClarity 16 at level 2 → 8 points. schemaMachine 12 at level 1 → 3 points. citability 14 at level 3 → 11 points. Ladder: 29 Absent, 30 Mentioned, 54 Mentioned, 55 Cited, 79 Cited, 80 Recommended. 14. Change control ------------------ Do not edit this vintage in place. A new methodology_version (found-score-1.1) may recompute. Old URLs keep their 1.0 row until then. The extraction prompt and the report prompt are versioned with this file. They live next to this document as found-report-prompt.txt. 15. What this is not -------------------- Not a crawl of ChatGPT’s live answers. Not SEO spam advice. Not a guarantee you will be recommended tomorrow. Not a subscription. One payment, one URL, one locked score, one PDF.