DocsShopping

Engine coverage

Which AI engines put products on your shelf today, which are wired and waiting on vendor data, and how the coverage strip tells "not sampled" apart from "awaiting vendor data".

Shopping data no longer comes from one engine. This page says exactly which engines carry product carousels into MentionFlow today, which are wired but waiting on their data vendor, and how to read the Engine coverage strip on /shopping — including the difference between its two kinds of "no data".

Where shopping data comes from today

EngineStatus
ChatGPTCollecting today
Google AI OverviewsCollecting today
Google AI ModeCollecting today
CopilotCollecting today
PerplexityWired — awaiting vendor data
GeminiWired — awaiting vendor data

Claude, DeepSeek, Grok, and Mistral answer through model APIs with no shopping surface, so they never appear here.

"Wired — awaiting vendor data" means MentionFlow's extraction is ready but the data vendor's answer records carry no product fields yet: Perplexity's record has a shopping field that has never arrived populated, and Gemini's record has no product field at all. A request for both is filed with the vendor. The day a populated record arrives, it parses and shows up — no software update needed. Until then those engines show an em-dash, never a fake zero.

All shopping metrics — the leaderboard, totals, and trend — blend every collecting engine into one view of the shelf. The coverage strip is the only per-engine breakdown.

Who it's for

  • Anyone reading the shopping numbers who wants to know which engines the shelf actually represents before quoting it.
  • Teams deciding which engines to sample — the strip shows when a shopping-capable engine isn't being collected at all, which a monitor change fixes.

Try it: read the coverage strip

  1. Open Shopping. Near the top is a strip headed "Engine coverage", captioned "carousels captured per engine — last 7 days" (following your selected range).
  2. Each engine cell shows one of three states:
    • A number with "carousels captured" — the engine was collected this window and this is how many carousels it rendered. A 0 here is a real observation: the engine ran on your prompts and showed no carousel.
    • An em-dash with "not sampled" — the engine can deliver shopping data, but none of its runs were collected this window. Enable the engine in a monitor to start capturing.
    • An em-dash with "awaiting vendor data" — collection is wired, but the data vendor's payload carries no product data yet (Perplexity and Gemini today).
  3. Hover any cell for the full explanation of its state.
  4. If you have filtered the page by category or merchant, the caption appends "filters not applied" — the strip always shows total coverage, so a narrow filter can't make an engine look silent.

Those two em-dash states are deliberately distinct: "not sampled" is fixable by you (turn the engine on in a monitor); "awaiting vendor data" is not (the vendor has to ship the field). Neither is a zero.

The honesty gates

Two rules keep multi-engine carousels honest:

  • Google products only count next to a real AI answer. Google's results can include ordinary Shopping modules that have nothing to do with AI. MentionFlow counts AI Overviews shopping blocks — and the product carousel beside them — only when the result actually rendered an AI Overview. A plain Google Shopping module on an answerless results page is excluded by design, because counting it would credit the AI shelf with placements the AI never made.
  • Copilot cards must show commerce evidence. Copilot's product field also fires on non-shopping answers as plain entity mentions. A record only counts as a carousel when its cards carry real commerce evidence — a price or a rating — so a list of name-drops can never fabricate a shelf.

How it's computed

  • Extraction is engine-aware: each channel's payload format has its own parser, with a generic fallback shared by all engines. The per-engine status (collecting today / awaiting vendor data / no shopping surface) is a single coverage map used by the strip and the API alike.
  • A cell's count is null exactly when unobservable — the engine wasn't sampled, or the vendor payload is missing — and a number otherwise. Null is not zero; a 0 is a measured absence. This is the same rule as everywhere else in data honesty.
  • The strip ignores page filters on purpose (it is computed before category/merchant filtering), which is what the "filters not applied" caption is telling you.
  • Structured prices from the new channels (an exact amount plus currency) are stored as-is. The verbatim price text stays empty when an engine sends only numbers — a display price is then derived from the structured amount, and when nothing was sent at all the price stays unknown, never guessed.

Limits

  • Perplexity and Gemini shopping stay em-dashes until their vendor payloads carry product data.
  • Live workspaces only. The demo shows labelled sample data.
  • Shopping overview — how carousels are captured and matched to your catalog.
  • Shopping analytics — the blended leaderboard and trend the strip sits above.
  • Monitors — where you enable an engine that shows "not sampled".
  • API resources — the channel_coverage block on GET /api/v1/shopping.
  • Data honesty — the null-is-not-zero rule the strip follows.