What CAPI is and when it complements browser measurement
The standard Meta Pixel runs in the browser. It sends events (PageView, AddToCart, Purchase) directly from your website in the user's browser to Meta.
The problem: some browser events may be missing or incomplete. The impact varies by audience, device, browser, implementation and consent. Causes include:
Ad blockers and browser protections
Some extensions and browsers can limit pixel loading or event transmission.
iOS, ATT and browser restrictions
Consent and browser limitations can reduce available signals. The actual impact is measured on the store's implementation and audience.
Browser fingerprinting reduction
Chrome and Firefox are progressively removing third-party cookies and limiting fingerprinting. The standard pixel depends on cookies for identification.
CAPI (Conversions API) can complement the browser source through events sent from the server to Meta. It does not bypass consent, justify sending unauthorized data or guarantee recovery of every signal.
Prerequisites: What to Prepare Before Starting
Before starting, you need:
Admin access to the Shopify store
Owner or staff access with Apps permission. If you are a developer working for a client, you need to be added as a Collaborator to their Shopify account.
Admin access to Meta Business Manager
And to the ad account connected to the store. If you do not yet have Business Manager, the first step is business.facebook.com.
A Meta Pixel already created in Events Manager
If you do not yet have a Pixel, create one in Events Manager โ Connect Data Source โ Web. This generates a Pixel ID (a number with 15+ digits).
~25 minutes of uninterrupted time
Setup is not a two-step task. Interruptions risk losing context and misconfiguration. Set aside the time you need.
Step 1: Connect Shopify โ Meta Business
Since 2024, Shopify has offered an official native app for Meta Pixel & CAPI: the Facebook & Instagram channel. This is the correct route in 2026 (compared with third-party methods from 2022).
Steps:
- Go to Shopify Admin โ Sales channels โ Add app
- Search for "Facebook & Instagram" (official, developed by Meta Platforms, Inc.)
- Click "Add app" and confirm permissions
- You will be redirected to Meta Business to authenticate
- Select the correct Business Manager and ad account
- Connect the existing Pixel (select it from the list)
- Connect: the basic integration is now active
Step 2: Enable Conversions API in Shopify
The Shopify โ Meta integration in Step 1 configured only the browser Pixel. Now we enable CAPI (server-side):
- Go to Shopify Admin โ Sales channels โ Facebook & Instagram
- Click "Settings" at the top right
- Under "Data sharing," select: Maximum
- Standard: browser Pixel only (insufficient in 2026)
- Enhanced: browser Pixel + limited partner data
- Maximum: Pixel + Conversions API + Customer Information sharing
- Confirm permissions
- Save
Check that CAPI is active
Go to Events Manager โ Pixel โ Overview. You will see 2 columns: "Browser" and "Server". If both have similar numbers after 24โ48h, CAPI is working. If "Server" is 0 or very low, something is wrong: see Troubleshooting.
Step 3: Check Deduplication
The most serious problem with misconfigured CAPI: every event is reported twice (once from the browser Pixel, once from server CAPI). Your ROAS looks twice as high as reality. You make decisions using false data, scale incorrectly and cause damage.
Shopify's official integration performs automatic deduplication using a unique event_id for each event. Check:
- Events Manager โ Pixel โ Overview
- Select the last 7 days
- Click any event (e.g. Purchase)
- View the "Browser vs Server" report
What you should see:
Deduplication working correctly
- Browser: 100 events
- Server: 100 events
- Deduplicated: 100 events (NOT 200)
- "Match between browser and server: 95%+"
Deduplication NOT working
- Browser: 100 events
- Server: 100 events
- Deduplicated: 200 events (double reporting)
- ROAS in Ads Manager is twice the Shopify figure
Step 4: Improve Event Match Quality (EMQ)
EMQ reflects the quality of available matching parameters. Interpret a score alongside event type, consent and the data the user provides.
5 checks for better parameters
Send a hashed email with each event
The strongest matching parameter. Shopify Maximum data sharing does this automatically for logged-in customers and at checkout. Capture emails before checkout (newsletter popup) to improve matching.
Hashed phone number at checkout
Shopify has it for every order. Do not make a phone number mandatory just to increase EMQ. Request it when needed for the purchase or delivery and send only data allowed by privacy and consent settings.
fbp and fbc parameters
Meta's native cookies for cross-session tracking. Shopify's official integration sets them automatically. Check Chrome DevTools โ Application โ Cookies.
Consistent external_id
The Shopify customer ID (when available), sent as external_id for each of that customer's events. Helps Meta build the buyer profile over time.
Physical address + country at checkout
City, state, country, zip. All hashed. Shopify sends them automatically from checkout. Make sure excessive validation is not discarding poorly formatted data.
Step 5: Test Events Manager: Final Check
Now we test end to end:
- Events Manager โ your Pixel โ the "Test Events" tab
- For events sent from the server, copy the code from Test Events.
- In a custom CAPI integration, include the code in the
test_event_codeparameter of the server request, alongside thedatalist. Do not put it infbclid: that identifies an ad click. If the managed Shopify integration does not expose the parameter, use the diagnostics and testing procedure documented by the provider. - Browse products, add to cart and run a test checkout (using Shopify test mode or a test gateway)
- Back in Events Manager, view the events arriving live
What you should see for each event (e.g. Purchase):
- โ Both Browser and Server: the event comes from both sources
- โ Deduplicated: marked as deduplicated
- โ EMQ and parameters analyzed in the context of available data
- โ
Matching parameters sent:
em, ph, fbp, fbc, external_id, ct, st, country, zp
Troubleshooting: Edge Cases We See
The "Server" column is 0 after 48h
Typical cause: the GDPR consent banner blocks Customer Information sharing. Check Shopify Settings โ Customer Privacy; make sure tracking permissions are active and the banner collects consent correctly.
EMQ remains low after configuration
Check eligible parameters, consent and implementation. Do not force data collection just for the score; request only necessary and legitimate information.
Deduplication shows "no match"
Typical cause: Shopify sends different event_id values for Browser and Server. Solution: temporarily disable third-party apps that inject Pixels manually (Facebook Pixel Helper extension; remove unofficial Shopify apps that manipulate Pixel events).
Test Events does not show Purchase events
Test order behavior depends on the integration and configuration. Check connector documentation and server diagnostics. Do not automatically make a real payment to force an event; use the test environment and obtain explicit approval for any real transactions.
Review After 7 Days: What to Compare
Do not immediately attribute a ROAS change to CAPI implementation. Wait for a relevant window and compare Meta and Shopify data for the same period.
After 7 days, compare:
Before CAPI
- Document EMQ and parameters
- Document browser events
- Record the store's total Purchases
- Save the difference between Meta and Shopify
After implementation
- Check EMQ in the same context
- Confirm server-side events
- Confirm deduplication
- Reconcile with Shopify again
Facebook Ads
TikTok Ads
Shopify