Qwairy
Competitive intelligence playbook

Diagnose AI Model Visibility Blind Spots

Compare equivalent prompts, dates, providers, models, answers, competitors, and citations to diagnose why AI visibility differs without mistaking correlation for cause.
20 min guided runAdvancedUpdated Aug 23, 2026
Workflow blueprint
v1.0

Target outcome

A provider gap map with answer evidence, source hypotheses, and a focused investigation plan

  1. Build the matrix

  2. Isolate the gaps

  3. Inspect the evidence

  4. Plan the investigation

Quick run

Run the workflow in one click

Nothing to fill in: the prompt runs as-is and asks you for anything it still needs.
Needs the Qwairy MCP connector

Run in Claude and Run in ChatGPT open a new browser tab with the prompt already typed. Nothing is sent until you submit it.

Run checklistCheck the inputs and deliverablesAudience, tools, expected output, and prerequisites.
Best for
GEO leadsBrand strategistsMarketing analysts
You get
  • Like-for-like provider scorecard
  • Prompt-level blind-spot map
  • Answer and source evidence pack
  • Provider-specific investigation plan
Before you start
  • A Qwairy Starter plan or above with active monitoring
  • Claude or ChatGPT with the Qwairy MCP connector enabled
  • Enough recent monitoring data for the selected topic
Playbook breakdownHow the workflow worksWhat each step pulls, the GEO decision it unlocks, and the full prompt.5 min read5 sections

A brand can be recommended by one AI engine and absent from another on the same question, and a provider percentage cannot explain why. This workflow narrows that gap to the answers and citations behind it, then names the treatment the evidence supports.

The GEO problem it solves

Content gets commissioned for the weaker engine before anyone checks both sides were measured the same way. A provider monitored on fewer prompts looks weaker for reasons unrelated to visibility, and a provider name covers a whole model family, so an engine-wide gap often sits in one model.

A completed answer that never names the brand is an observed absence, not proof the engine ignores you; a null cell is missing evidence, and merging the two produces a fake ranking.

How the workflow breaks down

1. Establish the provider baseline. list_brands resolves the exact brandId; get_provider_breakdown returns each provider's answer volume, mentions and visibility rate for a relative or custom date window, with optional topic, tag and funnel filters, up to ten providers. Zero answers on a provider is a coverage gap, not a visibility result.

2. Compare denominators, then drop to prompts. get_brand_performance takes one provider and an explicit window, returning scoreDetails numerators and denominators with promptsCount and responsesTotal; its mentionRate and the breakdown's visibilityRate divide by different populations. get_matrix at prompt granularity then gives one row per prompt and one cell per provider, capped at 50 rows.

3. Reconstruct the answer evidence. get_prompt_answers lists each answer with its modelId, date and mention flag; get_answer_details opens the text, competitors and sources, and answers pair only when their dates are comparable.

4. Separate facts from hypotheses. One row per explanation: the fact quoting returned field names, the hypothesis, evidence for and against, confidence, a falsifiable re-test.

What a run actually returns

A real topic grid, five providers wide: on "llm performance analytics" one engine scored 16 with a rank of 6 out of 19, while two others returned 0 on the same topic in the same window. On "ai brand monitoring" the same engine scored 13 and another 0, with the brand ranked 43 of 89 and 70 of 91 respectively.

That is the shape a blind spot takes, and why one visibility number hides it: same content, same questions, same week, and one engine reaches for the brand while two never do. The rank matters more than the score. 6 of 19 against 70 of 91 is not a content gap, it is two different competitive fields, and each takes a different treatment.

What to do with the output

A row with a null cell on either side is a measurement bug, not a diagnosis: it goes to the data-quality queue whatever its size.

The rest split by class, and the treatments do not swap. Coverage belongs in monitoring: the weak provider on the same prompt set. Model mix is a re-cut of the same analysis per model ID, since a family-wide plan is wrong when one model is the blind one. Citation evidence names the domains the weak engine cited instead of you: the work is presence there. Competitive means a rival holds the top positions, answered with a comparison against it. Prompt fit means the engines read the question differently, so the target is the topic behind it.

Work them in that order, coverage first: a measurement fix can close a gap at no content cost. Temporal variation and unresolved mechanism get only a re-measure date. Between two candidates in one class, take the prompt with more comparable answers on both sides.

The Complete Prompt

I want to diagnose why my brand is visible on some AI providers and absent on others, and to leave with the treatment the evidence supports. Resolve my brands with list_brands, ask which to use if there are several, then reuse that brandId. Use the last 28 days for every aggregate call.

1. Call get_provider_breakdown and return every provider row with totalAnswers and visibilityRate, flagging unequal volume. If only one provider comes back, stop and report a monitoring gap.
2. Call get_brand_performance for the strongest and weakest comparable provider, comparing scoreDetails denominators and methodology. Never read scores.mentionRate as interchangeable with visibilityRate.
3. Call get_matrix with granularity "prompts" and limit 50, keeping each row id and each cell's provider, score and topCompetitor. If it returns no rows, page get_prompts and pick the cohort by hand.
4. Split rows into verified candidates (same prompt, non-null cells both sides) and data-quality candidates (null cells, missing provider, weak date overlap). If every row is data-quality, deliver that queue and stop.
5. Take up to five verified prompts, call get_prompt_answers on each and keep provider, modelId, createdAt and brandMentioned. A prompt with no answers on one side is the coverage finding itself: record it, do not pair it. Pair only comparable dates.
6. For each pair call get_answer_details on both answers, keeping the response, competitors with position and cited sources. An answer with no sources is evidence about that answer only.
7. Build the ledger: fact quoting returned field names, hypothesis, evidence for and against, confidence, falsifiable re-test. Classify each as coverage, model mix, prompt fit, competitive or citation evidence, temporal variation, or unresolved mechanism.
8. Give each supported hypothesis the treatment for its class: coverage to my monitoring setup, model mix to a re-cut per modelId, citation evidence to the domains the weak engine cited instead of me, competitive to a comparison against that rival, prompt fit to the topic behind the prompt. Temporal variation and unresolved mechanism get a re-measure date only. Keep that order, breaking ties on more comparable answers. If nothing is supported, give me the data-quality queue.
9. Close with a re-test sheet freezing prompt IDs, modelIds, baseline answer IDs and dates, then ask which providers my buyers use: a blind spot on an engine my market ignores is a note, not a project.
Put the workflow to work

Run this playbook on your own AI visibility data.

Connect Qwairy to Claude, pull the exact signals in the workflow, and leave with an execution-ready output.