- 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 event | Sent to Meta as | What is attached |
|---|---|---|
| page_viewed | PageView | Page URL and referrer, fbp, fbc or the fbclid from the landing URL, IP address and user agent. |
| product_viewed | ViewContent | Product ID, price, currency and product URL. |
| product_added_to_cart | AddToCart | Product, quantity, value and currency. |
| checkout_started | InitiateCheckout | Cart contents, total and currency. |
| checkout_contact_info_submitted | InitiateCheckout | Sent again with its own event ID once an email address or phone number has been entered. |
| payment_info_submitted | AddPaymentInfo | Checkout contents and total. |
| checkout_completed | Purchase | Value, 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 ID | Adds 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 parameter | Source on a Shopify store | Prepared as |
|---|---|---|
| Email (em) | The checkout email, or the signed-in customer's email | Trimmed, lowercased, SHA-256 |
| Phone (ph) | The checkout or billing phone number | Digits with country code, SHA-256 |
| First and last name (fn, ln) | Names on the billing or shipping address | Lowercased, letters only, SHA-256 |
| External ID | The Shopify customer ID once an email is known, otherwise a hashed visitor identifier | SHA-256 |
| fbc and fbp | The _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 it | Not hashed |
| City, state, ZIP, country | The order's shipping address, carried by the webhook copy | Normalised to Meta formats (a US ZIP+4 is cut to five digits), SHA-256 |
| IP address and user agent | The shopper's request to your tracking domain | Not hashed |
Consent and the order webhook
The Web Pixel reads Shopify's Customer Privacy status before it sends anything and tells SignalBridge whether marketing use is allowed. When it is not, the purchase is recorded for your reports but never reaches Meta.
The order webhook is different. Shopify's order data contains no consent decision, so SignalBridge treats the webhook copy of a purchase as unconsented unless the storefront saved a decision on the order. A store that uses only the Shopify app does not save one, so for those stores the webhook copy serves order records, refunds and reports, and the browser copy from the Web Pixel is what carries the purchase to Meta. It also means the shipping address fields in the table above reach Meta only when a consent decision was saved with the order.
Two practical consequences follow. Orders created outside the storefront, such as draft orders and point-of-sale sales, have no browser session and are not sent to Meta. And a shopper whose browser blocks the Web Pixel's request to your tracking domain cannot be recovered from the webhook alone, which is why a custom tracking domain matters.
Set it up
Allow about ten minutes, plus the time your DNS provider needs if you add a custom domain.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
- Shopify Help Center: Facebook data sharingThe Standard, Enhanced and Maximum levels and what each one sends.
- Meta for Developers: Handling duplicate Pixel and Conversions API eventsThe event name plus event ID rule, the 48-hour window and the fbp and external ID fallback.
- Meta Business Help Center: About event match qualityThe 0 to 10 score and the priority of each customer information parameter.