Conversions API setup for Shopify step by step
/ 9 min read
A correct Conversions API setup for Shopify sends every key event twice, once from the browser pixel and once from the server, with the same event ID so Meta can deduplicate them, and with enough customer data to match each event to a person. Most Shopify stores get there through the official Meta sales channel app set to its highest data sharing level, then verify it in Events Manager.
That sentence hides a lot of detail, and the detail is where tracking quietly breaks. Below is the checklist we run on every account before we spend a dollar on new campaigns. It is written for store owners and marketers who want to check their own setup, and it works whether or not you ever hire anyone. If you would rather have it done for you, our Conversions API setup service is part of every plan.
Why the pixel alone is no longer enough
The Meta pixel is a piece of JavaScript that runs in the shopper's browser. Browser tracking loses events for reasons the store cannot control. Ad blockers and privacy extensions stop the script from loading. Some browsers limit the lifetime of cookies set by scripts, so a shopper who clicks an ad today and buys next week may no longer be recognised. Shoppers who decline tracking on a consent banner should not be tracked by the pixel at all. Slow connections and quick tab closes cut events off before they fire.
The Conversions API, often shortened to CAPI, sends the same events from a server instead of the browser. The server knows about the order because the order exists in Shopify, regardless of what happened in the browser. When both channels report the same purchase and Meta deduplicates them, you get the coverage of the server and the click context of the browser.
Better data does two things. It makes reporting closer to reality, and, more importantly, it feeds the delivery system more and better conversion signals. Meta optimises toward the people most likely to take your chosen action. If a meaningful share of purchases never reaches Meta, the system learns from a smaller and skewed sample, and campaigns cost more than they need to.
The three ways to send server events from Shopify
There is more than one route, and the right one depends on the store's stack and how much control you need.
| Route | How it works | Best for | Watch out for |
|---|---|---|---|
| Meta sales channel app for Shopify | Shopify sends server events to Meta through the official integration once data sharing is set to the maximum level | Most stores on standard Shopify checkout | Limited control over custom events and parameters; settings can be changed by anyone with app access |
| Server side tag manager | Browser and webhook data go to your own tagging server, which forwards events to Meta and other platforms | Stores running several ad platforms who want one data layer | Hosting cost, maintenance, and a real risk of double counting if the app integration stays on too |
| Direct API integration | Your own code or a middleware service posts events to the Conversions API endpoint | Headless stores, subscription apps, offline and CRM events | Needs a developer for hashing, retries and event IDs |
For most Shopify brands the official app is the correct starting point. It is maintained, it handles deduplication with its own pixel, and it uses the order data Shopify already has. The common mistake is to install it, leave data sharing on a lower setting, and then add a second integration on top, which creates duplicates rather than coverage.
Event check after setup
sample portal view| Event | Browser | Server | Deduplicated | Match quality |
|---|---|---|---|---|
| Purchase | yes | yes | yes, event_id | good |
| InitiateCheckout | yes | yes | yes, event_id | good |
| AddToCart | yes | yes | yes, event_id | fair |
| ViewContent | yes | no | browser only | fair |
The checklist we run on every Shopify account
Work through these in order. Each step depends on the one before.
1. Inventory every pixel and integration
- List every place a Meta pixel or server integration could live. That includes the Meta sales channel app, theme code, custom pixels in Shopify's customer events settings, tag managers, third party apps for reviews, upsells or subscriptions, and any old script in additional checkout scripts.
- Open Events Manager and check how many pixels or datasets the business has. Old pixels from a previous agency or a previous store are common.
- Decide which single dataset is the source of truth for this store. Every event should go there and nowhere else.
2. Connect the official app with maximum data sharing
- In the Meta sales channel app, connect the correct business portfolio, ad account, pixel and catalog. A store connected to a personal or old business is a frequent cause of missing permissions later.
- Set customer data sharing to the highest level the app offers. The lower levels send browser events only, which defeats the purpose.
- Remove any hard coded pixel from the theme once the app is sending the same events, or you will count page views and add to carts twice.
3. Confirm deduplication works
Deduplication is the step most setups get wrong. Meta treats a browser event and a server event as the same event when they share an event name and an event ID within a short window. If the IDs differ or one side is missing them, Meta counts both and your purchases inflate.
- In Events Manager, open the Purchase event and look at the deduplication information. Both browser and server should appear as connection methods.
- Place a real test order with a discount code and check that it appears once, not twice, after processing.
- If you run a second server integration for other events, make sure it does not also send Purchase.
4. Raise match quality
Events Manager shows an event match quality score for server events, on a scale from 0 to 10. It reflects how many customer information parameters you send and how useful they are for matching. Purchase events from Shopify usually score well because checkout collects an email address, phone number, name and address. Upper funnel events like ViewContent and AddToCart score lower, because the store often does not know who the visitor is yet.
- Send the browser identifiers fbp and fbc with server events. The fbc value carries the click ID from the ad, which is one of the strongest signals for attribution.
- Send client IP address and user agent from the original request, not from your server.
- Hash personal data such as email and phone with SHA-256 after normalising it (lowercase, trimmed, phone in international format). The official app does this for you; custom integrations must do it themselves.
- Send an external ID, such as a hashed customer ID, so returning logged in customers match consistently.
5. Check purchase value and catalog IDs
- Purchase events must include value and currency. A missing currency or a value sent as text breaks value based bidding and ROAS reporting.
- Decide what value means for your store. Shopify integrations usually send order value; some brands prefer value before shipping and tax. Pick one and keep it consistent across all routes.
- The content IDs sent with ViewContent, AddToCart and Purchase must match the IDs in your Meta catalog. If the catalog uses variant IDs and the events send product IDs, catalog ads and Advantage+ campaigns cannot connect shoppers to products. Our article on Advantage+ shopping campaigns explains why this matters so much for automated campaigns.
6. Verify the domain and check consent handling
- Verify the store's domain in the business portfolio. It confirms who controls the domain and avoids configuration problems later.
- Check how the store's consent banner, if any, interacts with tracking. Shopify's customer privacy settings decide which events can fire for visitors in regions that require consent. Your server events should respect the same decision.
- For US states with privacy laws, review whether you need to send the limited data use flag. This is a legal decision for the store, not a tracking preference.
7. Test with real events, not assumptions
- Use the Test events tool in Events Manager while you browse the store, add to cart and complete a checkout.
- Compare Meta's reported purchases for a few days against Shopify orders from the same period. They will never match exactly, because Meta reports by attribution window and only counts what it can attribute, but a large or sudden gap is a sign that something broke.
- Check the Diagnostics tab weekly. Warnings about missing parameters, duplicate events or a drop in event volume usually appear there before anyone notices in the ad account.
Common Shopify tracking problems and how to spot them
| Symptom | Likely cause | First check |
|---|---|---|
| Meta reports more purchases than Shopify has orders | Duplicate Purchase events, often from two integrations | Deduplication panel and a test order |
| Purchases drop sharply overnight while sales stay flat | App disconnected, permissions changed, or checkout script removed | Diagnostics tab and the app's connection status |
| Low match quality on Purchase | Server events missing email, phone or browser IDs | Event details in Events Manager |
| Catalog ads show the wrong products | Content IDs in events do not match catalog IDs | Compare an event payload with a catalog item |
| Purchase value is zero or wrong | Currency missing, value sent in cents, or a subscription app overriding value | Event payload in Test events |
| Subscription renewals counted as new purchases | Subscription app sending Purchase on recurring orders | App settings and event source in Events Manager |
Events beyond the purchase
Once the core events are clean, the server channel opens options the pixel cannot offer.
Subscription and repeat purchase events
Brands with subscriptions often want first orders and renewals separated, so that campaigns optimise for new subscribers rather than people who were going to renew anyway. A custom event for first subscription orders, or a parameter that marks new customers, lets you report and sometimes optimise on what actually grows the business.
Offline and post purchase signals
Returns, cancelled orders and high value repeat customers can be sent later through the API. Not every one of these can be used for optimisation, but they improve reporting and audience building. A brand with a high return rate in one product line, for example, can see whether a campaign drives orders that stick.
Lead and quiz events
Many stores run quizzes or email capture forms. Sending these as Lead events from the server gives the delivery system a higher volume signal for new or small accounts, which can help during testing. The goal of the account should still be purchases.
How often to audit tracking
Tracking is not a one time job. Theme changes, new apps, checkout updates and permission changes all break things silently. We recommend a quick check every week and a full review whenever the store changes its theme, checkout, subscription app or consent setup.
- Weekly, look at the Diagnostics tab and the ratio of Meta purchases to Shopify orders.
- Monthly, review match quality for Purchase, AddToCart and InitiateCheckout.
- After any store change, run a full test order and check deduplication.
- Quarterly, review who has access to the business portfolio, pixel and ad account, and remove people and partners who no longer need it.
If you want a quick read on where your store stands before you change anything, our free Facebook ads audit checks tracking signals, catalog and landing page from your store address. When you are ready to hand the whole job to someone, every plan on our pricing page includes Conversions API setup and ongoing monitoring at no extra fee.
Frequently asked questions about Shopify and the Conversions API
Do I need a developer to set up the Conversions API on Shopify?
Not for the standard setup. The official Meta sales channel app handles server events once data sharing is set to the maximum level. You need a developer for custom events, headless stores, or a server side tagging setup.
Will the Conversions API make Meta report more sales?
It usually recovers events the pixel missed, so reported conversions often rise. That is a measurement change, not new sales. Judge results by Shopify orders and new customer cost, not only by the number in Ads Manager.
Can I run the official app and a tag manager at the same time?
You can, but only if each event is sent by one route or both routes share event IDs. Running two server integrations that both send Purchase without shared IDs is the most common cause of double counting.
Does the Conversions API bypass a visitor's consent choice?
It should not. Server events must follow the same consent decisions as the browser. A correct setup reads the store's consent state and only sends events the visitor has allowed.