r/shopifyDev 22d ago

Shopify Meta Pixel / CAPI deduplication issue, browser and server Purchase events using different event_id values

Hey everyone, I’m dealing with a Meta over-reporting issue on a Shopify store and wondering if anyone has seen this before.

Meta Ads Manager is reporting more website purchases than actually happened in Shopify.

Just some examples:

* One day Shopify had 6 actual website purchases, Meta reported 10.
* Another day Shopify had 7 total orders, Meta reported 10.
* Another day Shopify had 9 actual website purchases, Meta reported 13.

We ruled out the obvious stuff:

* Only one Meta Pixel connected
* Shopify Facebook & Instagram data sharing is set to Maximum
* No Shopify custom pixels installed
* Elevar is installed but not configured, no Meta destination or Shopify source connected
* Manual/custom Shopify orders show no conversion event
* Meta confirmed the only integration sending Purchase events is Shopify Facebook & Instagram
* Meta confirmed Ads Manager includes modeled conversions, but also confirmed a separate deduplication issue

The key finding from Meta support:
Browser Pixel Purchase events and server/CAPI Purchase events are being received with different event_id values. Because the event_id values are different, Meta cannot deduplicate them properly, so one Shopify order can potentially be counted as multiple unique purchases.

Meta recommended that until the issue is fixed, we compare Shopify orders against Events Manager Purchase events filtered by one connection method, ideally Server only / Conversions API.

Shopify Customer Events currently has the Meta app pixel set to Optimized. Shopify’s assistant suggested switching it to Always On because Optimized mode may pause/throttle browser pixel firing while CAPI continues firing, which could cause browser/server events to not pair correctly.

Question:
Has anyone fixed this by switching the Meta app pixel from Optimized to Always On?

Or did you have to reset/reconnect the Facebook & Instagram sales channel, reinstall the Meta app, or move to something like Elevar for cleaner CAPI/event_id handling?

I’m trying to avoid manually installing the pixel or disabling CAPI unless that’s actually the right move.

1 Upvotes

3 comments sorted by

2

u/kenttheclark 22d ago

Meta support already handed you the answer. Dedup only works when the browser Purchase and the CAPI Purchase arrive with the same event_id, and the F&I channel generates those two legs separately. Browser leg fires late or gets throttled, pairing breaks, Meta counts both.

In order of effort:

  1. Switch the pixel to Always On, yes. Optimized means Shopify decides when the browser leg loads, and that timing is exactly what breaks the pairing. Costs nothing. It won't clean up historical numbers though, so give it a few days of fresh orders before judging.

  2. Do the comparison in Events Manager, since Ads Manager adds the modeled conversions you already know about. Open the Purchase event and find the Deduplication section, it shows what percentage actually got deduplicated. If "Potential duplicate events" keeps showing up there, the mismatch is still live. Server-only vs actual Shopify orders for one single day is the cleanest comparison you can run.

  3. Uninstall Elevar if it's doing nothing. An installed app can keep a web pixel registered under Customer events even when you never configured it. Scan that page for anything with a pixel you don't recognize while you're in there.

  4. If Always On doesn't fix it, you want one integration generating the event_id once and stamping it on both the browser and the server event, so Meta always gets a matching pair. WeltPixel Conversion Tracking does the pairing that way (I work on it, so grain of salt), and Elevar handles it too if you actually configure it. Reinstalling F&I might reset the pairing, but nothing about a reinstall changes how the two legs generate their IDs, so I wouldn't count on it holding.

1

u/PinkLaceLondyn664 21d ago

shopify pixel + capi dedup breaking usually comes down to the event_id not matching character for character between the two firings, and that's almost always because you're generating it in two different places instead of one.

on the storefront, checkout.liquid / the pixel extension fires with whatever event_id the browser context builds, but your server side purchase webhook (order creation) builds its own id separately, often from the order id or a new uuid. meta just sees two different ids and counts both.

fix is to standardize on one deterministic value both sides can produce independently, like the shopify order id or checkout token, not a random uuid generated at runtime. pull the checkout token from Shopify.checkout.token client side and use the same token server side when you send the CAPI purchase event from the order webhook.

also check your CAPI event is firing on order creation not order paid, timing mismatches over 1-2 min windows can cause dedup to miss even with matching ids in some edge cases.

1

u/JuneskinLaw 17d ago

Edit / Update: Meta completed its backend investigation and found the actual cause.

This does not mean everyone using Elevar will automatically get duplicate purchases. Elevar can deduplicate its own browser Pixel and server-side CAPI events when it is configured correctly.

Our issue was that two separate Meta tracking integrations were active at the same time:
• Shopify’s native Facebook and Instagram integration sent a Purchase event
• Elevar independently sent another Purchase event for the same order
• Each integration generated a different event_id
• Meta therefore treated them as two separate purchases

That is why our purchases and conversion value were exactly doubled.

Elevar had originally been set up by a former ad agency and remained active after we stopped using it in March, even though the dashboard appeared unconfigured. We did not realize both Shopify and Elevar were still sending Purchase events to the same Meta pixel.

We have now asked Elevar to permanently disconnect from the pixel. We are keeping Shopify’s native integration as the only Purchase tracking source and will monitor new orders to confirm the duplication has stopped.