More sales from the traffic you already have
The formula is one line of arithmetic, orders divided by sessions. Yet GA4 and Shopify Analytics run it on the same store and print two different numbers every single day. Here is exactly where the two counters diverge.
A store owner once showed me two dashboards for the same week and asked which one was lying. Shopify said 2.1%, GA4 said 1.6%, and both were produced by billion-dollar companies from the same visitors. The answer I gave then is the answer of this note: neither is lying, they are counting different things with different tools in different places, and once you can name the exact points of divergence, the gap stops being scary and starts being useful.
Conversion rate is orders divided by sessions, times 100. Not revenue, not add to carts, not visitors: completed orders over sessions. A session is one visit, and both platforms close it after 30 minutes of silence. That is the whole formula. Which makes it stranger that the two reports never match, until you look at where each platform gets its two inputs.
Shopify counts where the money lives. Its session counter runs on the platform serving the pages, so a visitor cannot opt out of being a session, and its order counter is the order table itself. If the money arrived, the order is in the numerator. This is why I treat the Shopify number as the system of record: both inputs are complete by construction.
GA4 counts through a tag in the browser. Every session and every purchase must survive the trip: the gtag must load, the visitor must not be running a blocker, the consent banner must be answered generously, and the confirmation page must fire its purchase event before the customer closes the tab. Each failure thins the data. On top of collection, Google documents that since October 2021 GA4 counts sessions with HyperLogLog++, an estimation algorithm that trades exact counting for speed, which alone guarantees small disagreements with any exact counter.
The result is systematic, not random: GA4 usually sees fewer sessions than Shopify and misses a slice of purchases, and because the two losses are different sizes, the computed rate lands somewhere else entirely.
| Input | Shopify Analytics | GA4 | Effect on the printed rate |
|---|---|---|---|
| Session counting | Server side, complete | Browser tag, thinned by blockers and consent | GA4 denominator smaller |
| Session arithmetic | Counted | Estimated with HLL++ (documented) | Small drift either way |
| Orders | The order table itself | purchase event, can misfire on confirmation | GA4 numerator smaller |
| Bots and internal traffic | Platform filtering | Property settings, often unconfigured | Either denominator inflated |
| Time zone and week start | Store settings | Property settings | Same day, different buckets |
Two rows in that table are pure configuration. I have watched a “conversion crisis” dissolve when someone noticed the GA4 property lived in UTC while the store lived in New York, so every evening’s orders were falling into different days on the two dashboards.
The GA4 mechanics here, session_start, the 30 minute inactivity timeout, sessions spanning midnight, and HyperLogLog++ estimation applied since October 2021, are taken directly from Google’s own documentation page on Analytics sessions, read in July 2026. The Shopify side reflects the Shopify Help Center’s definitions of sessions and online store conversion in its analytics documentation, read in July 2026: conversion rate there is the share of sessions that resulted in an order, with sessions expiring after 30 minutes of inactivity. No client data appears in this note; the two-dashboard anecdote is included as an illustration of configuration drift, with no numbers attached beyond the publicly typical direction of the gap.
First, I appoint Shopify as the official scoreboard and say so out loud, in writing, so nobody quotes GA4 in the Monday meeting. The benchmarks I compare against, like Littledata’s 1.4% Shopify average, are Shopify-measured, so like meets like.
Second, I use GA4 only for questions Shopify cannot answer: which channel’s sessions convert, where the funnel narrows, what mobile does differently. Ratios inside GA4 are fine, because the thinning applies roughly evenly to both sides of an internal comparison.
Third, I never chase a gap smaller than the tools’ own noise. The two counters will disagree every week of their lives, for the documented reasons above. The day worth investigating is the day the gap suddenly changes size, because that means something real broke: a consent banner update, a broken purchase event, a new app injecting sessions. The steady disagreement is just physics. My GA4 funnel walkthrough picks up from there.
Orders divided by sessions, multiplied by 100. If your store had 20,000 sessions last month and 300 of them included a completed order, your conversion rate is 1.5%. Every platform uses this arithmetic; the disagreements come from how each platform defines and collects the two inputs, not from the math.
Four structural reasons. GA4 collects in the browser and loses visitors who block or decline tracking, while Shopify counts server-side. GA4 estimates session counts with the HyperLogLog++ algorithm rather than counting exactly, as documented by Google. The purchase event in GA4 can fail to fire on the confirmation step even though the order exists. And settings like time zone, internal traffic filters and bot handling rarely match between the two properties.
For the question 'what share of visits end in an order', trust Shopify: its numerator is the actual order table and its denominator is not thinned by blockers. For the question 'where in the funnel do people leave, on which device, from which channel', use GA4, because that is what it is built for. The mistake is not choosing either one, it is mixing them mid-analysis.
Close but not identical. Both end a session after 30 minutes of inactivity. GA4 starts one with a session_start event when a page is viewed and no session is active, and a GA4 session can span midnight. The practical differences come less from the timeout and more from which visitors ever get counted at all.