How to measure the agentic commerce funnel without double-counting orders
An observed recommendation, a store visit and an order are not three records of the same purchase until you can link them. In agentic commerce, part of the journey may happen inside an assistant and another part in your checkout. Drawing every stage on a chart does not make the data available.
This guide proposes a measurement contract for analytics and ecommerce teams reconciling AI channels with their order system. The output is an event table, join rules and a cohort close. The Shopify Agentic Storefronts guide covers activation and dashboard metrics; this work begins when you combine sources.
Separate journeys before joining data
Record where product discovery, selection and checkout happen for each channel. In Shopify's documentation, ChatGPT refers shoppers to the store to complete a purchase, while other channels may provide direct checkout, subject to availability and activation. Check the specific integration rather than inferring the journey from the assistant's name.
Keep web-referral and direct-checkout journeys separate. If the latter does not create a measurable web session, that absence is not a lost session. An order also does not prove that you have a record of the recommendation preceding it.
Mark each stage as observable with an identifier, observable only in aggregate, not supplied by the source or pending because of an incident. Zero means the system measured the stage and found no events. It should not stand in for the other states.
Write an event contract your sources can fulfill
The following names are a proposed Mentio analytics model, not a Shopify, UCP or AI-provider standard. Map each source to these definitions and retain its original event name.
| Normalized stage | Minimum evidence | Limitation to disclose |
|---|---|---|
| Observed recommendation | Authorized answer or report, product, surface and timestamp | A prompt sample does not represent all commercial impressions |
| Observed selection | Product interaction recorded by the channel | Product appearance does not establish selection |
| Handoff received | Arrival at the destination with a usable origin reference | A displayed link does not prove it was opened |
| Checkout started | Checkout identifier and documented start criterion | A page visit does not always create a checkout |
| Order accepted | Order persisted in the commerce system | Accepted, authorized and paid are different states |
| Return or refund | Identified adjustment linked to an order or line | A physical return does not prove money was refunded |
Include source, channel, journey type, event identifier, entity identifier, occurrence time and receipt time. Add market, currency, definition version and quality status. Retain product and variant when available; do not replace an unknown variant with the best-selling product.
Each source owner should confirm which identifiers are exported, their delay and retention period. If a source supplies daily totals only, keep them as aggregates. Do not manufacture individual events to make the dashboard fit.
Join entities using explicit keys
Keep session, checkout, order and line identifiers separate. An event identifier distinguishes messages; an order identifier recognizes the same transaction across state changes. They are not interchangeable.
Maintain a mapping table with source system, original identifier, target entity, target key and reason for the join. Use an authorized shared identifier or a mapping documented by the platform. Keep ambiguous joins pending.
Do not join records merely because their timestamps and amounts match. Two shoppers can pay the same amount; one shopper can retry. Avoid using email, phone numbers or conversation text to fill funnel gaps. Restrict the record to data that is permitted and necessary for the analysis.
Store platform-reported attribution and your own analytical classification in separate fields. When they differ, expose both rules and their scope. Do not overwrite the origin to make totals agree. The GEO attribution and ROI guide explains why an origin label does not establish causality.
Deduplicate messages without discarding state changes
A delivery retry is not another sale. Define event uniqueness within its source system and retain evidence of repeated deliveries outside the commercial count. Then apply each valid change to the corresponding entity.
The UCP Order specification describes updates carrying the order's full current state, not increments to add together. It includes a webhook identifier and timestamp, and accounts for retries. If you receive these messages, summing the amount of every notification would duplicate sales.
Keep the received-message log separate from the current order view. Resolve out-of-order messages using the source's version or sequence where available; do not assume the last message received is the newest. If you cannot establish the order, reconcile with the owning system before replacing the state.
A cancellation or refund changes the economic outcome without creating another order. The UCP readiness audit covers technical operation; the analytical control is being able to reconstruct which state entered each report and why.
Calculate rates within a joinable cohort
Choose a unit before calculating. For a cohort of checkouts started during a period, completion rate can mean unique checkouts resulting in an accepted order divided by eligible unique checkouts in that same cohort. Count each checkout once, even when multiple notifications or derived orders exist; report those cases separately.
Set the follow-up horizon and reporting cutoff. Recent checkouts may still complete: do not compare an incomplete cohort with one that has received its full follow-up. Orders without a checkout link still belong in the order ledger, but should not silently enter that rate's numerator.
Do not calculate recommendation-to-order conversion with sampled answers as the denominator and all sales as the numerator. When stages cannot be linked, publish separate counts and explain coverage. A blank rate with a documented reason is more useful than a percentage combining different populations.
Close orders, payments and adjustments with explicit rules
Prepare an order-cohort view with a reporting cutoff. Distinguish accepted orders, cancellations, captured payments, refunds and pending adjustments. Keep the original currency; when consolidating currencies, document the exchange rate, date and rule applied.
If you report net collections, define whether that means captures minus processed refunds and how you treat chargebacks, taxes, shipping and fees. Do not call that measure accounting revenue or margin without further reconciliation. Avoid deducting the same adjustment twice when it appears in multiple sources.
Retain two views of late adjustments: their effect on the original order cohort and their movement in the period when they were processed. These are two ways to inspect one fact, not two refunds. Identify each report by its cutoff and record revisions.
Publish a reconciliation record alongside the funnel
Give the ecommerce owner a record containing:
- Channel, journey, entry period and reporting cutoff.
- Owning source for each stage and current definition.
- Events received, duplicates excluded and unique entities.
- Linked orders, unlinked orders and pending joins.
- Unobservable stages and open collection incidents.
- Amount, currency or state differences against the commerce system.
- Owner of each difference and evidence needed to close it.
Investigate differences by category before assigning them to a channel: receipt delay, state change, currency, duplicate or incompatible attribution. Retain the residual you cannot explain. Do not manually adjust a number to make it disappear.
The funnel is ready to inform decisions when each published transition has a defined population and each commercial total can be reconciled with its source. Visibility in answers remains a separate layer: you can track it alongside sales, but cannot turn it into an individual purchase history you never observed.
Frequently asked questions
Can I measure the entire journey from recommendation to order?
Only if the sources provide the stages and keys needed to link them. When a stage is unobservable or exists only in aggregate, disclose that limitation and avoid an individual end-to-end conversion rate.
Does a direct checkout need a web session to enter the report?
No. It needs its own journey and event source. A direct order can belong in the commercial total without belonging to the web-session population used to calculate store conversion.
How do I avoid counting a sale several times through webhooks?
Deduplicate messages by source and event identifier, and maintain one entity per order. If the source sends full states, update the order view instead of adding the amount from every notification.
Where should I record a refund received after closing the report?
Link it to the original order and retain its processing date. Revise that cohort's view with a new cutoff and show the period's movement separately, without duplicating the adjustment.
Does this model prove that AI caused the sale?
No. It reconciles observed events and attributions. Establishing incremental impact requires an additional design to compare what would have happened without the intervention; a channel label does not answer that question.
Want to know if AI mentions your brand?
Discover your visibility in ChatGPT, Claude and Gemini in minutes.
Related articles
Shopify Agentic Storefronts: How to Activate and Measure AI Channel Sales
Configure Shopify Agentic Storefronts by AI channel, validate catalog and checkout, and measure sessions, orders, and sales without mixing attribution.
AI CommerceUCP for Ecommerce: How to Audit Readiness Before AI Checkout
Audit Merchant Center, your /.well-known/ucp profile, checkout, payments, security, and orders before integrating UCP with AI Mode and Gemini.
GEO StrategyHow to Measure the Real ROI of Your GEO Strategy (Beyond Share of Voice)
Measure GEO in three layers, separate self-reported from tracked signals, build an honest business case with a hypothetical, sensitivity-tested model.