Meta Conversions API
The Conversions API sends purchase and lead events to Meta directly from your server. Set up correctly alongside the Pixel, it recovers events the browser drops. Set up carelessly, it double-counts them.
It's tempting to treat CAPI as the “better” replacement for the Pixel. Meta doesn't recommend running one instead of the other — it recommends running both, sending the same event twice through different routes, so that if the browser event is blocked, the server event still lands.
The catch is that sending the same purchase twice means Meta needs a way to know they're duplicates rather than two separate sales.
Simplified — illustrative, not literal API payload structure.
Meta scores every server event on how confidently it could match it to a real Facebook or Instagram account, based on the customer parameters included — hashed email, phone, external ID, click ID, IP address and user agent. More matching parameters, more confidence, higher score.
It's useful as a diagnostic — a score that drops suddenly usually means a field stopped being sent — but chasing a higher number for its own sake isn't the point. A checkout that legitimately collects only an email will never hit the same score as one that also has a phone number and a matched click ID, and that's fine.
| What you see | What's usually happening |
|---|---|
| Purchases undercounted on iOS | Safari trims cookie lifespan and blocks some pixel requests outright. |
| Duplicate purchases in Ads Manager | Pixel and CAPI both fired without a shared event ID, so Meta counted each once. |
| Event Match Quality stuck low | Only a hashed email is sent — no phone, external ID, or click ID to strengthen the match. |
| Leads not appearing | Lead events are wired for the Pixel only; the server-side event was never added for that form. |
Attribix sends the matching server-side events once your Meta account is connected, using a shared event ID across the Pixel and server event so Meta can deduplicate them.
CAPI doesn't bypass a customer's tracking choice. If consent hasn't been given, the corresponding server event shouldn't be sent either — the API changes how data travels, not whether the customer's decision applies.
Running Google Ads as well? Google uses its own conversion setup rather than Meta's event ID — see Google Ads conversion tracking for Shopify.
Connect your store and Meta account to see duplicate rates and Event Match Quality for your actual traffic.
Want this set up for you instead? Ask about tracking and attribution setup, or see Meta Ads management.
See how this fits into the bigger picture: server-side tracking and Shopify attribution and ROAS tracking.