Skip to content
— Attribution & measurement10 min read

Shopify and Meta’s Conversions API: match quality and dedup, in order.

The data sharing setting, the duplicate pixels to remove, the dedup check, and the customer fields that move Event Match Quality. In the order that stops you tuning the wrong number.

SM
Performance marketing strategist

Many Shopify stores running Meta ads switched on the Conversions API the same way. Someone opened the Facebook and Instagram app, picked a data sharing level, and moved on. That one setting decides most of what Meta can see about your purchases, and it is the setting almost nobody revisits after launch.

This post is the Shopify-specific path. The general case for server-side tracking, the normalization rules, and the full validation routine are in our Conversions API setup guide. The question here is narrower. On a Shopify store, which switches do you touch, in what order, and what do you check in Events Manager to know it worked?

The short version

Pick the highest data sharing level your install offers. Remove every other Meta pixel on the store. Confirm that browser and server purchases are being deduplicated. Only then work on Event Match Quality. Doing these in a different order is how stores end up improving the match score on purchases that are being counted twice.

Step 1: choose the data sharing level

The Facebook and Instagram app offers three levels of customer data sharing: Standard, Enhanced, and Maximum. Shopify notes that the options you see depend on when the app was installed, so your screen may not match a colleague’s.

  • Standard is the Meta pixel only. It runs in the browser, and Shopify notes that ad blockers can stop it.
  • Enhanced adds the Conversions API alongside the pixel. Shopify describes it as sending the purchase event between Shopify’s and Meta’s servers, and it shares customer information such as name, location, email, phone, and browsing behavior.
  • Maximum uses the Conversions API and the pixel plus what Shopify calls Meta’s latest advertising technology, sharing the same categories of data.

The setting lives in your Shopify admin under Sales channels, then Facebook & Instagram, then Settings, then Data sharing settings. Turn on customer data sharing, choose the level, and connect the pixel you intend to keep.

If Meta is a real acquisition channel for you, the choice is Enhanced or Maximum. Standard leaves every purchase dependent on a browser script, and each purchase the browser misses is one Meta cannot attribute or learn from. The trade is data. The higher levels share more customer information with Meta, so check the choice against your privacy policy and the consent section below before you change it.

One detail changes how you read results. Shopify states that events carrying an order value use the order’s total price, which is after discounts and includes shipping, taxes, and duties. That is not your net sales figure. Work out your ROAS target from your own margin with the breakeven ROAS calculator, and remember that the value Meta reports includes tax you collect and pass on.

Step 2: remove every other Meta pixel

Shopify’s help is direct about this. If you added Meta pixel code to your theme before setting up through the app, remove it. Otherwise the store has more than one pixel, which Shopify warns can result in duplicate or incorrect data. Extra copies usually hide in one of four places.

  • The theme.liquid file, between the head tags, left over from an old manual install.
  • Settings, then Customer events, where custom pixels and app pixels are listed. A custom pixel pasted in by a developer can send Meta events alongside the app.
  • A tag manager container that loads Meta’s code on its own, independent of anything Shopify controls.
  • A third-party app that sends its own Meta events. Shopify tells agencies and apps to make sure a pixel they add will not duplicate data, which is a good sign of how often it happens.

The test for this step takes ten minutes. Open the Test Events tool in Events Manager, browse the store, add a product to the cart, and complete a test purchase. You want one browser event and one server event per action, from one pixel ID. Two pixel IDs, or two browser events for one action, means a second install is still live.

Step 3: confirm deduplication

Meta calls running the pixel and the Conversions API together a redundant setup, and it only works when Meta can tell which browser event and which server event describe the same purchase. The recommended method matches two fields, event_name and event_id. The event ID the pixel sends must equal the event ID on the server event, and the event names must match. When Meta receives a matching pair within 48 hours, it keeps one and discards the other.

There is a fallback that uses the browser ID (fbp) or external_id, but Meta documents its limits. It generally works only when the browser event arrives first and the server event second, and it does not deduplicate two events from the same source. Two browser events for one purchase, the classic double-pixel problem, are never cleaned up by it.

