Skip to content

What we count, how we count it, and what we leave out.

Every figure in Slynnk is a query over answers we stored, so you can recompute it. This page is the specification.

In one line: visibility is the share of stored answers, to prompts that do not name the brand, in which the brand appears.

The evidence

Each prompt is asked once per engine, country and day. Each ask ends in one of three states.

  • ok: the engine answered. The text, the sources it cited and the searches it ran are stored. Only these count.
  • no answer shown: the surface did not render, for example Google showed no AI Overview. It says nothing about the brand, so it is left out of every denominator. Counting it as an answer that ignored you would pull every number toward zero for reasons unrelated to you.
  • failed: the call did not complete. It is retried twice, then refunded, and it never enters a metric.

How we find brands

Mentions come from a deterministic text search for the names, aliases and domain you gave us, in the text we stored. No model reads the answer. That makes a count reproducible (the same answer always gives the same mentions), auditable (each mention records exactly where it is in the text) and free per answer.

The rules:

  • What is searched. The brand name, its aliases, its domain, and for a plain name.tld domain the name part alone ("Epubor" for epubor.com). A link to a brand's site has put the brand in front of the reader, so a domain written in prose counts.
  • Whole words only. "Acme" does not match inside "Acmeify". Punctuation counts as a boundary, so "acme.com" matches.
  • Three characters minimum. A one or two character name would match inside ordinary words ("Go" in "good"). A wrong mention inflates the number silently; a missing one does not.
  • Longest match wins. With "Acme Analytics" and "Acme" both tracked, only the longer one is reported at that spot.
  • Every occurrence is kept. The count is evidence; the metrics count distinct answers.
  • Spellings collapse. "Run:AI", "RunAI" and "run ai" are one brand.
  • Rank comes from lists. A mention inside a numbered or bulleted item carries that item's position. Prose carries none, including the paragraph after a list. Sub-bullets do not push the next item down, and a second list restarts the count.
  • A name that is also a description counts only where it reads as a name. "Kindle to PDF" is a product, and also what every answer about the category says. It does not count right after "convert", before "converter", or glued to another brand's name. On one brand's answers the plain search counted 122 where 44 named the product.

What this costs: a brand nobody listed is invisible, and "I could not find Acme" is still a literal occurrence of "Acme". We would rather show a count you can verify than one that sometimes invents a mention.

What a number divides by

  • Branded prompts stay out of the headline. A prompt that names your brand measures the question, not the market. They are kept in the grid, tagged, because what an engine says when asked directly is worth reading. The same matcher decides whether a prompt is branded.
  • Answers are counted once. One answer that names the brand three times is one answer, not three, so visibility is never inflated by repetition.
  • Share of voice counts mentions: yours over every tracked brand's, in the same answers. An answer that names you once and a rival five times is one answer each but a 1:5 share.
  • Position is the mean list rank of the mentions that have one. A brand that never appears in a list has no position, not position zero.
  • Citation share is cited sources that are yours over all cited sources.
  • An empty window is 0, never "NaN", and a day with no answers is a gap on a chart, not a zero.

How sure a number is

  • Interval. Every visibility figure shows a 95% Wilson interval and the number of answers behind it. It is wide when evidence is thin and narrows as answers accumulate.
  • Real change or noise. Comparing two windows, we use a two-proportion z-test. We call a change real only if it is statistically clear (p below 0.05) and at least five percentage points. Anything else reads "within noise".
  • Small samples say so. Under 20 answers, a result is captioned as a small sample and its chart dot is hollow.
  • Grid cells. A prompt-by-engine cell with fewer than 5 answers cannot take the darkest shade, because one lucky answer is not dominance. A measured zero is drawn; a prompt never asked is a dashed absence.
  • Starter checks. Every new prompt is run several times on its first day (3 during a trial, up to 10 on a paid plan), so there is history from day one.

API vs what people see

A target is an AI product reached one specific way. We collect ChatGPT, Gemini, Google, Perplexity and Copilot as people see them in the product, through a data partner. Where we add an API cross-check for a product it is its own target. Two targets on one engine are never averaged, so a difference stays visible.

When we add sentiment and framing, they come from a model reading the answer. Those figures are labelled "model-judged" wherever they appear, and they never feed the headline visibility number.

Check a number yourself

Visibility over the last 30 days, by hand, against the stored answers:

select
  count(*) filter (where exists (
    select 1 from mentions m join brands b on b.id = m.brand_id
    where m.answer_id = a.id and b.is_target)) as answers_naming_brand,
  count(*) as answers
from answers a
join prompts p on p.id = a.prompt_id
where a.workspace_id = :client
  and a.status = 'ok'
  and not p.branded
  and a.collected_at >= now() - interval '30 days';

It should match the overview. If it does not, that is a bug, and we want to hear about it.

What we cannot tell you

  • Whether AI visibility earns revenue. We can show AI referral traffic and branded-search trends next to your numbers. That is correlation, and we label it that way.
  • What any individual person was shown. Answers can depend on the person, their location and their history. We measure what the engines return for the questions you track, in the countries you choose.
  • Real search demand for a prompt. We have no panel of real conversations, so we do not publish "prompt volume". Prompts come from the category, the competitors and signals you connect, with the source shown.
  • Brands nobody listed. The matcher finds what you gave it. Competitor suggestions come from the sites engines cite, and you decide what to track.
  • Why an engine said it. We show the sources it cited and the searches it ran; we cannot see inside the model.

Where the matcher comes from

Our brand-matching rules, the list-rank logic, the citation classes and the small-sample conventions are ported from Limelit Open, an Apache-2.0 project, along with its test cases, which we also run. The code is changed and extended in TypeScript, and its licence and notice are preserved. We tell you because "where does this come from" is a fair thing to ask of a number.