Methodology — how MaxQ measures

Every number in the MaxQ app and in MaxQ reports comes from the same governed metric registry. This page describes what we measure, how we measure it — and, just as important, what we cannot measure.

Metric registry version 1 · registry hash 59e1b3169776… — every displayed number is bound to this revision.

Sampling and panel

MaxQ measures a fixed, versioned panel of questions: each tracked question is a localised prompt variant (wording + language + target country) observed on a declared schedule — one base observation per variant, surface and day, plus a small pre-declared sentinel subset with extra repetitions. Exploratory questions never silently enter the comparable baseline; the panel version is disclosed next to every chart.

Coverage and honest missing data

A collection failure is missing data, never a zero. Every displayed metric carries its denominator: valid answers out of planned slots, and the full status mix (valid answers, no-overview results, refusals, failures) is shown beside conditional metrics so exclusions cannot inflate apparent reach. Below the governed minimum sample the number is still shown, but marked descriptive only.

Citation ownership and sources

Citations are classified by who controls the source: your verified domains, competitor-owned sources, MaxQ-controlled sources, independent third parties that actually discuss your brand, and unrelated third parties. MaxQ-controlled and competitor-owned citations are shown separately — they are never presented as earned independent authority.

Comparisons and the fixed competitor set

Share of voice is measured against a fixed, versioned competitor set bound to your panel version; the set’s version and hash are disclosed. Changing the set opens a new comparison series — old and new sets are never blended. Model, provider or analysis changes open a comparability event: trends across the break are suspended for review, not silently joined.

Weighting and composites

Within a fixed stratum (surface, locale, panel and time window) valid replicas are averaged inside each question cell before the frozen panel weight applies, so extra repetitions never dominate. A cross-surface composite is opt-in, uses pre-declared equal surface weights and shows missing surface weight instead of redistributing it — a composite is never market share.

Uncertainty and its scope

Reported intervals come from a cluster bootstrap over prompt families and time blocks (2,000 draws, 95% level) that preserves family clustering and temporal structure. They describe uncertainty about the measured panel — prompt-panel and temporal variation — not the full population of real user searches or personalised answer distributions, which MaxQ cannot observe.

Change detection and alerts

Trend alerts are evaluated inferentially on a 4-week current window against a 8-week trailing baseline of comparable ISO weeks — a single week is descriptive only and can never alert. An alert additionally requires the governed minimum sample (at least 30 prompt families, 7 observed days and 90% weighted coverage per window), a persistent change of at least 10 percentage points across that window, a significance test with false-discovery control and a confirmatory run. The 10-point floor is a necessary filter, not a detection promise: the measured minimum detectable effect (MDE) for this design is 20 percentage points at typical week-to-week noise (15 points at zero weekly noise, 34 points at high noise) — smaller real changes may remain unconfirmed; descriptive changes are still shown honestly.

Result states instead of zeros

Missing data is never displayed as zero: a zero denominator produces N/A, insufficient sample produces “insufficient evidence”, provider or model changes produce “comparability suspended”, and provisional or restated values are labelled until final. What you see is either a real measured value or an explicit state.

What MaxQ cannot measure

MaxQ measures what AI assistants answer to a governed question panel. It does not measure:

  • Real-user demand — what people actually ask assistants, how often, or how much traffic it drives.
  • Personalised answers — what a signed-in user with a history sees; providers do not expose it.
  • Market share or reach — mention and citation rates describe the measured panel, never your audience.
  • Causality — a change in visibility is an observation, not proof that a specific action caused it.

Metric reference

Every registered metric, its eligible population and its N/A rule — generated from the governed metric registry.

Mention rate

Share of valid answers that mention the brand, deduplicated per answer and averaged inside each prompt cell before weighting.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
answer_cell_coverage, capture_coverage, status_distribution

Owned citation rate

Share of valid answers citing a domain verified as owned by the brand.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Competitor-owned citation rate

Share of valid answers citing a domain owned by a competitor.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

MaxQ-controlled citation rate

Share of valid answers citing a source controlled by MaxQ or the customer’s delivery network; shown separately, never as earned authority.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Independent-entity citation rate

Share of valid answers citing a third-party page verified to discuss the brand.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Unrelated third-party citation rate

Share of valid answers citing a third party that does not discuss the brand.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Share of voice (fixed set)

The brand’s weighted mentions divided by all deduplicated mentions across the frozen competitor set; the set version is always shown.

Unit:
share
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(set_mention_weight) == 0
Always shown with:
mention_rate, status_distribution, capture_coverage

AI Overview trigger rate

Valid eligible Google results that showed an AI Overview out of all valid eligible results, including non-triggers.

Unit:
ratio
Eligible population:
aio_eligible
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(eligible_result_weight) == 0
Always shown with:
aio_conditional_presence, aio_unconditional_presence, status_distribution

AIO presence when shown

Brand mentions inside captured AI Overviews out of captured AI Overviews; always read together with the trigger rate.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(analysed_overview_weight) == 0
Always shown with:
aio_trigger_rate, aio_unconditional_presence

AIO presence overall

Brand mentions inside AI Overviews out of all valid eligible Google results.

Unit:
ratio
Eligible population:
aio_eligible
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(analysed_eligible_weight) == 0
Always shown with:
aio_trigger_rate, aio_conditional_presence

Recommendation share

Share of valid answers with an explicit positive recommendation under the separately evaluated rubric; mere occurrence is not a recommendation.