This is why step 2 comes before step 3. A second integration that you or a developer added has no way to share event IDs with the app’s events, so its copies are counted as separate purchases. No setting inside Meta fixes that. The fix is deleting the copy.

ScenarioShopify online ordersPurchase events Meta receivesPurchases Meta countsWhat it tells you
Healthy pairing1,000900 browser, 990 serverAbout 1,000Pairs match, and the server covers browser misses
Event IDs not matching1,000900 browser, 990 serverAbout 1,890Most orders are counted twice
Same pixel loaded twice1,0001,800 browser, 990 serverWell above 1,000Browser duplicates survive dedup
Server events not sending1,000900 browser, 0 serverAbout 900Enhanced or Maximum is not actually active
Worked arithmetic: reading Meta’s purchase count against Shopify online orders for the same week. Illustrative numbers, not client data.

The rule that falls out of the table: the purchase count Meta records should sit at or a little below your Shopify online order count for the same days, never above it. Above it means duplication. Far below it means missing events. Compare online orders only, because point-of-sale and draft orders never pass through the storefront where the pixel runs.

Step 4: raise Event Match Quality

Event Match Quality is Meta’s score out of 10 for how well the customer information on an event can be matched to a Meta account. It is shown per event in Events Manager, and Meta says it is currently available only for web events.

The reason to care is in Meta’s own documentation. Only matched events can be used for ads attribution and ad delivery optimization. Unmatched events still appear in basic measurement, but they do not help the delivery system find your next buyer. Meta lists email, IP address, first and last name, and phone as higher-quality parameters, and it asks for the same parameters on the browser and server sides.

  • On the app path, Meta’s formatting and hashing rules for email, phone, and country are applied for you. They are covered in the Conversions API setup guide. The one thing to check is that IP address and user agent reach the server event, because only the browser adds them automatically.
  • fbc and fbp come from Meta’s first-party cookies, _fbc and _fbp, and tie the server event to the browser session and the ad click.
  • external_id, your own customer identifier, is supported and should stay consistent across events.

On the app path, the formatting is handled for the events the app sends. What you control is whether the information exists at the moment of the event. A guest checkout with only an email matches worse than a returning customer with email, phone, and address. Asking for a phone number at checkout, or making account login worth doing, moves the score more than any setting. For which first-party fields are worth collecting and where each should go, see first-party data for paid media.

Expect upper-funnel events to score lower. A shopper viewing a product has usually not given you an email yet, so ViewContent and AddToCart carry less to match on. Judge the score on Purchase and InitiateCheckout, where the checkout has asked for identifiers.

Share of purchase events matchedMatched eventsOrder value Meta can attribute and optimize onOrder value left to basic measurement only
60%600$54,000$36,000
75%750$67,500$22,500
90%900$81,000$9,000
Worked arithmetic: how the matched share changes what Meta can use. 1,000 purchase events a month at a $90 order value. The percentages are illustrative, not benchmarks.

The percentages are made up. The shape is not. The matched share multiplies everything downstream. Moving from 60% to 75% in this example gives the delivery system 150 more buyers a month to learn from without spending another dollar.

Consent: fewer events can be the correct number

Shopify runs pixels under its customer privacy settings. In markets configured to require consent, usually the EEA and the UK, web pixels run only when visitors have given the permissions the pixel needs, and new pixels require marketing and analytics permissions by default. Pixels that count as selling data do not run for customers who opted out unless they support limited data use.

So if you sell into Europe or the UK, part of the gap between Meta’s purchases and Shopify’s orders is consent doing its job. Do not close it with a second script outside Shopify’s consent handling. That recreates the duplicate problem and adds a compliance problem. Close the part you can: one pixel, working dedup, the higher sharing level. Treat what remains as expected loss.

What most setup advice gets wrong

