Install on Shopify
Sign up for a 30-day Free Trial.
index_mail_icon
Aimerce Blogs
Deduplication Explained: Why Sending the Same Event Twice Is Worse Than Not Sending It at All
4 June 2026
Deduplication Explained: Why Sending the Same Event Twice Is Worse Than Not Sending It at All
Meta Ads

Why Sending the Same Event Twice Is Worse Than Not Sending It at All

Most tracking advice goes like this: more data is better. Send events from the browser. Send them from the server. Send them from everywhere you can.

Setting up both Meta Pixel and Conversions API (CAPI) is the correct setup for any Shopify brand running Meta ads where you have two systems sending event data to Meta for the same customer actions. But it didn’t just end there. If you follow it without understanding deduplication, you will end up in a worse position than if you had just run the browser Pixel alone.

Sending the same event twice without telling Meta they are duplicates does not give Meta more signal, instead, it gives Meta a distorted signal. And Meta's algorithm will optimize on that distortion.

Without deduplication, Meta receives two Purchase events for one actual purchase. It counts both. Your reported conversions double. Your ROAS inflates. And your algorithm starts optimizing against a signal that does not correspond to reality.

I spent over 7 years as an engineer at Meta building ad products. After that I built Aimerce to help Shopify brands fix their tracking. Deduplication errors are one of the most common and most damaging problems I find in brand audits and they are almost always invisible until you know where to look.

Try Aimerce Pixel Risk-Free
for 30 Days

Most teams see results within 2 weeks.

Money-back guarantee.
It pays for itself, or you don't pay anything.

Install On

What Deduplication Actually Is

Deduplication is the process of telling Meta that two incoming events represent the same real-world action, so it should only count them once.

Meta receives events from two sources which are your browser Pixel and your Conversions API. When both sources send a Purchase event for the same order, Meta needs a way to recognize they are the same purchase not two separate purchases.

The mechanism is a parameter called event_id.

When your tracking setup is configured correctly, both the browser Pixel event and the server-side CAPI event for the same purchase carry an identical event_id typically the Shopify order ID or a combination of order ID and event name.

When Meta receives two events with matching event_id values within a 48-hour window, it deduplicates them. It registers the purchase once, uses data from both sources to enrich the event, and discards the duplicate.

When deduplication is not configured or when the event_id values do not match between browser and server, Meta counts both events as separate purchases.

Why This Is Worse Than Not Tracking at All

This is the part that surprises most people.

If you are only running the browser Pixel and it is missing 20 to 30 percent of your conversions due to iOS restrictions and ad blockers, your algorithm is working with incomplete data, that is bad. But Meta knows there is uncertainty. The model it builds reflects an undercount of reality.

If you are running both Pixel and CAPI without deduplication, Meta sees twice as many conversions as you are actually getting. The algorithm does not know these are duplicates. From Meta's perspective, your account is performing exceptionally well. It has "seen" plenty of conversions and feels confident.

But here is what happens downstream:

Your target CPA gets miscalibrated. If Meta thinks you are getting 100 purchases per week and your actual number is 50, any CPA targets or ROAS targets you set are based on inflated denominators. Meta optimizes to hit a cost-per-conversion target that does not correspond to your actual economics.

Your algorithm finds the wrong audience. Meta is learning from twice the signal it should be. The conversion events it is learning from are biased the ones being counted twice are the purchases that both the browser Pixel and the CAPI caught, which tends to skew toward certain customer types and behaviors. The algorithm converges on an audience shaped by this bias.

You make bad scaling decisions. Your Ads Manager is showing you performance data that does not match reality. When you scale a campaign based on a 4x ROAS that is actually 2x, you overspend on a campaign that is not performing as well as you think. You scale into underperformance.

You cannot trust any optimization decisions. A/B tests comparing creatives or audiences are comparing results from a broken measurement system. The winner of that test might not be the winner in reality.

How to Tell If Your Deduplication Is Working

Go to Meta Events Manager. Click on your Purchase event. Look for a column or section related to deduplication.

Specifically, you want to see your deduplication rate the percentage of server-side events that were matched to a browser-side event and successfully deduplicated.

