TrackCheck › Blog

GA4 duplicate purchase events: how to find and fix them

If GA4 reports more purchases or revenue than your store actually took, you almost certainly have duplicates. Here's how to prove it and stop it.

By TrackCheck · Updated 15 October 2026 · 4 min read

Most GA4 problems make numbers too low. Duplicate purchases make them too high, and that's arguably worse. Inflated revenue makes campaigns look more profitable than they are, and if those conversions feed Google Ads bidding, budget follows the illusion.

The giveaway is simple: GA4 shows more purchases than your store has orders, on some days or overall. Cookie consent and ad blockers can only make GA4 lower than your store, never higher.

Step 1: Prove you have duplicates

Compare counts

For the last 30 complete days, compare GA4 Transactions with your Shopify Online Store orders or WooCommerce orders. If GA4 is higher overall or on particular days, keep going.

Find repeated transaction IDs

  1. In GA4, go to Explore › Free form.
  2. Add the dimension Transaction ID and the metric Event count, filtered to event name = purchase.
  3. Sort by event count, descending.

Any transaction ID with an event count above 1 has been sent more than once. Also look out for (not set) transaction IDs, meaning purchases sent without an ID, and for IDs in two different formats (for example 1001 and #1001). That pattern means two separate tags are each sending the same order.

Google documents that GA4 can de-duplicate some purchase events that share a transaction ID. Don't rely on it. It can't help when IDs are missing or formatted differently, and duplicates still distort other reports and downstream tools. Fix the cause.

Watch it happen

Place a test order with all cookies accepted, with DevTools › Network open and filtered to collect. Count the requests with en=purchase. Note each request's tid (measurement ID). Two different IDs mean two installs; the same ID twice means one install firing twice. Then refresh the thank-you page and watch for another purchase.

Step 2: Identify the cause

Cause 1: Two GA4 installs

This is the most common cause. Typical combinations:

Cause 2: Thank-you page reloads

The purchase fires every time the order confirmation page loads. That includes refreshes, revisiting it from the order email, or reopening a browser tab later. WooCommerce's order-received page and theme-level tags are most prone to this.

Cause 3: Two tags in the same GTM container

A GA4 event tag for purchase and a second tag (an old Universal Analytics migration, or a "GA4 ecommerce" template) both triggered by the same dataLayer event. Or one tag on a trigger that matches twice, for example a page view and a custom event.

Cause 4: dataLayer pushed twice

A plugin and the theme both push a purchase ecommerce object, so one GTM tag fires twice.

Not sure what your store fires before consent?

Send us your URL and we'll run a free homepage pre-consent scan: which trackers and cookies load before a shopper chooses. No obligation.

Get my free scan Use the free checklist

Step 3: Fix it

Pick one source of truth for purchases

Decide which single route sends the GA4 purchase. On Shopify that's usually the Google & YouTube app or one custom pixel. On WooCommerce, it's one plugin or GTM. Remove or disable purchase tracking everywhere else. In GTM, pause the duplicate tags rather than deleting them, so you can roll back. Publish, and note the version.

Stop reload duplicates

Always send a transaction ID

Every purchase event should include transaction_id with the store's order identifier, in one consistent format. It makes duplicates detectable and lets GA4's own de-duplication work where it can.

Step 4: Verify

  1. Place a test order with consent accepted. You should see exactly one en=purchase request and one purchase in DebugView.
  2. Refresh the thank-you page twice. No new purchase events should appear.
  3. After a week, rerun the transaction ID exploration for the post-fix period. No IDs should have an event count above 1.
  4. Compare GA4 transactions with store orders again. GA4 should now be at or below your order count every day.

Don't forget the other platforms

Duplicates also hit Google Ads conversions (check the conversion action's count setting and whether it's imported from GA4 and tracked with a separate Ads tag) and Meta. If you send purchases via both the Meta Pixel and the Conversions API, Meta de-duplicates using a shared event_id and event name. Check your integration sets both. Without that, the same order can count twice.

What about historical data?

GA4 data that's already processed can't be edited. Annotate the fix date in your reporting, and treat earlier revenue figures with caution. Use store order data for any historical revenue analysis. If you're unsure whether your current numbers are inflated or deflated, our GA4 vs orders guide shows how to reconcile them, and the GA4 purchase fix guide covers the opposite problem.

Want it checked properly?

The TrackCheck Health Check is a fixed-price review for UK Shopify and WooCommerce stores: a full consent test (before choice, after "Reject all", after "Accept all", including Consent Mode v2 signals), a GA4-vs-orders reconciliation, a prioritised fix list and a recorded walkthrough, delivered in 5 working days.

See Health Check pricing Start with a free scan

This article is technical guidance, not legal advice. Platform menus change; check the vendor's current documentation if a setting has moved.