If GA4 is reporting roughly double the orders you see in Shopify, you don’t have a traffic miracle — you have duplicate purchase events. It’s one of the most common tracking bugs on Shopify, and it quietly corrupts every revenue and conversion number you report.
Here’s how to confirm it, find the source, and fix it.
The tell-tale sign: GA4 ≈ 2× Shopify
Normally GA4 runs a bit lower than Shopify (client-side tracking loses some events — see our guide on the GA4 ↔ Shopify discrepancy). So if GA4 is higher than Shopify — especially around 1.5×–2× your order count — that’s the fingerprint of double-firing.
| GA4 vs Shopify order count | Likely meaning |
|---|---|
| GA4 slightly lower (5–10%) | Normal |
| GA4 ≈ equal | Healthy tracking |
| GA4 ~1.5–2× higher | Duplicate purchase events |
Not sure whether your setup is the culprit? The free Tracking-Health Mini-Audit scores your Shopify↔GA4↔Meta tracking red/yellow/green in ~10 minutes.
Why it happens
On Shopify, two things commonly fire the GA4 purchase event on the order-confirmation page at the same time:
- Shopify’s native GA4 integration (connected via the Google & YouTube sales channel), and
- A GA4 purchase tag in Google Tag Manager (added earlier, often during a “proper” analytics setup).
Each one fires its own purchase event → GA4 records the sale twice. The same thing happens if you have two GTM containers, or a theme that hard-codes a GA4 snippet plus an app that also injects one.
Does GA4 not deduplicate this?
It tries. GA4 deduplicates purchase events that share the same transaction_id within a short window. The duplicates get through when:
transaction_idis missing on one (or both) of the events,- the two sources send different
transaction_idvalues, or - the two setups are otherwise independent.
So the fix has two parts: remove the redundant source, and make sure transaction_id is set so GA4 can catch any stragglers.
How to confirm (2 minutes)
- Open GA4 → Admin → DebugView (or Realtime).
- Place a test order (or use a recent real one).
- Watch the
purchaseevents. Twopurchaseevents for one order = duplicates. - Check the parameters: are both carrying a
transaction_id? Is it the same value?
How to fix
- Choose one source. Decide whether Shopify’s native GA4 integration or your GTM tag owns the purchase event — not both.
- Disable the other.
- Keeping GTM? Disconnect GA4 from the Google & YouTube channel (or turn off its GA4 measurement).
- Keeping native? Pause/delete the GA4 purchase tag in GTM.
- Confirm
transaction_idis populated on the surviving event (it should equal the Shopify order ID). This lets GA4 dedupe any edge cases. - Re-test in DebugView — you should now see exactly one
purchaseper order. - Reconcile a closed period: GA4 order count should drop back to roughly Shopify’s (a little lower is normal).
Heads-up: fixing duplicates makes your reported revenue and conversions go down — because the inflated numbers were never real. That’s the point: you’re now optimizing ad spend on accurate data instead of a mirage.
FAQ
Why is GA4 showing double the purchases of Shopify? You’re firing the purchase event twice — usually Shopify’s native GA4 integration and a GTM tag both firing on the confirmation page. GA4 ≈ 2× Shopify is the signature.
How do I know if I have duplicate GA4 purchase events?
Compare a closed period: if GA4 is ~1.5–2× Shopify orders, you have duplicates. Confirm in GA4 DebugView/Realtime by watching for two purchase events on one order.
Does GA4 automatically deduplicate purchases?
Only when both events share the same transaction_id within a short window. Missing or mismatched transaction_id lets duplicates through.
Native GA4 or GTM — which should I keep? Either works; just pick one. Native is simpler, GTM is more flexible. Running both is the #1 cause of double-counting.
Sources
- AuditTags — Duplicate purchase events in GA4 on Shopify
- AmplioData — GA4 purchase event firing twice
- FunnelFreaks — GA4 ecommerce tracking audit (duplication share of issues — single source, treat as directional)
- Google — GA4 measure ecommerce / transaction_id