Blog Measurement

AI visibility reporting for agencies: structure, intervals, promises

A client report template for AI visibility: what to show, intervals for small samples, a monthly rhythm, what not to promise, and how to educate clients.

A common client question is whether the brand shows up in AI answers, and the easy answer is a single percentage. That number invites two mistakes. The client reads a few answers' worth of movement as a trend, and the agency ends up promising a result that nobody controls. A good report makes both harder: it shows how many answers sit behind each figure, gives a range, and separates what was measured from what was done.

This post sets out a report structure, the metrics to put in it, a monthly rhythm, the promises to avoid, and a short script for educating clients. The examples with a "Brand A" use made-up counts. Real figures come from the October 2026 edition of the Dopbot Index, in which "OpenAI" means OpenAI's API with web search (gpt-6-luna) and "Perplexity" means Perplexity's Agent API with the Sonar model (perplexity/sonar).

What should an AI visibility report contain?

Seven parts, in this order, the first three fitting on one page:

  1. A scope line. Which engines, API or app, which country, how many prompts, how many answers behind each figure, and the dates collected. If the data comes from developer APIs, say so; the API versus app post explains why that matters.
  2. A per-engine table. For each engine, the brand's count out of the answers sampled, the share and its interval. Never one number across engines.
  3. A one-paragraph reading in plain words: what the numbers support, and what they do not.
  4. A question-type view. The same count for best overall, budget, premium, use-case and buying-advice questions, so the client sees where the brand appears.
  5. A competitor view. For each tracked rival, the answers that name both, only your client, only the rival and neither. The benchmarking post explains the method.
  6. Source gaps, per engine. Domains that appear where rivals are named and the client is not, labeled by type, with the caveat that presence is not influence. For OpenAI these are pages the answer links; for Perplexity they are pages its search retrieved, not all of which the answer uses.
  7. Actions. What was done, with the date, and what is planned. Each action is a hypothesis, not a promised effect.

An appendix lists the prompts, the method and the limits, so the report can be audited.

What does the headline table look like?

Here is the first table for a made-up client, Brand A, in a 40-answer update: 20 answers per engine.

EngineAnswers sampledBrand A namedShare95% Wilson interval
OpenAI20630%14.5% to 51.9%
Perplexity20945%25.8% to 65.8%

Table: made-up counts for illustration. The two engines' ranges overlap, so the report should not say that one engine favors Brand A more.

The by-type view follows, with counts and denominators. In a 40-answer category each question type has 8 answers, 4 per engine:

Question typeAnswersBrand A named95% Wilson interval
Best overall8421.5% to 78.5%
Budget827.1% to 59.1%
Premium8530.6% to 86.3%
Use case8313.7% to 69.4%
Buying advice812.2% to 47.1%

Table: made-up counts for illustration; the five rows add up to the 15 answers in the first table. Every range here is wide, which is the honest finding.

Use the type table to decide where to gather more answers, not to declare a weak spot. If the budget row looks low, ask the budget question more often next month before rewriting any page.

How do you show intervals without confusing clients?

Say it as a range of plausible values: "Brand A was named in 6 of 20 OpenAI answers, which fits a true rate anywhere from about 15% to 52%." Put the count first and the range second, and keep the percentage small. Clients accept a range once it is the same in every report.

The range narrows slowly with sample size. For a brand named in 30% of answers, the 95% Wilson interval looks like this:

AnswersBrand namedShare95% Wilson intervalWidth of the range
10330%10.8% to 60.3%49.5 points
20630%14.5% to 51.9%37.3 points
401230%18.1% to 45.4%27.4 points
1003030%21.9% to 39.6%17.7 points

Table: the same observed 30% share at four sample sizes, computed by script. Even at 100 answers the range is about 18 points wide.

Three rules keep the report honest:

  • Do not report a percentage change from small counts. A move from 3 to 5 answers of 10 is "+67%" in a slide, and it sits well inside the range of ordinary variation. Report the counts and the ranges, and call a change real only when the ranges separate or an exact test gives p below 0.01 on samples of the same size. The post on how many answers to trust a change has the thresholds. The Dopbot methodology sets that bar for listing changes between two updates of the same size, and says the test is not built yet.
  • Do not compare across sample sizes. The October 2026 edition has about 10 answers per category and the monthly update of 40 US categories has 40, with a different fifth question, so figures from the two are not like for like.
  • Do not rank by percentage. In the October 2026 edition (both engines, excluding the alternative-to-a-brand question, 1,271 answers), answers recommended 2.3 brands on average, so shares across brands add up to about 230%, far more than 100%, and brands a few answers apart cannot be told apart.

