The layout
The page has five tabs in the left rail: Overview, Capture, Identity, Delivery, and Match quality. Overview holds the four stage cards and To fix. Each other tab holds one stage. The top row has three controls.
The range changes the counts and the To fix list. It does not change how we judge freshness. Freshness always uses the last 7 days, so a 24-hour view never reports a quiet source as broken.
Your choice is kept in the URL, so a shared link shows the same window.
The four stages
Each stage card shows one number, such as
6 of 8 sales from ads matched. Select a card to open its tab.
To fix
This list holds things in your setup, most costly first. Each item says what is wrong, what it cost, and has a button named for the fix, such as Reconnect TikTok or Check Shopify setup. Items that need no action from you sit in No action needed. These are platform-side errors, faults on our side, and behavior we expect, such as a source that is connected but has not sent its first event. The section is hidden when there is nothing to fix.Capture
One row per source. A Shopify store shows two rows: the storefront (the App Embed) and orders (webhooks).
We judge silence against the source’s own rhythm over the last 7 days, not against a clock. A source that goes quiet every night is not reported as broken at 2 AM.
A source needs 50 events, 24 active hours, and 72 hours of history before we judge it. Below that it reads
Sending, not judged. That is not a problem.
The liveness signal is the independent proof the source is alive.
A source whose connection lost access reads
Needs a look whatever its events say. Reconnect it in Sources.
Identity
One card per revenue source. The headline counts only sales we can tell came from an ad visitor. For Shopify, that is an order whose landing page carried a click ID or a paid UTM, or an order linked to an ad visitor. Organic orders are left out, so an unmatched organic order never lowers the number. Stripe payments and app-store subscriptions carry no ad evidence unless they were linked, so their headline counts all payments. Not matched lists each reason with a count. Hover a reason to read the code and the explanation.
Imported order history and test orders are excluded.
Delivery
One row per ad platform and origin, such asMeta · Website and Meta · App.
Hover a status to read each outcome with its
error_type. Every skip and failure is one of three kinds.
An unknown code is treated as a problem until we classify it. A connection that needs reconnecting reads
Needs reconnecting even if no delivery failed yet.
Match quality
One table per ad platform and origin, one row per event type, in plain names such asCheckout started.
The click ID uses a smaller denominator on purpose. An organic visitor never had one, so counting them would make a correct setup look broken. A gap in this column means the ID was lost between the ad click and the sale.
A dash means the platform does not use that signal. Google takes no browser ID or device info. App events carry no browser ID.
We only call out a signal the event should carry. A missing email on a product view is not a gap.
Ask AI
Select Ask AI on To fix or on any tab. It opens a chat with a question ready to send and that tab’s rows attached, including the codes. Press Enter to send it. The chat can then look deeper than the page shows. It has read tools for the delivery log, unlinked Shopify orders and their miss codes, the match signals sent per event, your conversion rules, and connection health. Ask “which orders were not matched and why” and it quotes order numbers and codes. See AI chat for the list. These tools never return a buyer’s email, IP address, or the payload we sent.When it does not work
Next, fix delivery problems in Conversions, or reconnect a source in Sources.