Event duplication in GA4 is dangerous because the numbers still look plausible. Revenue, conversions, and event volume can rise without any obvious error state. The only safe response is to understand which duplicates GA4 can deduplicate on its own and which ones still need an implementation fix.
The most common source:two GA4 implementationsrunning simultaneously
The single most common cause of event duplication is two separate GA4 implementations sending data to the same property. This produces exactly double the event count for every interaction. Common configurations that create this:
- Google Site Kit plugin plus a separate GTM container both deploying GA4 to the same property
- A hardcoded gtag.js snippet in the theme header plus a GTM-based GA4 Configuration tag
- An ecommerce plugin's built-in GA4 integration plus a manual GTM implementation
- A legacy Universal Analytics tag that survived migration with a GA4 Measurement ID substituted in
These overlaps are easy to introduce during a re-platform. OurGTM and GA4 configuration guidewalks through how to set up a single, owned source of truth for your GA4 tags.
Diagnosis: in Tag Assistant or GTM Preview mode, load your site and count how many times the GA4Measurement IDappears in outbound requests to google-analytics.com. One request per page load is correct. Two requests indicate duplication.
Open tag assistant and load your site
Navigate to tagassistant.google.com, connect your site, and perform a normal browsing session including visiting a product page, adding to cart, and completing a test purchase if possible.
Count GA4 measurement ID hits
In the Tag Assistant timeline, filter for your GA4 Measurement ID. Count how many network requests go to google-analytics.com/g/collect per page load. Exactly 1 is correct. 2 or more means duplication.
Identify the duplicate source
Expand each hit to see the origin tag. One will come from GTM, another may come from a direct gtag snippet, a WordPress plugin, or a platform-native integration. Name both sources.
Disable one implementation
Remove the lower-priority implementation. If you have a GTM-managed setup, disable the platform plugin or remove the hardcoded snippet. Do not disable GTM, it gives you more control going forward.
Verify fix and reconcile historical data
After disabling, confirm Tag Assistant shows exactly one hit per page. Note the fix date in GA4 annotations and reconcile historical reports from before that date against your external source of truth.
Purchase event deduplicationvia transaction_id
GA4 has a built-in deduplication mechanism for purchase events: thetransaction_idparameter. Google documents that purchase deduplication with transaction IDs works for data collected throughweb streams. If two purchase events are registered with the same transaction ID, Analytics deduplicates the purchase. For a deeper look at the required fields and formats, see our breakdown ofGA4 purchase event parameters.
That does not mean every double-fire scenario is safe. Deduplication is a protection for purchase events, not a general guarantee that any duplicate architecture is fine. Teams should still remove duplicate sources where possible and validate the live payloads carefully.
Common failure points are simpler than many teams think: missing transaction IDs, inconsistent IDs between implementations, or an empty string. Google specifically warns not to sendtransaction_id="", because Analytics will deduplicate all purchases that share that empty value.
Custom event deduplication
GA4 does not natively deduplicate custom events other than purchase. If your form submission event fires twice because two different implementations track the same user action, GA4 counts both unless your implementation prevents the duplicate.
For custom events where deduplication is needed, the solution is at the implementation level: disable the conflicting tracking rather than trying to deduplicate in GA4.
Automatically detect duplicate tags and event sources across your GA4 property
Single page applicationdouble page view
On SPAs, the combination of Enhanced Measurement page view detection (which listens to history state changes) and a custom GTM page_view implementation both firing on route changes is a common source of doubled page views and inflated session counts. The fix is to use one intentional page-view strategy and verify it in the browser usingGA4 debug modebefore pushing live.
Detecting duplication withbigquery
The most precise way to detect event duplication is in BigQuery. Count the number of event rows per transaction_id for purchase events. If any transaction_id has more than one row in the events table, investigate. Similarly, count page_view events per session. If the average page_view count per session is double what you would expect based on your page depth metrics, you have session-level page view duplication. If the duplication has masked the opposite problem, our guide onfixing missing revenue on purchase eventsexplains how to reconcile against your back-office numbers.
Deduplication audit action plan
Validate
- Tag Assistant confirms GA4 Measurement ID fires exactly once per page load
- No duplicate GA4 tags exist (check GTM containers, plugins, and page source simultaneously)
- Purchase events include a consistently formatted transaction_id across all implementations
- Any overlapping custom event tracking is documented and intentionally controlled
- SPA page views use a single mechanism (Enhanced Measurement OR custom GTM, not both)
Fix
- Remove the lower-priority GA4 implementation (typically the plugin or hardcoded snippet)
- Standardise transaction_id format: pick one format and enforce it across client-side and server-side
- Choose one SPA page-view approach and test it end to end in the browser
- Annotate the fix date in GA4 so historical reports are interpreted correctly
Watch for
- GA4 reported revenue diverging materially from the ecommerce platform backend revenue
- Sudden step-changes in event volume after plugin, theme, or tag-manager releases
- A new plugin or site deployment that coincides with a sudden doubling of events
Event deduplication checklist
- Only one GA4 implementation is active: no dual plugin plus GTM scenario
- Tag Assistant confirms the GA4 Measurement ID fires exactly once per page load
- Purchase events include transaction_id consistently formatted across all implementations
- Enhanced Measurement form_interactions disabled if custom GTM form tracking is active
- SPA page views use a single mechanism (either Enhanced Measurement or GTM, not both)
- BigQuery purchase table checked for duplicate transaction_id rows
Related guides to read next
GA4 Data Hygiene Audit
A complete guide to identifying and fixing data quality problems in GA4 properties.
GA4 Audit Checklist
The complete checklist for auditing GA4 implementations from tag to conversion.
GA4 Custom Events Audit
How to audit your custom event schema for naming conflicts, missing parameters, and misconfigurations.
Ready to audit your GA4 property?
Run a full GA4 audit in under 2 minutes. Free to start.