What monthly rhythm works?

AI answers vary from run to run, so reporting more often on the same number of answers mostly adds noise. A monthly cycle fits the sample sizes that exist:

Days of the monthTask
1 to 3Run the fixed prompts on each engine; log any failed answers
4 to 6Check the data: merge brand-name variants, re-run failures, confirm the denominators
7 to 10Analyze: per-engine counts and ranges, the competitor four-cell table, source gaps; list a change only if it passes your rule
11 to 14Draft the report: one page up front, appendix behind
15Send it, with a 30-minute call to walk through it
16 to 28Ship the agreed actions, and log the date each one went live

Do not re-run mid-month to chase a number. Run again only to check a fix you shipped, and label it a check, not a new data point in the series.

The capacity maths is worth doing before you quote a retainer. Take the pattern of the index's monthly update, 4 samples per prompt and engine, and a set of 25 prompts per client: 25 prompts across 2 engines at 4 samples each is 200 answers per client per month. If a person records each answer by hand in 3 minutes, which is an assumption to replace with your own timing, that is 10 hours per client per month and 100 hours for 10 clients, before analysis. Automating the collection or buying a tool are both options. The Dopbot Agency plan covers 5 brands for USD 199 a month (10 clients would need two plans); either way, report monthly and keep the same prompts and engines across months.

What should you not promise?

Google's own guidance on hiring an SEO says no one can guarantee a #1 ranking, and that a provider guaranteeing first place should be replaced. The same logic applies to AI answers, where the output also varies between runs. The table sets the claims you can defend against the ones you cannot.

SayDo not say
"Named in 6 of 20 OpenAI answers, US, 40-answer update""You appear in 30% of ChatGPT answers"
"The change from 3 to 5 of 10 is inside normal variation""Visibility is up 67%"
"We will fix these 4 product pages and re-measure in 30 days""We will get you recommended"
"Named in answers for budget questions less often in this sample""Shoppers searching for budget options don't find you"
"Perplexity's retrieved sources include these review sites""These sites cause the recommendations"

Table: example wording. The left column states a count, a sample and a surface; the right column states a result, a cause or an audience nobody observed.

Two more promises to avoid. Do not promise traffic or sales from visibility: a count of recommendations is not a count of visits or orders, and the attribution post covers what can and cannot be seen. And do not say "ChatGPT" for a number collected by API, because the apps differ.

How do you educate clients?

Put this paragraph, or your version of it, on the first page of every report:

We ask the assistants a fixed set of shopping questions each month and count how many of their answers recommend your brand. Each answer is one draw, and the same question can give a different answer next time, so we show a range as well as a count. We sample the assistants through their developer interfaces, which can differ from the apps people use. A change is only treated as real when the new range no longer overlaps the old one. We report what we measured and what we did, and we do not promise a result.

Then three habits make the paragraph stick:

  • Walk through one real page. Show the client a public category page and read it with them. Reading an AI visibility report does that on a real page.
  • Point to the provider's own caveat. As of October 2026, OpenAI's help center page on searching the web with ChatGPT says search results and citations can be incomplete, outdated or incorrect, a reminder from the source itself that these answers need checking.
  • Agree the decision rule in advance. Before the first report, write down what counts as a real change and what action it triggers, so no one argues about it after seeing the numbers.

Frequently asked questions

How many prompts should a client report cover?

Enough to cover each question type in the report, and few enough to ask each many times. The index uses 5 per category, asked 4 times per engine in the monthly update; the capacity example above uses 25 prompts per client. Adding prompts does not substitute for repeats: ten prompts asked once each give 10 answers, however varied.

Should the report combine the engines into one number?

Not as the headline. The two engines build answers differently, and across the 160 categories of the October edition, excluding the alternative question, the share of brands named by both engines among the brands named by either, taken per category and averaged, was 47.0% (about 8 answers per category). If a client insists on one figure, show it beside the two engine rows, labeled as both engines combined, with its denominator.

How we write: drafted with AI tools from Dopbot Index data and public sources; every number and outside fact is traced to its source in a claims record and checked before publishing. More about how we write; corrections to hello@dopbot.com.