Why is Meta Ads counting duplicate purchases?
A practical diagnostic for Meta Ads accounts where browser Pixel and Conversions API events may be double-counting purchases.

Quick answer
If Meta Ads is counting duplicate purchases, audit your browser Pixel, Conversions API, event IDs, order-status triggers, and checkout redirects before trusting ROAS.
Quick answer: duplicate purchases usually come from event IDs or trigger logic
When Meta Ads counts more purchases than your store processed, the most likely cause is not that Meta invented orders. It is usually the same order being sent more than once through the browser Pixel, Conversions API, checkout thank-you page, app connector, or a server-side workflow without a stable deduplication key.
Before judging campaign performance, reconcile order IDs against Meta events and confirm whether each browser and server purchase shares the same event name, event ID, timestamp window, and order reference. A clean audit separates true attribution differences from actual duplicate conversion tracking.
The first evidence to collect
Start with a small sample of real orders instead of the account-level ROAS number. Pick recent purchases that Meta reported, then trace exactly how each order moved from checkout to the Pixel, Conversions API, ecommerce platform, tag manager, and any server-side connector.
- Order ID, checkout token, transaction ID, customer email hash, purchase timestamp, value, currency, and order status.
- Meta event name, event ID, event source URL, action source, browser/server source, received time, and deduplication status.
- All places that can fire Purchase: theme scripts, tag manager tags, ecommerce app integrations, server events, post-purchase apps, subscription tools, and custom backend jobs.
- Whether refreshes, payment retries, upsells, partial captures, or order edits can trigger the purchase event again.
- Whether the store, analytics tool, and Meta are using the same definition of a completed purchase.
Common causes of duplicate Meta purchase events
Deduplication only works when Meta can recognize that two events represent the same action. If the browser event and server event have different event IDs, or if two integrations both send Purchase independently, Meta may count both as conversions.
- Browser Pixel and Conversions API both fire Purchase but do not share the exact same event_id.
- A Shopify, WooCommerce, or custom checkout integration sends Purchase while a tag manager tag also fires on the thank-you page.
- The thank-you page can be reloaded, revisited from an email receipt, or opened on multiple devices and fires a fresh purchase each time.
- Post-purchase upsells, subscription renewals, refunds, or order edits trigger the same conversion event as the original checkout.
- Server-side events are retried after a timeout but the retry creates a new event ID instead of reusing the original one.
How to fix the tracking before changing campaigns
Do not lower budgets just because ROAS looks inflated. First make the purchase event trustworthy, then re-evaluate campaign performance with corrected reporting. The fix is usually a controlled event map plus a rule that every real purchase has one canonical conversion identity.
- Choose one source of truth for the order ID and pass it consistently into both browser and server purchase events.
- Make browser Pixel and Conversions API purchases share the same event_id for the same order.
- Remove duplicate Purchase tags from tag manager, ecommerce plugins, and custom scripts so only intentional sources remain.
- Guard thank-you-page events so page refreshes or return visits do not create new purchase conversions.
- Log server retry behavior and reuse the original event ID when resending the same conversion.
- Separate renewal, upsell, refund, test order, and order-edit events from the primary new-purchase conversion when they should not optimize campaigns.
How an AdSpecIt-style audit helps diagnose duplicate purchases
An AdSpecIt-style audit helps by comparing reported purchases against the event plumbing that created them. It should flag mismatched browser/server event IDs, multiple Purchase sources, suspicious event volume compared with actual orders, missing value consistency, and places where checkout behavior can fire the same conversion twice.
That turns “Meta ROAS looks too good to be true” into a concrete fix list: reconcile order IDs, repair event_id deduplication, remove duplicate tags, test checkout reloads, validate server retries, and then judge creative, budget, and targeting from cleaner conversion data.
Want AdSpecIt to audit your own account?
Connect your Meta Ads account, get a free score, and see the issues most likely to be hurting campaign performance before you spend more.
Get your free audit