For a Shopify store with a healthy tracking setup running both Pixel and CAPI, you would typically expect a deduplication rate of 60 to 90 percent. This means 60 to 90 percent of your CAPI Purchase events had a matching browser Pixel event that Meta recognized and deduplicated.

Here is how to interpret what you see:

Deduplication rate of 60 to 90 percent: Healthy. Both sources are firing, matching correctly, and Meta is counting each purchase once.

Deduplication rate below 30 percent: Your browser Pixel is likely missing a significant portion of events (common with iOS traffic and ad blockers) or your event_id values are not matching between browser and server. Neither is ideal the former means you need server-side tracking more urgently, the latter means your deduplication configuration needs fixing.

Deduplication rate of 0 percent: Either your CAPI is not sending an event_id parameter at all, or your browser Pixel is not firing at all. Either way, events are not being matched and you are likely double-counting.

No deduplication data visible: Your CAPI may not be configured to send event_id. This is a common problem with low-quality or older Shopify tracking apps that set up the CAPI connection but do not properly configure the event matching parameters. We wrote a separate article on how to fix event ID deduplication errors in Meta Events Manager.

What The Heck Even Is event_id Parameter and Where It Comes From

The event_id is a string you define. It just needs to be unique to each conversion event and consistent between what your browser Pixel sends and what your server sends for the same event.

The most reliable approach for Shopify brands is to use the Shopify order ID combined with the event name. For example, a Purchase event for order #12345 would carry event_id: "purchase_12345" from both the browser and the server.

When Meta receives both events with that same event_id, it matches them.

The only catch is your browser Pixel and your server-side CAPI integration both need to be generating this event_id in the same way. If one uses the order ID and the other uses a random timestamp, they will never match, and deduplication will fail silently.

This is one of the most common setup errors I find in audit after audit. A brand has both Pixel and CAPI running, believes they have deduplication configured, but the event_id format between the two sources does not match so every purchase is still being counted twice.

What a Correctly Deduplicated Setup Looks Like

When deduplication is working correctly, here is what happens for a single purchase:

  1. Customer completes checkout on your Shopify store
  2. Browser Pixel fires a Purchase event with event_id: "purchase_12345" and any customer data available in the browser (fbc, fbp, email if collected pre-checkout)
  3. Shopify's order webhook fires and triggers your CAPI integration to send a server-side Purchase event with the same event_id: "purchase_12345" and enriched customer data from the order (email, phone, shipping address, etc.)
  4. Meta receives both events, matches on event_id, registers one purchase, and uses data from both sources to build the richest possible event record

Then, one purchase counted, with maximum customer data attached, giving Meta the best possible signal for targeting and attribution.

This is exactly what Aimerce a server side tracking on Shopify handles automatically. The deduplication logic generating consistent event_id values, passing them through both WebPixel and Webhook events, and ensuring they match on Meta's end is built into the infrastructure. You do not configure it. It just works. Did I mention automatically?

If you are using a different tracking setup or you’re looking for Aimerce or Elevar alternative, the audit questions are: does your CAPI send an event_id? Does your browser Pixel send the same event_id for the same order? Can you see a deduplication rate in Events Manager?

If the answer to any of those is no or I do not know, your conversion data is not clean.

The Bigger Picture

The reason I wrote this is that deduplication sits at this uncomfortable intersection of being technically simple and practically invisible.

Most brands do not know their events are being double-counted until they do a proper audit. The Ads Manager still shows data. ROAS still shows a number. Nothing throws an error.

But underneath, the algorithm is learning from a distorted reality. And every week it runs on that distorted data, it moves a little further from what would actually drive your business forward.

Fix the tracking. Get the deduplication right. Give Meta accurate data and its algorithm will do more of the work for you than any audience hack or creative strategy ever will.

Try Aimerce Pixel Risk-Free for 30 Days

Sign Up for a
30-Day Aimerce Pixel Free Trial
Sign Up Using Your Shopify Account Email
*Money back guaranteed.
Aimerce pays for itself or you don’t pay anything.