Set up the Meta Conversions API alongside the Pixel, not instead of it, and make sure each purchase the two send is counted once. Getting that right matters because the decision to scale a Meta ad usually rests on a single number: the purchases it brings in. If that number is doubled, Meta itself warns that optimisation and budget decisions can be misled; if purchases go missing, a good ad looks weak. This guide explains what each tool does, how deduplication works, how to set things up on Shopify and how to verify the result, based on Meta’s and Shopify’s own documentation.
What is the difference between the Meta Pixel and the Conversions API?
The Meta Pixel is a piece of code you put on your website. When a visitor adds a product to their cart or makes a purchase, the pixel logs that action as an event and sends it to Meta. Meta lists three uses for it: showing your ads to the right people, including those who have visited a specific page or taken an action on your site; driving sales through automatic bidding that reaches people more likely to take an action you care about, such as a purchase; and measuring the results of your ads. You see incoming events in Events Manager.
Because the pixel runs in the visitor’s browser, it inherits the browser’s problems: Meta notes that pixel data can be blocked or lost because of browser settings or connectivity issues. The Conversions API sends the event to Meta directly from your server or e-commerce platform instead. According to Meta, data sent this way is less affected than the pixel by browser loading errors, connectivity issues and ad blockers.
One does not replace the other. Meta advises businesses that send website events through the Conversions API to use the pixel as well, and says the two together create a more reliable connection. Website events sent from your server are linked to your pixel and behave like pixel events: they are used for the same ad optimisation and appear in Ads Manager and Events Manager. The most robust setup therefore sends critical events such as Purchase from both the browser and the server, on one condition: the same order must never be counted twice. Finish this setup before your first sales campaign; a campaign can only be judged on the purchases Meta can see.
The difference between the Meta Pixel and the Conversions API
- A piece of code added to your site
- Runs in the visitor’s browser
- Browser settings, connectivity issues or an ad blocker can lose the event
- Used for measurement and for reaching people who visited your site
- A direct connection from your server or platform to Meta
- Less affected by browser errors and ad blockers
- Website events are linked to your pixel and used for the same optimisation
- Extra customer information parameters can increase matching
How do you stop the same purchase being counted twice?
With the pixel and the Conversions API both running, every purchase reaches Meta twice: once from the browser, once from the server. If Meta can tell that the two records are the same action, it counts only one. This is deduplication. Without it, Meta warns, conversion numbers are artificially inflated, which can mislead optimisation and budget decisions.
Meta’s conditions come down to two fields. The event name (event_name, for example Purchase) must match between the pixel event and the server event, and the event ID must be identical in both. On the pixel the ID is sent as eventID; in the Conversions API, as event_id. If no event ID is available, Meta says deduplication can also work when the event name matches along with either the external_id or the fbp parameter. When the server and pixel events are similar, Meta prefers the one it received first.
The ID has to be unique to each order. In practice, the easiest route is a value derived from the order number, which both the browser and the server know, so both send the same order under the same ID. Meta also deduplicates browser events that repeat with the same event name and ID, so a reloaded thank-you page can still end up as a single purchase. According to Meta, partner integrations on platforms such as Shopify and WooCommerce handle the deduplication parameters automatically; on a custom site, or a setup built with a tag manager, you have to add them to your code yourself.
You only need deduplication when you send the same event from both sources. In Meta’s example, a setup that sends AddToCart only from the browser and Purchase only from the server doesn’t need it. You can see whether an event was deduplicated in the Test events tab of Events Manager.
The same purchase arrives twice and is counted once
- 01Checkout completes
The visitor reaches the thank-you page; the order number now exists.
- 02The pixel sends from the browser
Event name Purchase, eventID set to an ID unique to the order.
- 03The server sends the same order
In the Conversions API, event_name Purchase and the same event_id.
- 04Meta matches the two records
If the name and ID match, they count as one action; for similar events, Meta prefers the one received first.
- 05One purchase in reporting
If the ID differs or is missing and nothing else matches, the same order can appear twice.
How do you set up the Pixel and Conversions API on Shopify?
On Shopify, the pixel and the Conversions API are managed in the data sharing settings of the Facebook & Instagram sales channel (Facebook and Instagram by Meta). The Shopify Help Center gives the path: in your Shopify admin, go to Sales channels > Facebook & Instagram > Settings > Data sharing settings. In the Customer data sharing section, turn customer data sharing on; in the CHOOSE LEVEL section, select a level; and if you haven’t connected a pixel yet, click Connect on the one you want to use.
In this setup, Shopify says the pixel tracks PageView, ViewContent, Search, AddToCart, InitiateCheckout, AddPaymentInfo and Purchase automatically. Purchase fires when a visitor completes the purchase and reaches the checkout thank-you page. Events that carry order value use the order’s total price, which includes duties, taxes and discounts; when you compare sales value in Meta with net revenue in your accounts, that explains part of the gap. If pixel code was added to your theme by hand earlier, or an app loads the same pixel separately, confirm with a test order after setup that each purchase arrives only once.
Shopify also notes that the levels can offer different privacy settings depending on when you installed the channel. The level you pick decides whether the Conversions API runs at all: you need Enhanced or Maximum for it, while on Standard purchases are measured from the browser only:
- Standard: only the Meta Pixel runs, collecting customers’ browsing behaviour in your store. Shopify notes that a browser-based ad blocker can stop the pixel from sharing data.
- Enhanced: the Conversions API runs alongside the pixel, and the purchase event is sent server to server between Shopify and Meta, so browser ad blockers can’t stop it. To help match customers, their name, location, email address, phone number and browsing behaviour in your store are shared.
- Maximum: the pixel and the Conversions API run together and share the same information as in Enhanced; according to Shopify, this level is also kept up to date with Meta’s latest advertising technology.
What if your store isn’t on Shopify?
Most store platforms connect to Meta through a partner integration, and Meta says platforms such as WooCommerce handle the deduplication parameters automatically, as Shopify does. On a custom-built site, or a setup run through a tag manager, nothing does that for you. Meta’s guided setup in Events Manager generates Conversions API instructions you can send to your developer, along with the access token your server uses to send events; the event_name and event_id parameters then have to be added to the code by hand.
ikas, a Türkiye-based e-commerce platform, follows the same pattern. According to its help centre, the Conversions API doesn’t work on its own but attaches to an existing pixel, so you connect the pixel first and then the Conversions API, with an access token generated in Events Manager. ikas says it then sends e-commerce events such as add to cart and purchase automatically and deduplicates browser and server events by event ID; it also recommends deleting any events previously set up by hand on the pixel, to avoid wrong or inflated counts.
Whatever the platform, add your domain to an allow list under Traffic permissions in Events Manager. Meta says this protects you from receiving events sent through your pixel from domains you don’t recognise or own, and it suggests an allow list over a block list because it gives you more control.
How do you test the setup in Events Manager?
You know the setup works from the Test events tool in Events Manager, not from results in Ads Manager. Meta says the tool lets you verify your event setup, detect unusual activity and check which events are processed and which are deduplicated. In Events Manager, click Data sources in the left menu, select your dataset and open the Test events tab; in the browser events section, enter your website URL and click Open website. What you do in the window that opens shows up in the tab, but only while the test events page stays open. Server events sent through the Conversions API are tested in the server events section of the same tab.
The most reliable test uses a real order: complete every checkout step and note the order number and time. One caveat from Meta matters here: when you finish, you click Clear activity, but the activity still appears in Events Manager, Ads Reporting and audience creation. In other words, your test orders end up in your reports too. Test information stays in the tab for 24 hours or until you clear it, and Meta says data can take 30 minutes or more to appear in your analytics.
Check three things in the test: the URL where Purchase fires, whether the browser and server records were deduplicated, and the parameters the event carries; the tool’s filters show each event’s URL and parameters. Then move to the Diagnostics tab. According to Meta, issues detected in the last 24 hours are listed under Active. Critical issues, marked with a red icon, should be fixed as soon as possible; warnings, with a yellow icon, are lower priority. A value parameter that may be set up incorrectly, or a pixel that has started sending events from new domains, shows up there as a warning.
We cover the Google side in our Google Ads conversion tracking checklist. The principle is the same: an event appearing in the interface shows that data is arriving; only a real test order shows that it arrives at the right moment, with the right value and only once.
Checklist for verifying with a test order
- Open the Test events tabData sources > your dataset > Test events; enter your site URL and click Open website.
- Place a real test orderNote the order number and time; test activity stays in your reports.
- Check where Purchase firesIt should appear only after payment, on the thank-you page.
- Check deduplicationThe Purchase from the browser and from the server should show as deduplicated.
- Read the value and currencyDoes value match the order total, and currency your store’s currency?
- Look at the Diagnostics tabFix critical issues (red icon) first, then the warnings (yellow).
- Match it to your store adminThe same order number should also appear in Shopify or your store platform.
How do you send purchase value and currency correctly?
A Purchase event arriving isn’t enough; it also needs to carry the order’s value and currency. According to Meta, setting a value and currency on standard events helps you measure return on ad spend (ROAS) and optimise for value. Without a value, Ads Manager can tell you how many purchases there were, but not which ad brought in the more valuable orders.
Meta’s formatting rules are strict. The value must be a decimal number greater than or equal to zero, with no letters, special characters, currency symbols or commas, and it must use a decimal point whatever the location or currency. The currency is a three-letter code and should be the one your store sells in. In Türkiye and much of Europe, prices on the page use a decimal comma, so take particular care with manual setups that read the value from the price shown on the page.
Watch out for hard-coded values too. In Meta’s example event code, the value and currency are typed in by hand; if that line isn’t filled in per order, every purchase is logged with the same value. Meta notes that you can set up a dynamic value and currency when values vary. On Shopify the platform sends the value; even so, check in your test order that the event’s value matches the order total and its currency matches your store’s.
What is event match quality, and how do you improve it?
Event match quality is a score that shows how effective the customer information parameters sent with your server events may be at matching those events to Meta accounts. Meta calculates it from 0 to 10, based on the quality of the customer information you send and the percentage of events matched to Meta accounts. It is available for website events sent through the Conversions API with the action source set to Website, and it uses the last 48 hours of data, so events need to arrive regularly.
Matching matters because, according to Meta, matched events help you attribute conversions to your ads and show ads to people who are more likely to convert; better event match quality may also increase the additional conversions reported. Meta recommends sending several customer information parameters where you can. In its priority list, email and click ID are high; phone number, external ID (a unique ID the advertiser assigns to the customer), browser ID, country, date of birth and Facebook Login ID are medium; first name, last name, city, postcode and lead ID are low.
Meta’s Business Tools Terms require you to hash contact information as described in Meta’s developer documentation and not to share any data that includes sensitive information. If you’re not using a ready-made platform integration, that is a rule your developer has to implement. To raise the score, work through the recommended actions Meta shows in Events Manager.
A note on consent: Meta states that, like the pixel, the Conversions API isn’t designed to be a means to bypass data-sharing policies such as Apple’s App Tracking Transparency framework or Europe’s ePrivacy Directive. Sending an event from the server is not a way around a visitor’s consent choice. Shopify describes data sharing as a choice and makes you responsible for explaining to customers, in your privacy policy, how their personal information is collected and processed. Meta requires you to have the lawful rights and any necessary consents before you share data, and says you’ll need your own legal counsel to build a compliance plan. Check with a lawyer which data you can share, and on what basis, under the GDPR, Türkiye’s KVKK or any other rules that apply to you; this article is not legal advice.
Which mistakes break purchase tracking?
Double counting isn’t a minor reporting glitch, because the number feeds straight into ROAS. Say 40 of the 100 purchases an ad really brought in are counted twice because they weren’t deduplicated: Meta shows 140 purchases and, if the average order value is the same, ROAS looks 1.4 times higher than it really is. The reverse happens too: if some purchases never reach Meta, a drop in performance can look like creative fatigue. That’s why we confirm that every sale reaches Meta before we touch the creative.
When we review an account’s measurement, these are the four mistakes we look for first; each can be checked with a test order and Events Manager:
- Duplicate purchases: if the browser and server events don’t carry the same event ID, or the same pixel loads by two routes (pixel code pasted into the theme plus a platform integration, say), the same order can arrive twice.
- A missing or wrong value: if Purchase arrives without a value or currency, with a hard-coded sample value or with a comma as the decimal separator, ROAS can’t be trusted.
- Test events mixed into real data: orders placed during testing stay in your reports even after you click Clear activity. If you don’t note the test days and order numbers, you’ll misread the gap between Meta and your store admin.
- An event firing on the wrong page: if Purchase fires before payment is complete, on the cart or checkout page for example, visitors who didn’t buy are counted as buyers. On Shopify, Purchase fires on the thank-you page; in a manual setup, check the event’s URL during your test.
How far do duplicate purchases inflate ROAS?
Reported ROAS = real ROAS × (reported purchases ÷ real purchases)
- Purchases the ad really brought in
- 100
- Purchases counted twice (not deduplicated)
- 40
- Real ROAS (example)
- 2.5
ROAS shown in Meta (140 purchases)3.5
Why don’t Meta purchases match the orders in your store?
Even with a correct setup, the purchase count in Meta won’t match the order count in Shopify or your store admin one for one. Your store counts every order; Ads Manager shows a purchase only if it is linked to an ad under the attribution setting you chose. Meta’s standard attribution setting has three windows for website conversions: 1 or 7 days after a link click (click-through), 1 day after an ad impression (view-through) and 1 day after an interaction with the ad other than a link click (engage-through). For video ads, playing 5 seconds of the video, or 97% of a video shorter than 5 seconds, also counts as an engagement. So someone who saw your ad without clicking and bought within a day can be counted as a result of the ad. Meta also notes that results can’t be compared in the Campaign Overview table across ad sets that use different attribution models.
So instead of trying to make the two numbers identical, track the ratio between them every week. If Meta’s purchases consistently exceed your store’s orders for the same period, look for double counting and events firing on the wrong page first; if the ratio suddenly drops, check the server connection and recent changes. Make business decisions on the net orders and profit in your store admin. We explain the difference between platform ROAS and overall ad efficiency in our ROAS, MER and POAS guide, and you can find your break-even ROAS with our break-even ROAS calculator.
Frequently asked questions
What is the difference between the Meta Pixel and the Conversions API?
The Meta Pixel is code on your website that sends events such as add to cart and purchase to Meta from the visitor’s browser; it is used to measure ad results, reach people who have visited your site and, through automatic bidding, reach people more likely to buy. The Conversions API sends the same events from your server or store platform, so it is less affected by browser loading errors, connectivity issues and ad blockers. Meta recommends using the two together.
Do I need the Conversions API if I already have the Pixel?
It isn’t technically required; the pixel works on its own. But because the pixel depends on the browser, it can miss events because of browser settings, connectivity issues and ad blockers. According to Meta, using the Conversions API alongside the pixel creates a more reliable connection. On Shopify you switch it on by choosing the Enhanced or Maximum data sharing level.
How do I set up the Conversions API on Shopify?
In your Shopify admin, go to Sales channels > Facebook & Instagram > Settings > Data sharing settings, turn on customer data sharing and choose Enhanced or Maximum as the level. On Standard only the pixel runs; on Enhanced and Maximum, the purchase event is also sent server to server between Shopify and Meta.
Why are my purchases being counted twice?
If the same purchase arrives from the browser and the server and can’t be deduplicated, it can be counted twice. For deduplication, both events need the same event name and event ID. A pixel that loads by two routes, or old events set up by hand on the pixel, can have the same effect. Place a test order and check in the Test events tab whether the event was deduplicated.
How do I know if my Pixel and Conversions API are working?
In Events Manager, select your dataset, open the Test events tab, enter your website URL, click Open website and place a test order. If the events show up in the tab, they are reaching Meta; also check that Purchase fires on the right page, with a value and currency, and that the browser and server events are deduplicated. Then fix any critical issues in the Diagnostics tab.
Sources and method note
This guide is based on the primary sources below and on calculation frameworks explained openly in the text. Worked examples are illustrative; cases marked “Real data” come from the dashboards of accounts we have worked on, with brands anonymised. Last checked: 19 October 2026.
- About Meta Pixel — Meta Business Help Center
- About Conversions API — Meta Business Help Center
- About deduplication for Meta Pixel and Conversions API events — Meta Business Help Center
- Implement Conversions API using personalized instructions in Meta Events Manager — Meta Business Help Center
- Test events tool: verify app and web browser events for Meta — Meta Business Help Center
- Test your server events using the test events tool — Meta Business Help Center
- About diagnostics in Meta Events Manager — Meta Business Help Center
- About event match quality — Meta Business Help Center
- Set the value and currency of your Meta Pixel standard events — Meta Business Help Center
- About attribution models and attribution settings — Meta Business Help Center
- About Meta Pixel traffic permissions — Meta Business Help Center
- Facebook data sharing (Facebook and Instagram by Meta) — Shopify Help Center
- Facebook Pixel and Conversions API connection (in Turkish) — ikas Help Center