Duplicate purchase events: one order, one event
By the HonestTag team ยท Published October 12, 2026
When two tools send the same Shopify order to the same ad platform as a purchase, the platform can count it twice. Ad platforms remove duplicates only under their own rules, and two tools from different vendors rarely meet those rules together. The fix is one purchase source for each pixel and each conversion action.
How one order becomes two purchases
Take one order, #1001. A tracking app a former agency installed still sends a server-side Purchase to your Meta pixel with its own event ID, say a1. A second tool sends the same order to the same pixel with its own event ID, b7. Meta now holds two Purchase events for one order.
Meta's deduplication page says: "We determine if events are identical based on their ID and name." a1 and b7 are different IDs, so the two events are not identical to Meta. Meta's other method, which matches a browser event to a later server event by fbp or external ID, has a stated limit too: "If you send us two consecutive server events with the same information, we do not discard either."
Google Ads removes a duplicate inside one conversion action. Google's transaction ID page says: "If there are 2 conversions for the same conversion action with the same transaction ID, Google Ads will know the second conversion is a duplicate." Two tools that each report the order to their own purchase action are two actions, so that rule does not join them. Google's primary and secondary page says primary actions are reported in the Conversions column and used for bidding "as long as the standard goal they are part of is used for bidding." Secondary actions are "for observation only" and are not used for bidding, "The one exception is if the secondary action is part of a custom goal, in which case it's used for bidding."
The bidder then learns from a purchase count that is too high. Each campaign looks like it brings in more orders than the store took.
What HonestTag sends for one order
- One base event ID per order. HonestTag derives the ID from the order and computes the same ID on every retry. Klaviyo gets it as
unique_id. On Meta and TikTok, the standard purchase uses it, and HonestTag's own named purchase events use it with a suffix. For Google Ads, HonestTag sends an order-scoped transaction ID, the same on every retry. - No shared IDs with other tools. HonestTag does not coordinate event IDs with other tools, so Meta's event ID method will not treat HonestTag's purchase and another tool's purchase for the same order as one event. In Google Ads, HonestTag reports to its own conversion actions, and Google removes a repeated transaction ID only inside one action.
- Meta asks first. The Meta card in HonestTag asks whether Shopify's Facebook & Instagram channel is sharing data at Enhanced or Maximum. If you answer yes, HonestTag does not send Meta's standard Purchase event. Its classified events keep their own names, so they cannot pair with another source's Purchase.
- TikTok is off by default. HonestTag sends TikTok's standard CompletePayment only when you choose HonestTag as the TikTok purchase source.
- Google Ads actions start as secondary. HonestTag creates its own
HonestTag_conversion actions as secondary. They stay out of bidding until you make one primary or add one to a custom goal. - The free Mirror sends nothing. It reads each platform's claims and your orders. It cannot add a purchase anywhere.
Find every purchase source
- List what sends purchases. Tracking apps, an ad platform's own Shopify sales channel, code in your theme, a Tag Manager container, and any app a former agency installed.
- Pick one source for each platform. In Meta, keep one server-side Purchase source per dataset. In Google Ads, keep one purchase action as primary and set the rest to secondary, then check that no custom goal still includes a second purchase action.
- Turn the others off or move them to reporting. A second source can keep reporting for comparison as long as it is not counted as the bidding purchase.
- Check the next day. Put one day's purchase count in each platform next to that day's Shopify orders. A count near double the orders is the sign of a second source.
To run HonestTag beside the tool you have while you compare, follow the alongside guide. To move settings from an old app, see switching apps.
Frequently asked questions
Does Meta merge two server purchases with different event IDs?
Not under its event ID method. Meta says it determines whether events are identical based on their ID and name, so two purchases with different IDs are two events.
Can I keep my old tool while I test HonestTag?
Yes, if only one of them sends the bidding purchase to each pixel and conversion action. The free Mirror sends nothing, so it can run beside any tool.
Will HonestTag send a second Purchase to my Meta pixel?
HonestTag sends Meta's standard Purchase only when you answer on its Meta card that Shopify's Facebook & Instagram channel is not sharing data at Enhanced or Maximum. If another app also sends Purchase to that pixel, turn one of them off.
Does Google Ads remove a duplicate across two conversion actions?
Google's transaction ID rule works inside one conversion action. Keep one purchase action as primary, set the others to secondary, and keep them out of custom goals, where Google uses a secondary action for bidding.
One order, one purchase event, one source per platform. Join the HonestTag early-access waitlist.