All documentation

Optimize

Source comparison

Compare domain citation rates across equal periods and read owned-source share with explicit counts, recorded channels and missing-data limits; save domain or exact-URL watchlists and subscribe to observed citation gains and losses.

Source comparison showing period counts, owned-source share and domain movements

Illustrative development data is shown in this screenshot.

Compare equal periods

Open Source comparison from the Comparison tab under Sources in the sidebar. The date range chip in the filter bar sets the days per period (7, 28 or 90) immediately, preserving the other selections already applied; after you apply an end date it names it, for example "7 days to Aug 1". Choose an end date, a recorded collection channel, watchlist and sort order, then select Compare periods to apply those fields. The default is two adjacent 28-day periods ending yesterday on the collection server's calendar, not your device's calendar. Both endpoints are included. Today is excluded because it is still in progress. An elapsed day does not guarantee collection finished; late results can still arrive. You can select an earlier end date to review historical results (api/services/source_comparison.py#source_comparison_for_project). The filter bar's engine, tag, country, persona and language narrow both periods, and with an engine chosen the channel list offers only that engine's channels (api/routers/source_comparison.py#ACCEPTS).

The current period ends on the date you select. The previous period has the same length and ends the day before the current period starts. For example, seven days ending September 19 compare September 13–19 with September 6–12. Dates, counts and denominators are shown for both periods.

Each comparison keeps the recorded provider, platform, surface, collection method and model together. Different models and surfaces are separate options, including channels that appear in only one period. Missing provenance stays unknown. Changing the provider catalog does not relabel the recorded surface or model. A channel that is no longer in the selected dates resets to the first available option; check the displayed selection after changing dates. API observations do not reproduce consumer interfaces.

All project members, including viewers, can read this screen on all plans. It uses saved records without new collection, scraping or model calls (api/routers/source_comparison.py#source_comparison).

Saved source watchlists

Expand Saved source watchlists to create a named group of Domains or Exact URLs. Owners and editors manage lists and their project-level subscriptions; all members can read and filter them on all plans. Each project can save 20 watchlists, each with 100 unique domains or URLs (api/schemas/source_watchlist.py#MAX_WATCHLISTS). Existing domain lists keep their members and start with both notification options off.

Enter exact domains from Source movers or Domains, one per line or separated by commas. For a URL list, enter full HTTP(S) URLs, one per line, exactly as they were recorded. URL path and query case are preserved; a comma inside a URL is not a separator. Only sources from this project's completed citation history can be added. Wildcards and arbitrary uncited URLs are not supported. Empty lists are allowed. A list's type cannot change; create another list to switch between domains and URLs (api/services/source_watchlist.py#save_watchlist).

Matching is exact, and most screens do not show the recorded URL. Screens that group cited pages, including Watchlist evidence, Source types and source mentions, display a normalized URL: a trailing slash, a fragment and tracking parameters are removed, the query is sorted and percent-encoding is rewritten (api/services/urls.py#normalize_url). Copying from those screens can therefore produce a URL that is refused, most often because of a trailing slash.

The recorded URL is shown in the saved members and Source movers rows of a URL list you already have, in a saved watchlist alert, and in the Cited URLs export on a paid plan. On a plan without exports, build a first URL list from the URL exactly as the engine cited it, including any trailing slash. A URL that does not match a recorded one is refused rather than matched loosely.

Select Create watchlist or Save watchlist. Concurrent edits refuse stale versions; reload to review the current list. Existing members can remain after their citation history disappears. Deletion requires the confirmation checkbox and removes the list, not observations or saved alert evidence.

Choose the list in Source watchlist, then Compare periods. URL lists show each exact saved page separately, even when pages share a domain. Saved members with no citations remain visible. Output denominators and domain-based owned-source share still cover the full channel. Current membership applies to historical windows; these lists are not historical membership snapshots.

Subscribe to citation gains and losses

Within a list, select Notify the team in-app, Include in the owner's alert email, or both, then save. Both options default off. These are project-level subscriptions, managed by owners and editors. In-app notices go to the active owner and active teammates. Email goes only to the active owner and requires the owner's alert-email entitlement and enabled daily/weekly cadence. Watchlist email selection is separate from the four visibility alert categories in Email preferences.

The existing watchdog compares two adjacent seven-day periods ending yesterday, once per elapsed collection-server date. It keeps provider, platform, surface, method and model separate. Each period needs 30 completed outputs and five observed execution dates. Missing or thinner data is skipped (api/services/source_watchlist_alerts.py#evaluate_subscriptions).

  • Gain: no saved appearances in the previous period and at least one now.
  • Loss: at least one saved appearance previously and none now.

A source counts once per completed output, regardless of duplicate citations. This detects appearance/disappearance, not every rate fluctuation. There is at most one gain and one loss alert per list/channel per evaluation. Repeated source/direction/channel events for that list are suppressed for seven days, including after edits. The last evaluated period end appears in the editor. Late results are reconsidered on the next date; missed days are not backfilled.

Open an alert from Alerts or Notifications for its saved source counts, denominators, dates and recorded channel. The live-comparison link may show newer data or an edited list. A deleted list leaves its saved alert readable to current project members. Editing a list invalidates its queued email; disabling email or deleting the list also cancels pending delivery. Existing email retry and seven-day digest-window limits apply.

URL watchlist with citation subscriptions

Combined watchlist evidence

After selecting a watchlist, expand a source under Watchlist evidence to inspect its citation movement, prompt reach, consistency and influence together. Influence uses the comparison's current period and selected channel. Reach counts prompts citing the domain or exact saved URL; consistency is the mean fraction of each reached prompt's completed outputs citing it; influence is reach multiplied by that fraction. Missing observations remain unavailable, and small samples are provisional (api/services/source_evidence.py#attach_source_evidence).

Saved page text is inspected for literal current own-brand and competitor aliases. Up to 20 cited URL records per domain, ordered by citation count then URL, are normalized for inspection. URL lists inspect only the selected page. Each page shows its fetch time and matches. Unknown or unsuccessful scrapes do not become negative matches. Text is limited to 100,000 characters per page; longer text is marked partial, and no match within that portion leaves own-brand presence unknown. Your own domain is excluded from page checks.

These are current saved texts and current aliases even when comparing a historical period. They do not prove the page mentioned the brand at collection time. The screen uses live reads, so collection finishing during a request can change observations between summaries and supporting evidence. No new scrape, model call or notification is triggered.

Watchlisted source movement, influence and saved-page evidence

Owned-source share

An appearance is one domain cited in one completed output. Three links to one domain in the same output count as one appearance. Two different domains in that output count as two. Ownership uses the project's current domain, not a brand-name mention or a manually labeled source category.

Owned-source share = own-domain appearances / all domain appearances × 100.

For example, four own-domain appearances among twenty domain appearances are 20%. The screen shows both counts and the change from the previous period in percentage points. Repeated links within one output cannot inflate this share.

This is different from your own-domain citation rate, which divides by completed outputs, and from the tracked-competitor snapshot share on Competitors. It includes every cited domain in the selected channel and dates, even when it is not a tracked competitor.

Source movers

With All cited domains selected, the list includes every domain with a saved citation in either period, so sources that disappeared remain visible. Each row shows:

  • Previous and current counts of completed outputs citing the domain.
  • Each count divided by that period's completed outputs, as a percentage.
  • Current rate minus previous rate, in percentage points (pp).

For example, 2 of 10 outputs followed by 6 of 20 outputs is 20% followed by 30%, a +10 pp change. This accounts for different collection volumes, but does not hold the prompt or country mix fixed.

Largest changes orders by the absolute change in unrounded rates. You can also put gains first, losses first, or the highest current rate first. Ties use current output count, then domain name and ID. Sorting does not filter out the other direction. Results are paginated, 25 sources at a time; the owned-share summary and denominators always cover the full comparison. Submitting Compare periods or changing the date range starts again at page one. An out-of-range page resolves to the last available page. Rates and changes round independently to one decimal, so subtracting displayed rates can differ from the displayed change by 0.1 pp (api/services/source_comparison.py#source_comparison_for_project).

Zero, unavailable and provisional

A rate is zero when the period contains completed outputs but none have a saved citation for that domain. It describes the records collected; it does not establish that an engine never cited the source or that citation capture was complete. The number of outputs with saved citations is shown separately.

With no completed outputs, that period's rates and rate changes are unavailable. With no domain appearances, owned-source share and its change are unavailable even when outputs were collected. If other domains appeared but yours did not, owned-source share is a measured zero.

Fewer than 30 completed outputs marks a period provisional (api/services/brand_metrics.py#MIN_OBSERVATIONS). This is a sample-size cue, not a statistical significance test or guarantee of reliable citation coverage. Failed and in-flight outputs are excluded; completed outputs whose brand sentiment has not been analyzed still count. Paused prompts and targets retain their history. Citation dates use the parent execution's stored collection date, which follows the server-calendar convention. This view does not convert dates to UTC.

Limits of the comparison

Prompts and countries are pooled within each channel and can change between periods. Prompt counts are shown, but this is not a fixed-cohort experiment and does not establish why a source moved. No source authority, causal influence, retrieval coverage or market-wide trend is inferred.

These are live saved records, not frozen reports. Late collection or corrections can change historical values. Source rows and their denominators come from one database statement per page; moving between pages can see newer data. The customer API and MCP retain their existing datasets; this screen does not add a new API-key or MCP tool contract.

  • Domains: citation counts, source reach and consistency over the filter bar's window and filters.
  • Source types: project-specific categories and formats.
  • Social sources: the same equal-period, percentage-point comparison, applied to social, community and review accounts.
  • Metrics defined: other citation and brand denominators.

Last verified 2026-09-26

Start monitoring your AI visibility.

See how AI search engines talk about your brand.

Free to start. No credit card required.