Server-side events · Setup reference
Meta Conversions API via the Facebook & Instagram app on Shopify checker
Shopify's Facebook & Instagram app (by Meta) installs the Meta pixel and, at the Enhanced or Maximum data sharing level, adds the Conversions API so the purchase event also goes server to server, where browser ad blockers cannot stop it. Enhanced and Maximum also share name, location, email and phone for matching. Events usually reach Events Manager but fail to attribute or double count when data sharing is left on Standard, or a second pixel is still hardcoded in the theme or added by another app.
Read from the official documentation on 9 November 2026. Sources are listed at the end.
Check your own setup
Limited for this setup. The Shopify app builds and sends its own Conversions API payloads, which you never see. The checker only helps if you also run your own or a third-party CAPI integration and paste that payload: it checks fbc/fbp format, the 7-day event_time window, action_source, hashing, event_id and value/currency. It cannot see the app's server events and cannot detect a pixel hardcoded in your theme. For that, paste your thank-you page or theme snippet into conversion-tag-checker, which flags a Meta pixel Purchase call.
Open the Meta CAPI Event CheckerEndpoint and authentication
Managed by the app: connect your pixel under Sales channels > Facebook & Instagram > Settings > Data sharing settings. You never paste a CAPI access token.
Standard event names
Spelled exactly as Shopify + Meta expects them. A near miss is treated as a different event.
| Event | Use it for |
|---|---|
| PageView | visitor views a page |
| ViewContent | visitor views a product |
| Search | visitor searches |
| AddToCart | visitor adds a product to the cart |
| InitiateCheckout | visitor starts checkout |
| AddPaymentInfo | visitor enters payment information |
| Purchase | visitor completes a purchase and reaches the thank-you page. Shopify names Purchase as the event the Conversions API sends server to server. Order value is the order total price, including duties, taxes and discounts. |
Required and recommended fields
| Field | What it needs |
|---|---|
| Customer data sharing toggle | must be on before a pixel can be connected |
| CHOOSE LEVEL = Enhanced or Maximum | Standard is pixel-only. Enhanced and Maximum add the Conversions API, and Shopify describes Maximum as updated with Facebook's latest advertising technology. |
| Connected Meta pixel | click Connect on the pixel in Data sharing settings |
| No manually added pixel code | Shopify says to remove pixel code added through theme code before adding a Meta pixel ID through the app |
Match keys and hashing
| Key | Normalise and hash |
|---|---|
| name, location, email, phone number | Shared by the app at Enhanced and Maximum. The app builds the payload, so you do no hashing yourself. Meta's own rule for direct CAPI is SHA-256 after normalisation. |
Click ids
| Click id | Where it comes from |
|---|---|
| fbc | Do not hash. Format fb.${subdomain_index}.${creation_time}.${fbclid}, built from the ?fbclid= landing parameter or the _fbc cookie |
| fbp | Do not hash. Format fb.${subdomain_index}.${creation_time}.${random_number}, from the _fbp browser cookie |
Deduplication
- Shopify's help pages do not document how the app deduplicates pixel and server events. Meta's general rule applies: the same event name plus a matching eventID/event_id, received within 48 hours.
- Because the app sends both pixel and server events, any other source of the same events (a theme-hardcoded fbq, a custom pixel, another tracking app) is NOT deduplicated by the app and will double count.
Time limits and batch sizes
- Handled by the app. Meta's own CAPI limit is that event_time can be no more than 7 days old, so delayed backfills are rejected.
How to test before you trust it
- Facebook Ads Manager / Events Manager: Shopify says to confirm the pixel works in Facebook Ads Manager. Data appears only after customers are active in the store.
- Meta Test Events (Events Manager): Events Manager > Data Sources > your pixel > Test Events generates a test ID; send it as test_event_code and remove it before production (events with it are still processed).
- Shopify customer privacy test: App pixels load only when the visitor has granted every privacy permission the pixel declares (analytics, marketing, preferences, sale_of_data). Test with consent both declined and accepted.
Why events arrive but don't attribute
- Data sharing left on Standard: only the browser pixel runs, so ad blockers drop events and there is no Conversions API at all.
- Pixel still hardcoded in theme.liquid (between <head> and </head>) after installing the app: Shopify warns that more than one pixel causes duplicate or incorrect report data. Remove it, or clear it under Online Store > Preferences > Meta pixel.
- A second pixel from another app or a custom pixel firing the same Purchase: the app cannot deduplicate events it did not send.
- Consent: Shopify's pixel manager loads an app pixel only when the visitor has granted all the privacy permissions it declares. Declined marketing consent therefore means fewer browser events by design.
- Value mismatch: the app reports the order total price including duties, taxes and discounts, which may not match a revenue figure you compare it against.
- Shopify notes the available privacy settings per level can differ depending on when you installed the app, so an older install may not behave like the docs.
Sources
- Shopify Help Center: Facebook data sharing
- Shopify Help Center: Meta pixel (getting started)
- Shopify.dev: Web Pixels API pixel privacy
- Meta for Developers: Handling duplicate pixel and Conversions API events
- Meta for Developers: Customer information parameters
Platforms change these rules without notice. If a source says something different from this page, the source wins.