The usual advice is to push Event Match Quality as high as it will go. The score is a diagnostic, not a goal. A store can show a strong score on a purchase event that is being counted twice, while a store with a middling score has counts that match Shopify to within a few orders. The second store’s data is worth more, because the delivery system is learning from real purchases.

Count first, match second. If the purchase count is wrong, a better score on it only makes Meta more confident about the wrong number.

When this advice is wrong

  • Your storefront is headless or your checkout does not run on Shopify. The app’s events may not cover the purchase, so choose one server source you control and route every event through it.
  • You already run your own server integration, such as a server-side tag manager. Then the app should not also send server events for the same actions. One sender per event.
  • Meta is a small share of spend. Steps 1 to 3 are worth doing anyway. Step 4 can wait for a quarter when Meta carries more budget.
  • Most of your orders never touch the online checkout. Wholesale and point-of-sale orders make the order comparison meaningless unless you filter them out first.

What to do this month

  1. Open the data sharing settings in the Facebook and Instagram app and note the current level. Move to Enhanced or Maximum if your privacy review allows it.
  2. Search theme.liquid, Online Store Preferences, Settings then Customer events, and any tag manager for a second Meta pixel. Remove it.
  3. Place a test purchase with Test Events open. Confirm one browser and one server Purchase from one pixel ID.
  4. Compare the deduplicated Purchase event count in Events Manager, by event date, with Shopify online orders for the last full week. Do not use Ads Manager attributed purchases, which follow attribution windows. At or slightly below is the target.
  5. Read Event Match Quality on Purchase and InitiateCheckout. If it is low, look at which identifiers your checkout collects before touching anything else.
  6. Write down the level, the pixel ID, and the date in the place your team keeps setup notes, so nobody redoes this in six months.
— Common questions
Does the Shopify Facebook and Instagram app set up the Conversions API?

Yes, at the Enhanced and Maximum data sharing levels. Shopify describes Enhanced as the pixel plus the Conversions API, which sends the purchase event between Shopify’s and Meta’s servers. Standard is the pixel only. The levels offered depend on when the app was installed.

Why does Meta show more purchases than Shopify?

Usually duplication. Either a second Meta pixel is still installed, or browser and server events are not sharing an event ID, so Meta cannot pair them. Meta’s main deduplication method needs the event name and event ID to match within 48 hours. Its fallback method does not clean up two browser events for the same purchase.

What is a good Event Match Quality score?

Meta scores it out of 10 per event but does not publish a universal target. Read it on Purchase and InitiateCheckout, watch the trend after changes, and treat it as a diagnostic. A high score on a double-counted event is worth less than an average score on an accurate count.

Do I need a developer to set up Meta CAPI on Shopify?

Not for the app path. Choosing the data sharing level and connecting the pixel happen in the Shopify admin. A developer helps with removing old pixel code from a theme, auditing custom pixels, or building your own server integration if you move off the app.

Will a consent banner reduce my Meta conversions?

It can reduce the events Meta receives. In markets that require consent, Shopify only runs pixels after visitors give the needed permissions. That loss is expected. Do not work around it with scripts outside Shopify’s consent handling, which creates duplicates and compliance risk.

If you want a second pair of eyes on the setup, the free audit reads your Meta account and flags signal and measurement problems. For hands-on help running Meta on a Shopify store, see Meta ads for Shopify. The terms used here are defined in the glossary under Event Match Quality and Conversions API.

Written by , performance marketing strategist. If this resonated and you want to apply it to your own account, you can Take the growth check or run a free audit.

How we research, source figures, and handle corrections: editorial policy.

— What we learn

Got value from this one?

The next one lands in your inbox. Account-level analysis written the way we brief our own operators. Unsubscribe in one click.

Sam NouriFrom Sam— Growth check

What's actually holding your growth back?

About 4 minutes, no account access. For Ecommerce stores, SaaS, and digital products. A score across five areas and the one constraint to fix first.

Get your score

Want this kind of thinking on your account?

Start with the four-minute growth check. It shows what is most likely holding your growth back and the next step that fits your size.