Duplicate purchase events in GA4: how to find the cause in the browser
When Google Analytics™ 4 shows more purchases or more revenue than your store recorded, the first suspect is a purchase sent more than once for the same order. The browser shows you how many times it was sent, where to and by which script.
What GA4 deduplicates, and what it doesn’t
Google’s help article Minimize duplicate key events with transaction IDs says that GA4 deduplicates purchase events with the same transaction ID, and that this only works for web data streams. That has three consequences:
- A repeated purchase without a
transaction_id, or with a different one on each send, can be counted again. - The same ID reused for different orders makes GA4 drop real purchases. Never send an empty
transaction_id: GA4 deduplicates all the purchases that have it. - Deduplication happens in GA4. A trigger that fires twice usually fires the other tags attached to it twice too, such as the Meta Pixel.
Find the duplicate in DevTools
- Open DevTools (F12), go to the Network tab, tick Preserve log and filter by
collect. - Place a test order. On the confirmation page, count the requests with
en=purchase, including each line of batched POST requests. - Compare the measurement ID (
tid) andep.transaction_idof each one. Two sends of this order to the sametidare a duplicate; if they share the transaction ID, GA4 may absorb it, and if the ID differs or is missing, both can be counted. The same order sent to two different properties can be intended. - Look at the Initiator of each request (a column in the Network tab, and a tab in the request details): the chain of scripts that sent it helps tell a Google tag in the site code from a Google Tag Manager container or a store platform’s own integration.
- Reload the confirmation page, and go back and forward. If another purchase event is sent, you have confirmed a repeated browser send. Check GA4 separately to see whether it was counted again.
- Repeat with each payment method: some return to the confirmation page twice, or through a different URL.
Common causes
- The Google tag installed twice: in the site code and in Google Tag Manager, or through a store platform’s integration and a manual setup at the same time.
- A trigger on the page view of the confirmation page instead of a data layer event pushed once per order.
- A single-page app that sends the purchase again when the route changes.
- The same purchase also sent from a server (Measurement Protocol), which DevTools doesn’t show.
How to fix it
- Keep one installation per destination.
- Send the purchase from a data layer event pushed once per order, with the same
transaction_idon every send. - If the confirmation page can load again, remember which orders were already sent (for example, in the browser’s storage) and don’t send them again.
- Record the journey again, reload included. The GA4 purchase checklist covers the rest of the event.