You launch a campaign, conversions look strong, and then finance pulls the actual revenue numbers. GA4 is showing almost double what actually came in. Revenue double counting is one of the most damaging GA4 data quality issues — and one of the most common. Here's why it happens and how to fix it.

Duplicate Tags Are the Most Common Cause

The most frequent root cause: the GA4 purchase event is firing twice for every transaction. This happens when both a GA4 Configuration tag in GTM and a GA4 Event tag are both configured to fire on the order confirmation page — effectively sending the purchase event twice. It can also happen when a gtag.js snippet is hardcoded into the page and GTM is also deployed, causing two separate tag instances.

The diagnosis: open Chrome DevTools → Network tab → filter for google-analytics.com/g/collect → complete a test purchase. If you see two requests with en=purchase within seconds of each other, you have duplicate firing.

The Thank You Page Reload Problem

If your order confirmation page can be refreshed — and the purchase event fires on every load rather than only on the first — every customer who reloads their confirmation page generates a duplicate transaction. This is a structural issue in how the conversion event is triggered. The fix is to fire the purchase event only once, typically by setting a session storage flag on first load and checking for it before firing.

Cross-Domain and Iframe Issues

If your checkout is hosted on a subdomain or third-party domain (common with Shopify, WooCommerce hosted checkouts, or embedded payment flows), and cross-domain measurement isn't configured correctly, GA4 may be receiving the purchase event from both the parent domain and the checkout domain. The result is a single transaction counted twice across two sessions.

Check your Data Integrity module: GA4 Health Check's audit specifically checks for duplicate event firing patterns, including purchase event deduplication. The comprehensive GA4 audit checklist covers transaction ID validation — a key signal that reveals whether duplicate suppression is working correctly.

Using Transaction IDs for Deduplication

GA4 uses the transaction_id parameter to deduplicate purchase events at the property level — if two purchase events arrive with the same transaction ID within a short window, GA4 should suppress the duplicate. However, this deduplication is not guaranteed and has known limitations. The better fix is always to prevent duplicate firing at the source rather than relying on GA4's deduplication logic.

To verify: go to Explore → create a free-form report with Transaction ID as a dimension and Event Count as a metric, filtered to purchase events. Any transaction ID appearing more than once is a duplicate.

How to Fix Revenue Double Counting

GA4 Health Check's Data Integrity module flags duplicate event patterns automatically. Run an audit to see if double counting is affecting your revenue figures.

Travis Gunn
Founder of GA4 Health Check. Working with Google Analytics since 2013, with over 250 clients audited across almost every industry vertical. 100% Job Success on Upwork for over a decade.