Unit:
share
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Ordered position

Mean rank when an actual ordered list exists; empty for prose without a real order.

Unit:
rank
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(ordered_answers) == 0
Always shown with:
reciprocal_rank

Reciprocal-rank prominence

1/rank for an ordered recommendation and zero when absent, over the labelled ordered-answer population.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(ordered_answers) == 0
Always shown with:
ordered_position

Mention sentiment

Distribution of mention-level sentiment labels; a brand that is not mentioned is N/A, never neutral.

Unit:
distribution
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(labelled_mentions) == 0
Always shown with:
status_distribution

Factual accuracy ratio

Verified supported claims out of claims with sufficient authoritative evidence; the uncheckable share is shown separately.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(checkable_claims) == 0
Always shown with:
factual_uncheckable_share, status_distribution

Uncheckable claim share

Share of extracted claims that cannot be checked against authoritative evidence.

Unit:
share
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(claims) == 0
Always shown with:
factual_accuracy_ratio

Status distribution

The full mix of observation statuses next to every conditional metric, so exclusions can never inflate reach.

Unit:
distribution
Eligible population:
all_statuses
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
none (diagnostic)
N/A when:
sum(observations) == 0
Always shown with:
capture_coverage, answer_cell_coverage

Refusal rate

Real refusals or non-answers out of completed captures; a refusal is disclosed, never a failed collection.

Unit:
ratio
Eligible population:
completed_captures
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(completed_captures) == 0
Always shown with:
status_distribution, capture_coverage

Capture coverage

Completed valid captures (answers, no-overview results and refusals with verified locale and valid parsing) out of planned supported slots.

Unit:
ratio
Eligible population:
completed_captures
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(planned_supported_slots) == 0
Always shown with:
answer_cell_coverage, status_distribution

Answer coverage

Weighted share of planned prompt cells that produced a valid answer.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(planned_eligible_weight) == 0
Always shown with:
capture_coverage, status_distribution

Verified-locale share

Share of completed captures whose effective locale could be verified.

Unit:
share
Eligible population:
capture_disclosure
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(locale_checked) == 0
Always shown with:
status_distribution, capture_coverage

Cited-source share

Share of valid answers carrying at least one citation.

Unit:
share
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(valid_answer_weight) == 0
Always shown with:
status_distribution

Replica agreement

How often repeated observations of the same cell agree; sentinel replicas feed this metric only.

Unit:
ratio
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
sum(replica_pairs) == 0
Always shown with:
status_distribution

First seen

First captured date on which the brand was observed.

Unit:
timestamp
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
none (diagnostic)
N/A when:
eligible_mentions == 0
Always shown with:
last_seen

Last seen

Most recent captured date on which the brand was observed.

Unit:
timestamp
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
none (diagnostic)
N/A when:
eligible_mentions == 0
Always shown with:
first_seen

Composite (equal weights)

Opt-in view averaging surfaces with predeclared equal weights; missing surface weight is shown, never redistributed.

Unit:
share
Eligible population:
answer_metrics
Minimum sample:
30 families · 7 days · 90% coverage
Interval:
cluster_block_bootstrap · 2000 draws · 95% level
N/A when:
eligible_surfaces == 0
Always shown with:
status_distribution, capture_coverage

Where measurement is supported

The current capability state per surface and collection method from the capability truth feed — the same source that governs what MaxQ may claim.

SurfaceMethodStatusEffective from
google_ai_overviewsconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_overviewsapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_overviewsconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_overviewsapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_overviewsconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_overviewsapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_overviewsconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_overviewsapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_modeconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_modeapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_modeconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_modeapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_modeconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_modeapi_experimentdisabled2026-09-15T00:00:00.000Z
google_ai_modeconsumer_captureunresolved2026-09-15T00:00:00.000Z
google_ai_modeapi_experimentdisabled2026-09-15T00:00:00.000Z
chatgpt_searchconsumer_captureunresolved2026-09-15T00:00:00.000Z
chatgpt_searchapi_experimentdisabled2026-09-15T00:00:00.000Z
chatgpt_searchconsumer_captureunresolved2026-09-15T00:00:00.000Z
chatgpt_searchapi_experimentdisabled2026-09-15T00:00:00.000Z
chatgpt_searchconsumer_captureunresolved2026-09-15T00:00:00.000Z
chatgpt_searchapi_experimentdisabled2026-09-15T00:00:00.000Z
chatgpt_searchconsumer_captureunresolved2026-09-15T00:00:00.000Z
chatgpt_searchapi_experimentdisabled2026-09-15T00:00:00.000Z
perplexityconsumer_captureunresolved2026-09-15T00:00:00.000Z
perplexityapi_experimentdisabled2026-09-15T00:00:00.000Z
perplexityconsumer_captureunresolved2026-09-15T00:00:00.000Z
perplexityapi_experimentdisabled2026-09-15T00:00:00.000Z
perplexityconsumer_captureunresolved2026-09-15T00:00:00.000Z
perplexityapi_experimentdisabled2026-09-15T00:00:00.000Z
perplexityconsumer_captureunresolved2026-09-15T00:00:00.000Z
perplexityapi_experimentdisabled2026-09-15T00:00:00.000Z

Methodology changelog

  • Version 1 · 2026-09-20

    Initial governed metric registry: 26 metrics with their populations, minimum samples, interval policy and comparability rules — bound to registry version 1.