purchase, App Embed on, no duplicate tags — then judge the leftover gap against a benchmark instead of chasing zero.
If your GA4 property shows fewer purchases than your Shopify admin, you're not imagining it — and you're not alone. But "not tracking" covers two very different problems, and the fix depends on which one you have. This guide separates the genuinely broken from the merely misunderstood, gives you the numbers to tell them apart, and shows you why the gap matters for your bottom line.
First: is your GA4 actually broken, or just different?
Shopify records every order server-side the moment checkout completes. It owns 100% of your sales. GA4 relies on client-side JavaScript that has to fire in the shopper's browser — so it will always see fewer purchases than Shopify. The question is how many fewer.
A GA4-under-Shopify purchase gap of roughly 15–30% is normal, a gap of 30–40% warrants investigation, and anything past 40% signals a real tracking break, according to BlueFrog Analytics and Consentmo. So before you tear apart your setup: pull last month's Shopify order count and last month's GA4 purchase count and divide. If GA4 is inside about three-quarters of Shopify, your tracking probably works — the rest is structural loss you can't eliminate. If it's far below that, keep reading; something is actually broken.
The fixable causes (real data loss)
These are the problems worth your time. Each one drops the purchase event on the floor, and each has a concrete fix.
1. You never migrated to a Custom Pixel
Since 2023, Shopify sandboxes its checkout, and third-party analytics scripts must run inside a Custom Pixel subscribed to the checkout_completed event. If your GA4 tag still lives in a legacy checkout-script slot or an old theme edit, it never sees the order. This is the single most common cause on modern stores. Add GA4 as a Custom Pixel (Settings → Customer events) or use an app that installs one.
2. The event isn't named purchase
GA4's ecommerce reports only recognize an event literally named purchase. If your pixel sends completed_purchase, order_completed, or anything else, GA4 receives the hit but files it as a custom event that never shows up in Monetization reports. Rename it.
3. App Embed is toggled off
If you rely on a tracking app, its App Embed must be switched ON in the Theme Editor. Off means no data flows, no matter how correct the rest of the config is. It's a thirty-second check that fixes a surprising number of "GA4 shows zero" cases.
4. Duplicate or conflicting tags
Running Shopify's native Google & YouTube channel and a manual GTM container and a second GA4 app at once produces script conflicts and double-fires. Pick one method and remove the others. Our GA4 conversion tracking setup checklist for Shopify walks through a clean single-source install.
5. Ad blockers, consent declines, and closed tabs
Even a perfect setup loses some purchases. Browser ad blockers and tracking prevention (Safari, Firefox) stop client-side pixels from firing for an estimated 10–25% of users, per Audiense/Elevar. Shoppers who reject analytics cookies check out invisibly to GA4. And anyone who closes the tab before the thank-you page loads never sends the event. This is why purchase events show the largest client-side gap of any GA4 event — and why 15–30% loss is baked in.
6. Third-party checkouts
Express payment paths (PayPal, Shop Pay redirects, some Buy Now flows) can bypass the page where your pixel expects to fire, so those orders slip past GA4 while Shopify still records them cleanly.
The unfixable part: methodology gaps
Here's what almost every other article glosses over. Once your plumbing is sound, GA4 still won't equal Shopify — and that's correct behavior, not a bug.
- Attribution model. Shopify credits the last non-direct click. GA4 defaults to data-driven attribution, splitting one sale fractionally across touchpoints. Channel rows will never line up.
- Session counting. GA4 starts and ends sessions differently and estimates unique counts with an approximation algorithm, so it typically reports 15–30% fewer sessions than Shopify, again per Audiense/Elevar. Fewer sessions, different denominators, different conversion rates.
- Refunds. Shopify lowers net sales when you refund an order; GA4 generally keeps the original conversion, so its total drifts above your true revenue after refunds.
The takeaway: chase a stable ratio, not equality. If GA4 sits at a steady ~80% of Shopify month after month, your tracking is healthy — a sudden drop to 50% is the real alarm. This same "which numbers are supposed to disagree" logic underpins all cross-tool reconciliation; our guide to reconciling your ecommerce data maps the whole picture across Shopify, GA4, and your ad platforms.
A worked example
Say your store gets 100 real orders in a week, each averaging $40 subtotal plus $5 shipping and $4 tax.
- Shopify records all 100 orders, server-side. This is ground truth.
- Ad blockers, consent declines, and closed tabs cost GA4 about 20 of them.
- GA4 models a few back but still lands near 80 purchases — and under data-driven attribution it splits those across Paid Search, Organic, Direct, and Paid Social, so no single channel matches Shopify's last-click view.
80 ÷ 100 = 80%. That's a healthy, in-benchmark result — nothing to fix. If instead GA4 showed 45, you'd be at 45%, past the 40% break line, and it's time to audit the Custom Pixel. The number that tells you whether to act isn't the gap itself; it's the gap against the benchmark.
The angle everyone skips: this is a profit problem
Missing purchase data isn't just a reporting annoyance. GA4 tells you traffic and behavior; it does not know what each order actually earned you after product cost, shipping, transaction fees, and ad spend.
Walk it out. On that $49 order, Shopify Payments takes roughly 2.9% + 30¢ on the Basic plan for US cards, per Webgility — about $1.72. Say the print-on-demand base cost is $18 and blended ad cost per order is $12. Your real per-order profit is 49 − 18 − 1.72 − 12 = $17.28, before refunds and chargebacks. GA4 will never show you that line. It's counting sessions, not margin.
That's the gap that actually costs money: not the 20 purchases GA4 missed, but the fact that no analytics install — however clean — reconciles ad spend, payouts, and product cost into true profit per order. The same disconnect shows up on the ad side, which is why TikTok Ads not tracking Shopify purchases and the mismatch between your Shopify total sales versus your payouts timeline are variations of the exact same reconciliation problem.
Where PodVector fits
Fixing GA4 gets your behavioral analytics honest — do it. But if the real question is "am I actually making money on these orders?", a tracking pixel can't answer it.
PodVector connects Shopify, Meta Ads, Google Ads, Printify, and Printful, and computes your true per-order profit from live data — the cost, fee, and ad-spend math GA4 was never built to do. Victor, its AI operator, analyzes that combined data and proposes Shopify-side moves you approve; he reads your ad data but does not touch your ad account. Victor is not a dashboard and not a replacement for GA4 — he's the layer that turns reconciled numbers into decisions.
If you're picking tools for the ad side too, our comparison of the best app for Google Ads pixel tracking on Shopify covers the attribution half of this.
See your true per-order profit with PodVector
FAQs
Why does GA4 show fewer purchases than Shopify?
Because GA4 tracks in the browser and Shopify records on the server. Some shoppers block the pixel, decline cookies, or close the tab before the thank-you page, so their orders never reach GA4. A gap of about 15–30% is normal, per BlueFrog Analytics; only a gap beyond 40% points to a real break.
How do I make GA4 track Shopify purchases correctly?
Install GA4 as a Custom Pixel subscribed to checkout_completed, make sure the event is named exactly purchase, turn on the App Embed if you use a tracking app, and remove any duplicate GA4 tags or conflicting apps. Then confirm the purchase event appears in GA4's real-time report during a test order.
Should GA4 and Shopify purchase numbers ever match exactly?
No. Even with flawless tracking, client-side loss, data-driven versus last-click attribution, and different session counting keep them apart. GA4 also reports 15–30% fewer sessions than Shopify by design, per Audiense/Elevar. Aim for a stable ratio, not equality.
Why did GA4 stop tracking purchases after a theme or checkout change?
Shopify's sandboxed checkout requires analytics to run inside a Custom Pixel. A theme update, a checkout migration, or switching to a new app can knock the old tag out of the flow, so the purchase event stops firing. Re-add GA4 as a Custom Pixel to restore it.
Does fixing GA4 tell me if my orders are profitable?
No. GA4 measures traffic, behavior, and revenue counts — not margin. It doesn't subtract product cost, Shopify Payments fees (around 2.9% + 30¢ on Basic, per Webgility), or ad spend. For true per-order profit you need a tool that reconciles Shopify, your ad platforms, and payments together.