Skip to main content
Setup guide
Facebook AdsShopify

Meta Conversions API on Shopify, step by step

On a Shopify store, Meta can hear from up to three senders: the browser Pixel that Shopify's Facebook & Instagram channel installs, that channel's own Conversions API connection if you raised its data sharing level, and SignalBridge. This guide shows what SignalBridge sends from the Shopify app, how it relates to the other two, and how to end up with exactly one server-side sender.

Everything here was checked against the app's code and the Meta and Shopify documents listed at the end. Where the behaviour depends on consent or on what Shopify exposes to a pixel, the page says so instead of rounding it up.

By Kiril Kostov, Founder of SignalBridge. Checked against the product and the sources below on .

Install
Shopify App Store app, no theme code to edit
Browser events
Shopify Web Pixel: PageView, ViewContent, AddToCart, InitiateCheckout, AddPaymentInfo and Purchase
Purchase event ID
shopify_order_ plus the Shopify order ID, identical on the browser copy and the order webhook copy
Match data on a purchase
Hashed email, phone, first and last name and external ID; fbp and fbc or the fbclid; IP address and user agent
Address fields
City, state, ZIP and country come from the shipping address on Shopify's order record
Consent
Follows Shopify's Customer Privacy status
Meta side
The same dataset as your Pixel, with action source Website
Avoid
A second server-side sender, such as the Facebook & Instagram channel at Enhanced or Maximum

Who sends what to Meta on a Shopify store

Shopify's Facebook & Instagram channel has three data sharing levels. According to Shopify's help centre, Standard uses the Meta Pixel in the shopper's browser, and a browser-based ad blocker can stop it. Enhanced adds the Conversions API, which sends the purchase from Shopify's servers together with the customer's name, location, email address and phone number. Maximum adds Meta's newest advertising technology on top of that.

SignalBridge is a separate server-side sender. If the channel is at Enhanced or Maximum and SignalBridge is connected to the same dataset, Meta receives the same order from two servers under two different event IDs and has no dependable way to know it is one order. The rule that avoids this is one server-side sender per dataset: keep the channel at Standard and let SignalBridge send the Conversions API events, or leave the channel at Enhanced and do not connect Meta in SignalBridge.

SignalBridge's Web Pixel runs inside Shopify's sandbox, so it cannot add an event ID to the Meta Pixel that the channel loads on your storefront. Meta documents that it deduplicates a browser event and a server event that carry the same event name and event ID within 48 hours, and that it also has a fallback which matches on the event name together with fbp or external ID. SignalBridge sends fbp when the cookie exists and an external ID for known customers, so the fallback can apply. Meta also notes that it generally works only when the browser event arrives before the server event, so it is not a guarantee. Confirm it on your own store with the test below instead of assuming it.

What Meta receives for each Shopify event

The Web Pixel subscribes to these Shopify events. The last row is the order webhook, which Shopify sends from its servers.

Shopify eventSent to Meta asWhat is attached
page_viewedPageViewPage URL and referrer, fbp, fbc or the fbclid from the landing URL, IP address and user agent.
product_viewedViewContentProduct ID, price, currency and product URL.
product_added_to_cartAddToCartProduct, quantity, value and currency.
checkout_startedInitiateCheckoutCart contents, total and currency.
checkout_contact_info_submittedInitiateCheckoutSent again with its own event ID once an email address or phone number has been entered.
payment_info_submittedAddPaymentInfoCheckout contents and total.
checkout_completedPurchaseValue, currency, order ID, product contents, and hashed email, phone, names and external ID. The event ID is shopify_order_ plus the order ID.
orders/create (webhook)Purchase, same event IDAdds the shipping city, state, ZIP and country. Subject to the consent rule explained below.

Where each match field comes from on Shopify

Meta ranks email and click ID highest among the parameters that improve Event Match Quality. Both are available on a Shopify purchase.

Meta parameterSource on a Shopify storePrepared as
Email (em)The checkout email, or the signed-in customer's emailTrimmed, lowercased, SHA-256
Phone (ph)The checkout or billing phone numberDigits with country code, SHA-256
First and last name (fn, ln)Names on the billing or shipping addressLowercased, letters only, SHA-256
External IDThe Shopify customer ID once an email is known, otherwise a hashed visitor identifierSHA-256
fbc and fbpThe _fbc and _fbp cookies when the Meta Pixel has set them and Shopify lets the pixel read them. When only the fbclid is known, fbc is built from itNot hashed
City, state, ZIP, countryThe order's shipping address, carried by the webhook copyNormalised to Meta formats (a US ZIP+4 is cut to five digits), SHA-256
IP address and user agentThe shopper's request to your tracking domainNot hashed

Set it up

