The Problem
Your purchase event is firing twice. GA4 is counting double the revenue. Google Ads shows inflated conversions. You open DebugView and see two purchase events for a single order.
This is one of the most common - and most damaging - tracking problems in GTM setups.
Double-counted purchases mean your ROAS data is wrong, Smart Bidding is trained on bad signals, and every revenue report is unreliable until you fix it.
Here are the three causes that account for the vast majority of duplicate purchase events, and how to diagnose which one you have.
Cause 1: GA4 Is Installed Both via GTM and Hardcoded on the Page
This is the most common cause.
What happens: A developer installs the GA4 snippet directly in the site’s <head> code (either the gtag.js snippet or a direct GA4 configuration tag). Separately, you have a Google Tag in GTM also firing on all pages. Both send a page_view on load - and both fire the purchase event when the purchase event is triggered.
How to check:
Open Chrome DevTools → Network tab → filter by collect or g/collect. Reload the order confirmation page.
If you see two separate requests to google-analytics.com/g/collect firing within milliseconds of each other, you have two GA4 instances running.
Alternatively: right-click the page → View Page Source → search for G-XXXXXXXXXX (your Measurement ID). If you find it hardcoded in the HTML, that is your problem.
How to fix:
Remove the hardcoded GA4 snippet from the site’s source code. GTM should be the only mechanism deploying the Google Tag.
If a developer argues they need the snippet for other reasons (e.g. server-side rendering of the first page_view), align on a single implementation method and stick to it.
Cause 2: GA4’s “Create Event” Feature Is Duplicating an Event Already Firing from GTM
What happens: You configured a custom event in GA4 Admin using the “Create Event” feature (GA4 → Admin → Events → Create Event). This feature creates a new event based on an existing event. If you created a rule that triggers on purchase to create another event, or if someone created a rule that matches a parameter and accidentally creates a second purchase - you get duplicates entirely within GA4, before GTM is even involved.
How to check:
- GA4 → Admin → Events → Create Event
- Look through any custom event rules
- Check if any rule has a condition that matches
event_name equals purchaseor parameters that would be present on the purchase event
Also check: GA4 → Admin → Modify Event - similar feature that can modify existing events in ways that cause doubles.
How to fix:
Delete or disable the Create Event rule that is causing the duplication. If the intent was to rename or copy the event for a specific reason, verify the logic so it does not match the purchase event unintentionally.
Cause 3: The GTM Tag Has Multiple Triggers and Fires More Than Once on the Same Page
What happens: Your GA4 purchase event tag in GTM is firing on two different triggers - for example, both a Custom Event trigger (purchase) and an All Pages trigger, or both a Custom Event trigger and a Page View trigger on the confirmation page URL.
This is less obvious because in GTM Preview mode it appears as two tag firings in the same page session.
How to check:
- Open GTM Preview mode
- Navigate to the order confirmation page
- In the Tag Assistant panel, find your GA4 purchase event tag
- Click on it - it shows a list of times it fired and which trigger caused each firing
If you see the same tag listed twice, click each instance to see the trigger. You will see two different triggers both matching.
How to fix:
Remove the extra trigger. The purchase event tag should fire on exactly one trigger: the Custom Event trigger that matches the purchase event name (or whatever your data layer event is named).
Never attach an All Pages trigger to a specific conversion event tag.
Bonus Cause: The Confirmation Page Is Accessible More Than Once
What happens: The order confirmation page does not have any protection against being refreshed or revisited. A user refreshes the page, hits the back button and goes forward again, or shares the URL. Each visit fires the purchase event again.
This is not strictly a GTM bug - it is a site architecture issue - but it produces the same symptom: duplicate purchases.
How to check:
Open the confirmation page, then refresh it. Check DebugView - does a second purchase event appear?
How to fix:
The proper fix is on the server side: the confirmation page should only render for a session that just completed a purchase. Most ecommerce platforms handle this correctly. If yours does not, a client-side workaround is to check sessionStorage before firing the purchase event:
// In a Custom HTML tag (fires before the purchase data layer push)
if (!sessionStorage.getItem('purchase_fired_' + transactionId)) {
sessionStorage.setItem('purchase_fired_' + transactionId, '1');
// allow purchase event to fire
} else {
// block the event - already fired
}
This is a band-aid. The real fix is ensuring the confirmation page is only accessible once per order.
How to Use Transaction ID Deduplication in GA4
Even after fixing the root cause, you can add a safety net using transaction ID deduplication.
GA4 does not natively deduplicate purchase events by transaction_id the way some platforms do. However, Google Ads does apply deduplication on the conversion side if you pass a consistent order_id parameter.
For GA4, your best defence is fixing the source, not relying on deduplication after the fact.
Diagnostic Checklist
Work through these in order:
- View Page Source on the confirmation page - is the GA4 snippet hardcoded?
- Network tab - are there two
g/collectrequests firing on page load? - GA4 → Admin → Create Event - any rules matching the purchase event?
- GTM Preview → purchase tag → how many times did it fire, and which triggers caused each firing?
- Refresh the confirmation page - does a second purchase event appear in DebugView?
One of these five checks will identify your cause.
Final Thoughts
Duplicate conversions are a silent revenue data problem. They do not throw errors. GA4 does not warn you. Google Ads does not warn you.
The only way to catch them is to deliberately check: open DebugView on a real test purchase and count how many purchase events appear. There should be exactly one.
In the next article of this series, we will cover:
GTM on single-page applications - why only the first pageview gets tracked and how to fix it.
Related Posts
Cross-Domain Tracking Breaking at Iframes and Third-Party Checkouts - and How to Fix It
10 min read
WooCommerce Google Ads Conversion Tracking via GTM Using GTM4WP
14 min read
GTM Blocked by Content Security Policy - The Silent Killer No One Tells You About
9 min read
Need Help With Your Google Ads?
I help e-commerce brands scale profitably with data-driven PPC strategies.
Get In Touch