# How to Measure AI Visibility Without Double-Counting

A practical workflow for measuring AI visibility without double-counting, with one row per answer, one denominator per metric, pooled prompt runs and Search Console data kept apart.

AI visibility numbers go wrong in a predictable way. The same answer gets counted twice, three times or more, and the rate on the dashboard drifts away from what buyers actually see. This playbook fixes the counting before it reaches a report.

- Count answers, not mentions. One answer naming your brand three times is one mention.
- Pick one denominator per metric, usually all answers, and print the answer count beside every rate.
- Run prompts repeatedly and pool by period. A single run is a sample of one.
- Collapse data to one row per prompt, engine and run before totals, blends or dashboards.
- Keep branded prompts, each engine and Search Console AI impressions as separate series.

This applies to any tracked prompt set measured with a visibility tool, a warehouse or a spreadsheet, across one or more AI engines. Deduplication removes counting errors, not model randomness, so a small prompt set stays exploratory however clean it is.

## What Is Double-Counting In AI Visibility Measurement?

Double-counting in AI visibility happens when one AI answer adds more than once to a total, and [IAB defines Mention Rate as responses containing a brand mention divided by total responses](https://www.iab.com/wp-content/uploads/2026/07/IAB_Measuring_Visibility_in_the_AI_Era_August_2026-1.pdf), so a brand named three times in one answer still counts as one mention. The unit is the answer, never the word.

> **Double-counting:** Any step in collection, storage or reporting that lets a single AI answer contribute more than once to a numerator or a denominator.

Most teams meet the problem once they track [AI search visibility](https://growthtribune.com/search-ai-visibility/ai-search-visibility/) across several engines and start building their own reports. The five common forms look like this:

1. **Mentions inside one answer.** A brand named in the intro, a list and a summary is logged as three mentions instead of one answer that mentions it.
2. **Repeated runs treated as prompts.** Running one prompt ten times and reporting ten prompts inflates the prompt count and hides that the answers share one question.
3. **Mentions plus citations.** Adding mentions and citations into a single "visibility" total counts an answer that names and links you twice. The IAB framework keeps them as separate rates, and a brand can have a high Mention Rate and a low Citation Rate.
4. **Blends that multiply rows.** Joining engines or sources without a unique ID per answer creates extra rows, so one answer appears in the total more than once.
5. **Summing Search Console page rows.** Google's generative AI report aggregates the page table by page and the chart by property, so the page rows can add up to more than the site total.

A sixth problem inflates the headline without duplicating rows. LLM Pulse's methodology guide recommends reporting branded prompts separately, because prompts that already contain your name lift the headline figure.

One metric to drop entirely is an "AI ranking position". The SparkToro and Gumshoe.ai study concluded that visibility percentage across many prompts run multiple times is a reasonable metric and that ranking position in AI is not. If you need the background on the term itself, read [what AI search visibility means](https://growthtribune.com/what-is-ai-search-visibility/) before building the counts.

## Which Denominator Should You Use for AI Visibility?

Use all answers collected in the period as the denominator for mention rate and citation rate, because the IAB framework divides both by total responses, and keep share of voice as a separate metric whose counting choices you state next to the number.

A rate without its denominator printed beside it cannot be checked or compared.

**Denominator decision table**

| Metric | Numerator | Denominator | When to use |
| --- | --- | --- | --- |
| Mention rate | Answers that mention you | All answers in the period | Default headline metric |
| Citation rate | Answers citing your domain | All answers in the period | Tracking linked or named references |
| Share of voice | Your brand mentions | All tracked brand mentions | Competitive context, with counting rules stated |
| Per-engine rate | Answers on one engine that mention you | All answers on that engine | Before any pooled figure |

Five rules keep the table honest:

- **One denominator per metric.** Never switch a metric's denominator between periods or reports.
- **Publish the answer count.** Print the numerator and denominator next to every rate.
- **Failed answers are their own series.** LLM Pulse tracks refused, timed-out or empty answers separately, because a change in them changes the population the rate covers.
- **Branded and non-branded apart.** Report them as two series, never one blended rate.
- **Engines pooled only with a stated rule.** Compute each engine's rate first, then say how the pooled figure is weighted.

Share of voice needs extra care. The IAB framework says Share of Voice providers must disclose two methodological choices that materially change the result, and that results are sensitive to which queries are in the set. Two tools with different prompt sets will not agree.

Vendor scores add another layer. Profound's headline visibility score is traffic-weighted across the date range, while LLMrefs does not publish the formula behind its LLMrefs Score, according to an independent review. Read each tool's definition before you compare two vendors' numbers, and rebuild the rate yourself when the definition is missing. The IAB framework goes further on derived metrics, calling the denominator of Competitive Displacement Rate interpretively unreliable.

## How Many Times Should You Run Each Prompt?

Run each prompt repeatedly and report rates over pooled answers, because [ChatGPT and Google's AI returned the same brand list less than once in 100 runs](https://sparktoro.com/blog/new-research-ais-are-highly-inconsistent-when-recommending-brands-or-products-marketers-should-take-care-when-tracking-ai-visibility/) in SparkToro and Gumshoe.ai's study of 2,961 runs. One run tells you what one answer said. It does not tell you how often the engine says it.

The evidence splits into two positions, and each number has a different owner:

**Who owns each run-count number**

| Position | Owner | Finding |
| --- | --- | --- |
| Run many times | Independent study (SparkToro with Gumshoe.ai) | At least 60 to 100 runs per prompt, averaged |
| Once a day is close enough | Vendor's own study (Profound) | Within about 2 points of ten runs a day |
| Small sets are exploratory | Industry framework (IAB) | Under 50 queries is exploratory |

SparkToro's study had about 600 volunteers run 12 prompts through ChatGPT, Claude and Google's AI Overviews and AI Mode. The same list in the same order came up about once in 1,000 runs. The authors note that more research is needed on how many runs are statistically sound.

Profound's study, by Jennifer Zou in July 2026, ran 753 prompts across 7 US platforms for 14 days. Running each prompt once a day gave 78.7% visibility against 80.4% for ten runs a day. Profound also found that which prompts you track matters more than how often you run them. This is the vendor's own research, not an independent result.

The IAB framework adds the floor. It says single-response measurement is not measurement and treats fewer than 50 queries per program as exploratory.

> **Note:** The two studies answer different questions. Profound's figure holds for a rate pooled across hundreds of prompts and many days. SparkToro's warning applies to any single prompt's result, which needs many runs before it means anything.

The decision rule follows from that. What must be large is the number of answers behind each reported figure, which is prompts × runs × days, per engine. LLM Pulse's guide puts it plainly. 200 prompts run once is 200 observations, and the same set run weekly for three months is roughly 2,600.

- Pool answers by week or month before reporting a rate.
- Grow the prompt set before adding runs per prompt.
- Log each run as a row with its own run ID, never as a new prompt.

## How To Deduplicate AI Visibility Data

Deduplicate AI visibility data by fixing one row per prompt, engine and run, collapsing every brand mention inside an answer to a single yes-or-no flag, and only then counting, so a rate's numerator can never exceed its count of answers. Every later step, from SQL to dashboard, depends on that grain being right.

The workflow below works in a warehouse or a spreadsheet. Run the steps in order.

- [ ] Fix the grain at one row per prompt × engine × run, with run timestamp, prompt ID, engine, branded flag and answer status.
- [ ] Give every answer a run ID before export, so repeated exports and joins can be collapsed later.
- [ ] Collapse brand mentions to one yes-or-no flag per answer per brand before counting anything.
- [ ] Split branded prompts and failed or empty answers into their own series.
- [ ] Compute rates per engine first, then pool with the weighting stated.
- [ ] Publish rate, numerator and denominator together in every report.

**Step 1, the grain.** Each row is one answer from one engine for one prompt at one time. If your tool exports one row per mention, that is fine as raw data, but it is not the counting table.

**Step 2, the run ID.** A run ID is the key that lets you count distinct answers. Without it, two identical answers on the same day look like one row, and a duplicated export looks like two.

**Step 3, the flag.** Group the raw rows by run ID and brand, and keep a single 1 or 0 for "mentioned". This is where three mentions in one answer become one.

**Step 4, the split.** Filter branded prompts and failed answers out of the headline rate and report them beside it.

**Step 5, per engine first.** An engine that answers more prompts would otherwise dominate the pooled rate without anyone noticing.

**Step 6, the published figure.** The same rate on a hundred answers and on a few thousand answers are different claims, and the reader needs both counts to tell them apart.

In BigQuery, COUNT(DISTINCT run\_id) gives the exact count of answers. The query below assumes a raw table with one row per run and brand mentioned, and a NULL brand when an answer names no tracked brand.

**BigQuery mention rate per engine and week**

```sql
-- Step 3, one row per answer with a yes/no mention flag
WITH answers AS (
  SELECT
    run_id,
    engine,
    DATE_TRUNC(DATE(run_ts), WEEK) AS week,
    is_branded,
    answer_status,
    MAX(IF(brand = 'YourBrand', 1, 0)) AS mentioned
  FROM `your_project.visibility.raw_mentions`
  GROUP BY run_id, engine, week, is_branded, answer_status
)
-- Steps 4 to 6, non-branded answers that completed, rate per engine
SELECT
  engine,
  week,
  COUNT(DISTINCT IF(mentioned = 1, run_id, NULL)) AS answers_with_mention,
  COUNT(DISTINCT run_id) AS answers,
  SAFE_DIVIDE(
    COUNT(DISTINCT IF(mentioned = 1, run_id, NULL)),
    COUNT(DISTINCT run_id)
  ) AS mention_rate
FROM answers
WHERE is_branded = FALSE
  AND answer_status = 'ok'
GROUP BY engine, week
ORDER BY week, engine;
```

In Google Sheets, COUNTUNIQUEIFS does the same job on a smaller log. It returns the unique count of a range filtered by several criteria, so counting run IDs instead of rows gives answers, not mentions. UNIQUE drops duplicate rows left by repeated exports. The Google Sheets section below has a copyable template.

One more trap sits in the reporting step. Profound's API documentation says averaging daily rates differs from the headline rate over the same window, typically by about 1 to 3 percentage points, because the headline is weighted by daily volume. Pick one method, pooled or averaged, and label it.

## Profound For Collecting Repeated Runs At Scale

Profound reports a headline visibility score that is traffic-weighted across the date range, so the average of its daily rates will not match the headline, typically by 1 to 3 percentage points. That one detail decides how you pull data out of it.

**Profound**

Profound is an AI visibility platform that runs a tracked prompt set across answer engines and reports how a brand appears in the answers. In this workflow it is the collection layer.

**Role in the workflow:** Profound runs prompts daily across engines. The Enterprise plan offers a tailored prompt tracking plan, up to 9 answer engines, all-time history and CSV and JSON exports.

**What it gives for deduplication:** Profound defines visibility\_score in its reports API as the fraction of answers the asset appeared in, which is already an answer-level rate. A headline call with no date dimension is traffic-weighted, while a daily series is unweighted per day. Never average the daily values and call the result the headline. Profound's docs also note that end\_date is exclusive, so check period boundaries.

**Access and permissions:** API keys are created under Settings, Account, API Keys. Each key is a personal access token tied to its creator, requests are attributed to that person, and the key stops reaching the organization's data if the user is removed. Create it from a service-owner account, not an analyst's login, and store it at creation because it cannot be viewed again.

**Limitation:** The trial has no history and no exports, so it cannot feed a warehouse. Profound's once-a-day research is the vendor's own study.

**Cost driver:** Prompts tracked, engines, languages and regions drive the plan. For a side-by-side of coverage and cost, see [Profound vs Peec AI](https://growthtribune.com/profound-vs-peec-ai-which-fits-your-team/).

**Profound pricing**

| Plan | Price | Billing | Notes |
| --- | --- | --- | --- |
| Agency Enterprise (agency tab) | Custom pricing | per custom |  |
| Agency Growth (agency tab) | Custom pricing | per custom |  |
| Enterprise | Custom pricing | per custom |  |
| Trial | Custom pricing | per custom |  |

## LLMrefs For Keyword-Level Tracking With Prompt-Level Rows

LLMrefs tracks keywords rather than prompts and weights results across the fan-out prompts it generates, so rebuild your own rates from its per-prompt, per-engine responses when you need a denominator you control.

**LLMrefs**

LLMrefs is an AI search analytics platform that tracks how brands appear across AI engines, organised around keywords. In this workflow it is a keyword-first collector.

**Role in the workflow:** LLMrefs auto-generates fan-out prompts from each keyword and updates each keyword at least once a week. Its engine list includes ChatGPT, Google AI Overviews, AI Mode, Gemini, Perplexity, Claude, Grok, Copilot, Meta AI and DeepSeek, with CSV export.

**What it gives for deduplication:** The API returns keyword-level shareOfVoice and averagePosition, plus a responses list per prompt and engine with the response text, the brand IDs mentioned and the cited sources. Use the responses list to rebuild one yes-or-no flag per answer instead of trusting the aggregated share.

**Access and permissions:** The API authenticates with an API key, and the llmrefs-js SDK lets you filter responses by engine.

**Limitation:** An independent review notes the keyword-first model gives less say over the exact prompts, and the LLMrefs Score formula is unpublished. Skip averagePosition in reports, since AI rank is not a stable metric.

**Cost driver:** Tracked keywords, and the prompts generated from them, drive the bill. It also appears among [AI visibility tools for B2B SaaS](https://growthtribune.com/best-ai-visibility-tools-for-b2b-saas/).

**LLMrefs pricing**

| Plan | Price | Billing | Notes |
| --- | --- | --- | --- |
| All in One | $79 | per month |  |

## BigQuery For One Row Per Answer

BigQuery's sandbox runs without a credit card or billing account, but it expires tables after 60 days and blocks DML, so a visibility history longer than two months needs a billed project.

**BigQuery**

BigQuery is Google Cloud's serverless data warehouse for SQL analysis. In this workflow it stores every answer row and computes the rates.

**Role in the workflow:** BigQuery is where exports from every collector land at one grain, so engines and tools can be pooled under rules you write.

**What it gives for deduplication:** COUNT(DISTINCT) is the exact count. Google's performance guide recommends APPROX\_COUNT\_DISTINCT for faster queries when approximation is acceptable, so keep it for exploration and use exact counts for any reported rate.

**Access and permissions:** The sandbox needs no credit card or billing account to start.

**Limitation:** Sandbox tables, views and partitions expire after 60 days, and the sandbox supports no streaming, no DML statements and no BigQuery Data Transfer Service. A trend program either enables billing or rebuilds its tables.

**Cost driver:** The sandbox gives a lifetime 10 GiB of storage and the free tier's 1 TiB of query processing per month. Beyond that, query volume and storage set the bill.

**BigQuery pricing**

| Plan | Price | Billing | Notes |
| --- | --- | --- | --- |
| Standard Edition, default, monthly view | $29.20 | per month |  |
| Enterprise Edition, default, monthly view | $43.80 | per month |  |
| Enterprise Plus Edition, default, monthly view | $73 | per month |  |
| Enterprise Edition, BigQuery CUD 1 year, per slot-hour | $0.05 | per usage-based |  |
| Enterprise Edition, BigQuery CUD 3 year, per slot-hour | $0.05 | per usage-based |  |
| Enterprise Edition, default (pay as you go), per slot-hour | $0.06 | per usage-based |  |
| Enterprise Edition, Resource CUD 1 year, per slot-hour | $0.05 | per usage-based |  |
| Enterprise Edition, Resource CUD 3 year, per slot-hour | $0.04 | per usage-based |  |
| Enterprise Plus Edition, BigQuery CUD 1 year, per slot-hour | $0.09 | per usage-based |  |
| Enterprise Plus Edition, BigQuery CUD 3 year, per slot-hour | $0.08 | per usage-based |  |
| Enterprise Plus Edition, default (pay as you go), per slot-hour | $0.10 | per usage-based |  |
| Enterprise Plus Edition, Resource CUD 1 year, per slot-hour | $0.08 | per usage-based |  |
| Enterprise Plus Edition, Resource CUD 3 year, per slot-hour | $0.06 | per usage-based |  |
| On-demand queries (1 TiB and above), per TiB | $6.25 | per usage-based |  |
| Standard Edition, BigQuery CUD 1 year, per slot-hour | $0.04 | per usage-based |  |
| Standard Edition, BigQuery CUD 3 year, per slot-hour | $0.03 | per usage-based |  |
| Standard Edition, default (pay as you go), per slot-hour | $0.04 | per usage-based |  |

## Data Studio (Formerly Looker Studio) For Reporting Without Inflated Totals

Data Studio blends use a left outer join, and when more than one row matches the join key the blend returns more rows than its sources, which is how a dashboard ends up counting the same answer twice.

**Looker Studio**

Looker Studio is Google's reporting and dashboard tool. Google renamed Looker Studio back to Data Studio on 10 April 2026, and existing reports, data sources and users moved over with no action.

**Role in the workflow:** Data Studio is the dashboard over BigQuery or Google Sheets, where leadership reads the rates.

**What it gives for deduplication:** Google advises adding a unique identifier, such as a run ID, to each table's dimensions in a blend so each record stays a distinct row. Pre-joining in BigQuery avoids the problem entirely.

**Access and permissions:** Data Studio Pro licences, which add AI features, enterprise security, management and compliance, are bought from the Google Cloud console or the Google Workspace Admin Console.

**Limitation:** COUNT\_DISTINCT works only on dimensions or unaggregated expressions, never on metrics. The calculation is pushed down to the data source, so results vary with how that system counts, and SaaS API connectors may return approximate counts.

**Cost driver:** Data Studio Pro licences are the cost to plan for when a team needs its enterprise security and management.

> **Warning:** Never blend the raw mentions table with another source in Data Studio. Blend tables that are already at one row per answer, with run ID as a dimension, or the blend will repeat answers.

## Google Sheets For Deduplicating Small Programs

Google Sheets can count answers rather than mentions with COUNTUNIQUEIFS, which returns the unique count of run IDs that meet every criterion you set, such as engine, week and brand mentioned.

**Google Sheets**

Google Sheets is Google Workspace's cloud spreadsheet app. In this workflow it holds the answer log for a small program.

**Role in the workflow:** Sheets suits a pilot near the IAB exploratory threshold of 50 queries, where a warehouse would be overhead.

**What it gives for deduplication:** COUNTUNIQUEIFS counts unique run IDs under several criteria, and every range must have the same number of rows and columns. UNIQUE removes duplicate rows, and with exactly\_once set to TRUE it returns only rows that appear once.

**Access and permissions:** Anyone with edit access can change the log, so keep raw exports on a protected tab and do the counting on a separate one.

**Limitation:** A spreadsheet holds up to 20 million cells or 100MB, and Connected Sheets extracts from BigQuery stop at 500,000 rows or 5 million cells.

**Cost driver:** Google Sheets is a Google Workspace app, so cost follows the team's Workspace plan rather than the size of the log.

**Google Sheets answer counts (name the log columns first)**

```
Remove duplicate rows left by repeated exports
=UNIQUE(run_log)

Answers on ChatGPT in week 42 that mention the brand
=COUNTUNIQUEIFS(run_id, engine, "ChatGPT", week, "W42", mentioned, TRUE, branded, FALSE)

All completed non-branded answers on ChatGPT in week 42
=COUNTUNIQUEIFS(run_id, engine, "ChatGPT", week, "W42", status, "ok", branded, FALSE)

Mention rate
=answers_with_mention / all_answers
```

## How To Combine Search Console AI Data With AI Visibility Tools

[In Search Console's generative AI report, two results from the same site in one AI feature count as a single impression in the chart total](https://support.google.com/webmasters/answer/16984139?hl=en), while the page table counts each page, so the page rows can add up to more than the site total. Search Console measures link impressions, not mentions, so it answers a different question from a visibility tool.

The report counts how many times links to your site were shown in a generative AI feature on Google Search. It covers AI Overviews and AI Mode, excludes Search Labs experiments, carries the usual 1,000-row limit, and its newest data is preliminary. It may not appear at all for sites with few generative AI impressions.

Two counting rules matter for joins. [Google's John Mueller said a link that must be expanded to be seen only counts when users expand it](https://www.searchenginejournal.com/googles-mueller-explains-how-ai-search-impressions-get-counted/580491/), and he has also said all links within an AI Overview share a single position. Position in that report is therefore not a ranking inside the answer.

> **Note:** Keep Search Console AI impressions as their own series beside the tool rates. Never add impressions to tool mentions, because one is a link shown to real searchers and the other is a sampled answer.

To combine them without double-counting:

1. **Take the site total from the chart.** Use the property-level chart figure for the headline, not the sum of page rows.
2. **Join at the page or query level.** In BigQuery, join Search Console page rows to the pages your tracked prompts cite, so each page keeps its own impressions.
3. **Match the periods.** Align the Search Console date range with the tool's pooled period, and treat the newest days as preliminary.
4. **Report side by side.** Show citation rate from the tool and AI impressions from Search Console in one view, each with its own denominator.

The gap between the two is useful. A page cited often in sampled answers but with few AI impressions may sit behind an expand, which Search Console only counts when users open it.

## How To Tell A Real AI Visibility Change From Noise

Treat an AI visibility change as real only when it is larger than the range your own stable weeks show, because IAB's framework tells buyers to establish a variability baseline before acting on period-over-period change. A single week's move is usually inside that range.

**<1 in 100 runs returned the same brand list** (January 2026, 2,961 runs of 12 prompts by about 600 volunteers): ChatGPT and Google's AI almost never repeated the same list of brands, which is why any single reading is a sample, not a result. Source: [NEW Research: AIs are highly inconsistent when recommending brands or products; marketers should take care when tracking AI visibility - SparkToro](https://sparktoro.com/blog/new-research-ais-are-highly-inconsistent-when-recommending-brands-or-products-marketers-should-take-care-when-tracking-ai-visibility/).

The IAB framework also cites research on Perplexity, ChatGPT and Gemini citation patterns finding that differences between brands are often within the range of normal random variation. Profound's own study adds that platform drift cannot be measured away, however often you run prompts.

Build the baseline in four steps:

1. **Collect several stable weeks.** Use weeks with no content launch, campaign or known engine change.
2. **Measure the spread.** Record the highest and lowest weekly rate per engine, with the answer count for each week.
3. **Compare the new period to the band.** A rate inside the band is noise until proven otherwise.
4. **Wait one period.** Act when the move exceeds the band and holds into the next period.

The decision rule is simple. Read the trend across periods, not single readings, and report the band next to the rate so leadership sees the change and its normal range together. Keep the band per engine, since one engine's swings say nothing about another's.

## Common Mistakes That Double-Count AI Visibility

Adding every mention across engines into one total double-counts AI visibility, because an answer that names a brand three times then weighs more than an answer that names it once. The fix is the answer-level rule from the deduplication workflow, with one yes-or-no flag per answer before anything is counted.

> **Warning:** Each of these mistakes inflates or distorts a rate, and each has a fix from the workflow above.

- **Summing mentions across engines into one share.** Compute an answer-level rate per engine, then pool with the weighting stated.
- **Averaging daily rates and calling it the period rate.** Profound's docs show the two differ, typically by 1 to 3 points. Pool answers or label the average.
- **Mixing branded and non-branded prompts.** Branded prompts lift the headline, so report them as a separate series.
- **Summing Search Console page rows.** Take the property total from the chart.
- **Quoting an AI "rank".** The SparkToro study found ranking position in AI is not a reasonable metric. Report visibility percentage instead.
- **Comparing two vendors' scores without their definitions.** A traffic-weighted score and an unpublished formula do not measure the same thing. Check the definitions before comparing [AI visibility platforms](https://growthtribune.com/best-ai-visibility-platforms/) on their headline numbers.

## FAQ

**Is share of voice the same as mention rate?**

No. Share of voice and mention rate are different metrics, because mention rate divides answers that mention you by all answers while share of voice divides your mentions by all tracked brands' mentions. Share of voice also depends on the prompt set and two counting choices the IAB framework says providers must disclose.

**Can you measure AI visibility in Google Sheets alone?**

Yes, for a small program. Sheets can log answers and count unique run IDs with COUNTUNIQUEIFS, which handles deduplication. The ceiling is size, at 20 million cells per spreadsheet and 500,000 rows for Connected Sheets extracts, so a program with many prompts, engines and daily runs belongs in a warehouse.

**Does a citation count as a mention?**

No. Count citations and mentions as separate rates over the same answers. The IAB framework defines a citation as a linked or named reference and excludes implied citations. A brand can have a high mention rate and a low citation rate, and that gap is itself a signal worth tracking.

## Sources

- [Measuring Visibility in the AI Era (IAB, August 2026)](https://www.iab.com/wp-content/uploads/2026/07/IAB_Measuring_Visibility_in_the_AI_Era_August_2026-1.pdf), iab.com
- [NEW Research: AIs are highly inconsistent when recommending brands or products; marketers should take care when tracking AI visibility - SparkToro](https://sparktoro.com/blog/new-research-ais-are-highly-inconsistent-when-recommending-brands-or-products-marketers-should-take-care-when-tracking-ai-visibility/), sparktoro.com
- [Generative AI performance report (Search) - Search Console Help](https://support.google.com/webmasters/answer/16984139?hl=en), support.google.com
- [Google's Mueller Explains How AI Search Impressions Get Counted - Search Engine Journal](https://www.searchenginejournal.com/googles-mueller-explains-how-ai-search-impressions-get-counted/580491/), searchenginejournal.com

---
Source: https://growthtribune.com/how-to-measure-ai-visibility-without-double-counting/