Allow about ten minutes, plus the time your DNS provider needs if you add a custom domain.

  1. Install the SignalBridge app

    Install it from the Shopify App Store and approve the permissions. A pixel for your store is created and the Web Pixel starts capturing events. No theme code is involved.

  2. Find the dataset your channel uses

    In Meta Events Manager open the dataset (Pixel) that your Facebook & Instagram channel reports to. Connecting SignalBridge to that same dataset is what lets Meta put the browser and server events side by side.

  3. Connect Meta in SignalBridge

    Open the pixel's settings, choose Facebook Ads and Connect with Facebook, approve the permissions, then pick the ad account and that dataset. To use a token instead, choose Manual setup and enter the Pixel ID and a Conversions API access token generated in Events Manager.

  4. Leave one server-side sender

    In Shopify admin open Sales channels, Facebook & Instagram, Settings, then Data sharing settings, and choose Standard if SignalBridge sends the server events. If you prefer to keep the channel at Enhanced or Maximum, skip the previous step and do not connect Meta in SignalBridge.

  5. Add a custom tracking domain

    Create a subdomain such as data.yourstore.com, point a CNAME at the SignalBridge tracking host and select it in the pixel settings. It keeps the Web Pixel and the Conversions API requests on your own domain.

  6. Run the connection test

    Copy the current Test Events code from Events Manager, paste it into the Test field on the Facebook card in SignalBridge and run the test. The test event then shows up in the Test events tab for that code.

Test it with a real order

  1. Place a test order

    Use Shopify test payments or a low-value order. In the SignalBridge event stream you should see one Purchase with the Shopify order number and the Facebook destination marked as delivered.

  2. Watch it in Meta Test Events

    In Events Manager open Test events, enter your test code and repeat the order. The SignalBridge purchase shows with the Server label. If the channel Pixel fired too, check whether Meta lists one deduplicated purchase or two.

  3. Compare counts after a day

    In Events Manager compare yesterday's Purchase count with your Shopify orders for the same day. A count well above your orders points to a second sender. A count close to your orders means deduplication is working.

  4. Look at match quality later

    Event Match Quality for Purchase updates with a delay. SignalBridge reads Meta's figure and alerts you when an event falls below 6 and has dropped by at least a point from its recent median. That alert is SignalBridge's rule of thumb, not a Meta threshold.

Problems that are specific to Shopify

  • Meta shows roughly twice the purchases Shopify does

    Most often the Facebook & Instagram channel is at Enhanced or Maximum and is sending its own server events. Set it to Standard, or disconnect Meta in SignalBridge. If the channel is already at Standard, Meta did not match the browser and server copies. Compare the two in Test Events and check that fbp is present on the server event.

  • Purchases appear only as Browser events

    The server copy was held back by consent, or the Meta connection needs to be authorised again. Open the event in SignalBridge and read its consent and delivery state.

  • Server purchases carry no city or ZIP

    Those fields come from the shipping address on Shopify's order record and travel with the webhook copy only. See the consent section above.

  • A value arrives without a currency

    Shopify supplies the currency with the checkout, so this happens for custom events. Set the store's default currency in the pixel settings. SignalBridge never guesses a currency from your domain.

  • Events stop after weeks of working

    Meta rejected the access token. SignalBridge pauses delivery and asks you to reconnect. Choose Connect with Facebook again.

  • Test Events shows nothing

    Test codes change in Events Manager. Copy the current one, paste it into the Test field and keep the Test events tab open while you run the test.

What to know before you rely on it

Where this setup stops, so the numbers you see are read correctly.

  • If a shopper's browser blocks the Web Pixel's request and no consent decision was saved on the order, the purchase is not sent to Meta.
  • Event Match Quality follows what shoppers enter. A guest checkout without a phone number matches less than a signed-in customer.
  • Meta decides attribution. Ads Manager and SignalBridge will not agree exactly because of attribution windows, modelling and reporting delay.
  • The Facebook & Instagram channel also manages your catalogue and ads from Shopify admin. SignalBridge does not replace those features.

Questions about this setup

Can I keep Shopify's Facebook & Instagram channel installed?

Yes. Keep it for the catalogue, ad creation and its browser Pixel. Set its data sharing to Standard so it does not send a second set of server events.

Which Meta dataset should SignalBridge connect to?

The one your channel's Pixel already uses. Meta documents that browser and server events must go to the same Pixel ID to be deduplicated.

Does SignalBridge replace the Meta Pixel on Shopify?

No. The browser Pixel stays. SignalBridge adds server-side events, and its Web Pixel does not run Meta code in the storefront.

Will Meta count each order once?

SignalBridge's own browser and webhook copies share one event ID, so they count once. Against the channel's browser Pixel, deduplication depends on Meta matching either the event ID or the fbp and external ID fallback, so confirm it with the order test.

Do guest checkouts work?

Yes. For guests the match data comes from the checkout email and phone number, and the external ID falls back to a hashed visitor identifier.

What happens on a store with a cookie banner in the EU?

Shopify's Customer Privacy status decides. The Web Pixel reads it, and a shopper who has not allowed marketing use is not sent to Meta.

Sources

The vendor documents this guide relies on. Statements about SignalBridge come from the product itself.

Try this setup with SignalBridge

Every plan starts with a 14-day free trial. Connect it, send a test conversion and see the result before you decide.