All documentation

Troubleshooting

Empty screens, zero citations, failed runs, and stale data.

Performance is empty

If Performance shows no data, the usual cause is not a broken integration. It is a data window that does not reach back far enough to include your most recent import.

Both Performance pages (Search and Traffic) default to a 28 day window when the URL carries no ?days= parameter. That default comes from windowDaysFrom(url, max, fallback = 28) in platform/frontend/src/lib/format.js: fallback = 28 is what applies with no parameter, and both pages call the function as windowDaysFrom(url, 180), so ?days= can widen the window as far as 180 days. 180 is the ceiling on how far you can widen the window, not the width you see by default: if your most recent import lands outside the default 28 days but inside 180, adding ?days= and a larger number is the actual fix.

In steady state, imports run on a schedule rather than the moment you load the page: Search performance data refreshes daily at 05:00 UTC through discoveredby-cli@enqueue-gsc-import.timer, and Traffic performance data (Google Analytics) refreshes daily at 06:00 UTC through a separate discoveredby-cli@enqueue-ga4-import.timer.

Mapping a property to a project is the exception to that schedule. Mapping queues that project's first import there and then rather than deferring it to the next scheduled run (_enqueue_initial_import in platform/backend/api/routers/integrations.py), so a freshly mapped property does not sit waiting on the timer for its first pull. If that immediate enqueue is lost, the next scheduled run picks the property up anyway: the daily fan-outs reach a project through its mapped properties, and the import widens to a 180 day backfill for any property whose history has never been pulled (_enqueue_ga4_for_eligible_projects and _enqueue_gsc_for_eligible_projects in platform/backend/api/tasks.py). For a mapped property, then, a missed enqueue costs a delay of a day, not a lost import.

Connecting is not the same as mapping, and that difference is the other common cause of an empty Performance screen. Connecting queues a discovery pass that maps a property to a project only where the property's own hostname exactly equals one of your project domains and only where that match is unambiguous (sync_and_automap in platform/backend/api/services/integrations/google/ga4_automap.py, sync_and_automap_gsc in the sibling gsc_automap.py, both matching through match_property_to_project in automap_common.py). A subdomain-only match such as a shop.example.com stream against an example.com project, no match at all, or an ambiguous one, leaves the property unmapped on purpose rather than guessing. An unmapped property is in no fan-out's scope, so nothing imports for it and no later run heals it: if Performance has been empty since the day you connected, open the integrations settings and map the property to the project by hand. That mapping is what starts the first import.

Widening the window is still the fix when the most recent successful import, whichever kind, lands outside the default 28 days.

No citations yet

Being named in AI answers without yet being cited as a source is a normal, common starting state, not a sign anything is broken.

A mention and a citation are different things: a mention is your brand named in an answer, a citation is your domain linked as a source for that answer, and you can be mentioned without being cited (see Key terms). An engine can describe your brand from what it already knows without pulling one of your pages into the answer at all, so winning a mention is often the earlier, easier outcome, and a citation can take longer to follow.

If citation rate reads zero while your collected answer count is not zero, that is a real zero, not a broken measurement: see Metrics defined for how a genuine zero differs from no data. Domain coverage, a separate number on that same page, catches the weaker signal of an engine reading one of your pages without linking to it. Zero citations alongside domain coverage above zero means retrieval without citation, not a bug.

A run failed

Where to look: each prompt's run history lists every execution and its status, and a failed execution shows a plain-language reason drawn from a closed, safe set (timeout, rate limited, provider error, or internal error) rather than a raw error string.

What a failed run does to your numbers: nothing, quietly. Every metric on Metrics defined is built from executions whose status is completed, whether it counts those executions directly or counts the mentions attached to them. A failed execution is never completed, so it never contributes an answer, a citation, a retrieval, or a mention to any of those counts. A run that failed to get an answer at all does not drag your visibility, citation rate, share of voice, or any other metric down: it is absent from the count, not counted as a miss.

My numbers moved but nothing changed on my site

Two things that have nothing to do with your website can move your numbers, and both are expected.

Adding a tracked competitor changes share of voice, even though nothing in the answers themselves changed: share of voice divides by mention records of every tracked brand, so widening your competitor roster widens that denominator (see Metrics defined). The competitor's mentions were already happening; your project just started counting them.

The other cause is the engines themselves. Each tracked prompt runs again on its own schedule, and an engine's answer to the same question can differ from one run to the next even when nothing about your site, your competitors, or the prompt has changed. That day-to-day movement is exactly what volatility measures (see Metrics defined). A single day's swing is not, by itself, evidence that anything is different on your site.

Competitor shares do not add up to 100 percent

On the Competitors screen, the hero figure and the bar chart can stop summing to 100 percent after you pause a competitor, and that is expected, not a bug.

Pausing hides a competitor's bar, but the shared total those bars divide is read with no active filter, so a paused competitor's citations stay folded into the total with no bar left on screen to show for them (see Domain-citation share of voice for the exact mechanism). The visible shares are short by whatever that hidden competitor accounts for. Removing the competitor instead of pausing it corrects this: a removed competitor's row, and its citations, drop out of the total on the next load, so the visible shares sum back to 100 percent.

"By brand mentioned", the other share-of-voice figure on the same screen, does not self-correct either way: pausing and removing both leave a competitor's past mentions counting for as long as they sit inside the trailing 30-day window (see Share of voice for why).

A number says no data instead of zero

A metric reading no data is not the same as a metric reading zero, and the product never blurs the two. See How to read any number here on Metrics defined for what no data means and why, and that page's own per-metric sections for which population each number divides by. An empty population is what produces no data; a measured population that happens to contain none of what you are looking for is what produces a real zero.

Last verified 2026-08-10

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.