Duplicate purchase events: real duplicates vs. normal repeats
Updated 2026-09-28
Seeing a purchase event more than once does not mean it was counted twice. Most repeats are the same event sent to several pixels or ad accounts, or in several request formats, and each destination receives it once. A real duplicate is the same event sent again to the same destination for the same order: a second tag firing within seconds, or the order-confirmation page loading again.
What you see
After a test order, the network log shows two, five or more purchase requests. Meta may show several Purchase hits, Google Ads several conversion requests, and GA4 a purchase hit of its own. The question is which of them go to the same destination, in the same format, for the same order.
Why it happens
| Situation | How it looks in the requests | Real duplicate? |
|---|---|---|
| One event sent to several pixels or accounts | Same name, different destination: Meta id, GA4 tid, Google Ads account | No |
| One event in several request formats | Google Ads conversion, view-through and CCM paths for the same account | No |
| One order reported to several networks | Different networks, same order ID | No |
| The same event fired twice by the page | Same destination, format, name and order or event ID, seconds apart | Likely |
| The confirmation page loaded again | Same order ID on a new page visit, later | Likely, unless the network deduplicates it |
Several pixels or ad accounts
Many sites send each event to more than one destination, such as two Meta pixels or two Google Ads accounts. One live store sent every Meta event to five pixel IDs. Each pixel gets the event once. You can recognize this by the destination: the pixel ID in id for Meta, the measurement ID in tid for GA4, and the account number in the path or in tid for Google Ads. Two Meta pixels receiving the same Purchase with the same event ID are two destinations, not a duplicate.
Several request formats
The Google tag can send one conversion as a conversion request, a view-through request and a CCM request, once per account. These are one hit in several formats, with slightly different fields. See why one Google Ads conversion sends several requests.
One order on several networks
A Meta Purchase, a GA4 purchase and a Google Ads conversion for the same order are three reports to three separate systems. They should share the order ID: cd[transaction_id] or cd[order_id] for Meta, ep.transaction_id for GA4, and oid or transaction_id for Google Ads. Differences in value or currency between them are a separate problem; see Meta and GA4 revenue mismatch.
The same event fired twice
If the same destination receives the same event, in the same format, with the same order ID or event ID, a few hundred milliseconds or a couple of seconds apart, the page most likely fired the tag twice. A common cause to check is two installations of the same tag, for example a platform's built-in integration and a tag manager tag for the same pixel.
A reload of the confirmation page
If the thank-you page fires the purchase tag on every load, reloading it or returning to it later can send the purchase again with the same order ID. This happens on a new page visit, usually more than a few seconds after the first. Whether the network counts it again depends on its own deduplication, so check whether the tag fires on a repeat load at all.
Browser and server events
If the site also sends purchases from its server (for example through Meta's Conversions API), Meta is documented to deduplicate a browser event and a server event that share the same event name and event ID. The browser side sends that ID as eid or eventID. The extension sees only browser requests, so check on the server side that the same ID is sent there too.
How to check with Universal Pixel Debugger
- Open the side panel with the toolbar icon on the site, click Clear, then place a test order and wait on the confirmation page.
- Find the purchase rows. The same event sent to several destinations or formats of one network, on the same page visit and with the same event ID (or none, within 3 seconds), shows as one row with ×N and "to N destinations", or the formats, such as "CCM + view-through". That is fan-out, not duplication.
- Check the Issues list. Potential duplicate appears when the same network, destination, request format, conversion label and exact sent name repeat an event ID or order ID within 3 seconds.
- Open an event to read its Order ID, occurrence IDs and destination, each with a copy button.
- Reload the confirmation page. A reload starts a new page visit in the timeline. Type the order ID in the search box to list every event that carried it, across page visits.
Issues are hints, not proof of how a network counted. A repeat more than 3 seconds apart, or a repeat without an order ID or event ID, is not flagged as a potential duplicate, so check reloads with the order ID search.
What to fix
- Several destinations or formats. Nothing to fix, as long as every destination is one you use. Remove pixels and accounts that no one reads.
- A potential duplicate. Find the second tag or trigger and remove it, so each destination receives the purchase once.
- Repeats on reload. Fire the purchase tag once per order, for example only on the first load of the confirmation page, and always send the order ID so networks that deduplicate on it can.
- No order ID or event ID. Send them. Without an order ID, you cannot tell a repeat from a second order in the requests, and neither can a network that relies on it.
- Browser and server both sending. Send the same event ID from both sides.
If the purchase shows up once but without a currency in GA4, see GA4 purchase missing currency.