TrackParity

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 countLikely meaning
GA4 slightly lower (5–10%)Normal
GA4 ≈ equalHealthy tracking
GA4 ~1.5–2× higherDuplicate purchase events

Why it happens

On Shopify, two things commonly fire the GA4 purchase event on the order-confirmation page at the same time:

  1. Shopify’s native GA4 integration (connected via the Google & YouTube sales channel), and
  2. 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_id is missing on one (or both) of the events,
  • the two sources send different transaction_id values, 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)

  1. Open GA4 → Admin → DebugView (or Realtime).
  2. Place a test order (or use a recent real one).
  3. Watch the purchase events. Two purchase events for one order = duplicates.
  4. Check the parameters: are both carrying a transaction_id? Is it the same value?

How to fix

  1. Choose one source. Decide whether Shopify’s native GA4 integration or your GTM tag owns the purchase event — not both.
  2. 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.
  3. Confirm transaction_id is populated on the surviving event (it should equal the Shopify order ID). This lets GA4 dedupe any edge cases.
  4. Re-test in DebugView — you should now see exactly one purchase per order.
  5. 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

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.