Why the discrepancy between the ‘completed checkouts’ and ‘online orders’
Reproduction steps
Our clients are still asking the same question regarding the Conversion Rate metrics differing from the actual figures for online orders in the Shopify admin.
For example the CR report can show 25 ‘completed checkouts’ for a day that shows 50 online orders in the system. The 50 online orders must be 100% accurate, as they are processed orders. So why the discrepancy and resulting poor CR figure?
I know tracking depends on a myriad of factors such as cookie consent, privacy settings etc. However the final number of orders per day, within the Shopify store are 100% accurate - no tracking needed.
Any insight into this problem would be much appreciated.
Additional info
I have asked this same question here previously, but still do not have a satisfactory answer, unfortunately.
Hi @Jonathan_Davies The difference between “completed checkouts” and “online orders” usually comes down to how Shopify tracks sessions versus how it records finalized orders.
A “completed checkout” is a front-end event captured through browser tracking, which can be missed if cookies are blocked, scripts fail to load, or the buyer uses accelerated checkout methods like Shop Pay or Google Pay where certain tracking scripts don’t fire.
Meanwhile, “online orders” are back-end transactions logged directly in Shopify’s database, so that number is always definitive (analytics)
Another subtle factor is how abandoned checkouts and post-purchase edits are handled. If an order is edited, merged, or created through a draft checkout (via API or POS), it will appear in orders but not in the original checkout analytics, which lowers the apparent conversion rate.
For cleaner reporting, you can compare “sessions → orders” in the “Sales over time” report instead of the “Online store conversion” card, as that uses order data rather than checkout events (Apps for marketing and analytics)
In short, the CR report reflects what was tracked, not necessarily what was sold. Using order-based metrics from the admin or the Analytics API will give your clients a much more accurate view of performance.
I am looking at the ‘Sales over time’ report, based on Sessions - Orders, as you suggest. Is there any way to get a clearer overview of the approximate conversion rate, and is there any way to limit this to online orders only?
Hey @Jonathan_Davies , if your shop is using the standard online store/theme method for online orders, you could run a query like this in the query editor for example to limit the orders that pop up to orders that were initiated through the online checkout:
FROM sales
SHOW orders, gross_sales, discounts, returns, net_sales, shipping_charges,
duties, additional_fees, taxes, total_sales
WHERE order_sales_channel = 'Online Store'
GROUP BY month WITH TOTALS, PERCENT_CHANGE, CURRENCY 'CAD'
TIMESERIES month
SINCE startOfDay(-365d) UNTIL today
COMPARE TO previous_period
ORDER BY month ASC
LIMIT 1000
VISUALIZE orders
This should only return orders that were made through checkout. It would exclude orders that were initiated through third party apps or ones that were converted from draft orders directly in the admin. If you know the names of the other sales channels, you can modify the query to pull those orders also if needed (for example you could change the query to be like: WHERE order_sales_channel = ‘Point of Sale’ for POS orders. Hope this is what you’re looking for, let me know if I can help out further as well
Thank you Alan. I can get that query to run fine and looks good.
I guess I’m looking / hoping for a simple way to then translate this data into a CR report, but I’m thinking that now would have to be done using this data, but outside of Shopify?
No worries, @Jonathan_Davies. Glad that query helped a bit at least! There isn’t a specific built‑in “order‑based” CR report, but you can get close inside Shopify Analytics. One option that might work would be through the session table in Shopify Analytics. You could run a variation of the query we were looking at above and then run something like this to cross reference the days:
FROM sessions
SHOW sessions
GROUP BY day WITH TOTALS
TIMESERIES day
SINCE startOfDay(-90d) UNTIL today
ORDER BY day ASC
LIMIT 1000
VISUALIZE sessions
You could see how many sessions you have per day vs the number of completed orders. It’s not the most detailed, but it would give you some decent insight into CR ratios if you wanted to look at that as an option. An option that would give you a lot more granular detail would be setting up a Custom Webpixel if you wanted to look at that as an option too:
Hope this helps, let me know if I can clarify anything on my end as always here.