How to Fix Duplicate Purchase Events in GA4 on Shopify (Native GA4 vs GTM)
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 (one analysis attributes about 35% of GA4 tracking issues to duplication), 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 |
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
Is your tracking gap normal — or a real bug?
Get the free Tracking-Health Mini-Audit: drop in your Shopify, GA4 & Meta numbers and get a red/yellow/green score in ~10 minutes, plus your top 3 fixes.
No spam. Unsubscribe anytime. We never sell your data.