Skip to main content
Setup guide
Facebook AdsWooCommerce

Meta Conversions API on WooCommerce, step by step

WooCommerce has no app store for SignalBridge to hook into, so the setup is a script in your site header, and most stores already have a Meta Pixel from the official Facebook for WooCommerce extension or from a tag manager. The question is how SignalBridge fits next to that Pixel without Meta counting each order twice.

This guide answers it from the way the script and the extension actually behave. It covers who sends what to Meta, which setup suits your store, how a purchase and its value are recognised on the order received page, and how to prove it with a test order.

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

Install
One script in the site header, through a header scripts plugin or your theme
Event ID
Taken from the Meta Pixel call when it has one, so the browser and server copies match
Order number
The number in the /checkout/order-received/ URL
Purchase value
The Pixel call's value first, then a data layer purchase event, order structured data or the page
Match data
Email, phone and names typed at checkout (hashed), fbp and fbc, fbclid, IP address and user agent
Consent
Applies what your cookie banner passes to sb_consent
Not covered
Refunds, cancellations and orders created in the admin
Avoid
Two scripts or two Pixels on the same page

Who sends what to Meta on a WooCommerce store

The official Facebook for WooCommerce extension installs a Pixel and also sends events from your server. Its source code shows how it handles a purchase: it creates one event ID, stores it on the order, sends the server copy through the Conversions API with that ID, and injects the Pixel call on the order received page with the same ID. Meta's documentation says a browser event and a server event with the same name and ID, received within 48 hours, are deduplicated, so the extension on its own is designed to produce one purchase per order.

SignalBridge does not replace that Pixel. Its script wraps the page's fbq function, so every Pixel call passes through it. When the call carries an event ID, SignalBridge sends its server copy with that ID. When it does not, SignalBridge adds an ID to the browser call and uses the same one for the server copy. If the Pixel library is blocked in the shopper's browser, the call is still queued by the stub that Meta's snippet creates, and SignalBridge reads it from there, so a purchase can still reach Meta when the Pixel library is blocked.

That leaves two sensible setups, and the right one depends on what is already installed. They are compared below. If you keep the extension's server events and add SignalBridge for Meta, there are two server copies of one order. Meta's rule is written for a browser and server pair, so do not assume the second server copy is removed. Check it with the test order and the count comparison in this guide.

Which setup fits your store

Pick the row that describes your store today. You can change it later.

Your store todayWhat to doWhy
Facebook for WooCommerce is connected and its Conversions API worksKeep it. Add SignalBridge for the other platforms, and connect Meta in SignalBridge only if you want its consent handling, Lead events and delivery log for Meta tooMeta already has a server copy of each purchase. A second sender adds records, not coverage
A Meta Pixel from Google Tag Manager or pasted code, with no server eventsConnect Meta in SignalBridge and use the same dataset as the PixelSignalBridge becomes the only server sender and shares the Pixel call's event ID
No Meta Pixel on the siteConnect Meta in SignalBridge and consider adding a Pixel tooWithout a Pixel, Meta receives server events only and has no browser copy to compare
Two Pixels or two header scripts, for example one in the theme and one in a pluginRemove the extra copy firstEach copy sends its own event IDs and nothing links them

What Meta receives for each WooCommerce event

SignalBridge prefers your Pixel as the source and detects the event from the page only when no Pixel reports it.

EventWhere SignalBridge gets itNotes
PageViewThe Pixel's own PageView call, copied with its event IDIf the page has no Pixel, SignalBridge sends its own page view.
ViewContentThe Pixel call on a product page, otherwise product structured data on the pagePrice and name come from the same markup search engines read.
AddToCartThe Pixel call, otherwise a click on a button that looks like add to cartThe click fallback is switched off whenever one of your pixels was found on the page.
InitiateCheckoutThe Pixel call, otherwise any URL that contains /checkoutThe order received page lives under /checkout/, so an InitiateCheckout can also follow each purchase. Ignore it in funnel reports.
PurchaseThe Pixel call on the order received page, otherwise the page itselfOrder number from the URL. See the next table for the value.
LeadA form with an email field, such as a contact or quote formThe checkout form is not reported as a lead.

How a purchase and its value are found

The order received page is the only place SignalBridge sees a WooCommerce purchase. When your Pixel reports it there, SignalBridge uses that call. When no pixel does, it recognises the page by a heading such as Order received, so a theme that renames the heading or puts another heading above it can hide the page. These are the value sources, from most to least reliable.

SourceWhat it givesWatch for
Your Pixel's Purchase callThe value, currency and the event ID the extension generatedThis is the best case, because it is the number the store itself computed.
A data layer purchase eventValue, currency and transaction ID, if a tag manager or plugin pushes itUsed only when no Pixel call has a value.
Order structured data on the pageTotal, currency and order numberPresent only if the theme prints it.
The order summary on the pageThe total shown in the order overviewRead from page text. A thousands separator, as in 1,234.50, can be misread.
Products the visitor looked atAn estimate from the prices of products viewed during the visitLast resort. A value that is not the order total means the total was not found.

Set it up

Allow about twenty minutes. Work on a staging copy first if your store uses full page caching.

  1. Add the snippet to the header

    Copy the WordPress snippet from your pixel in SignalBridge and paste it into the header section of a header scripts plugin such as WPCode, or into a theme field that prints in the head. It must load on every page, including the checkout and order received pages.

  2. Exclude it from script delay and caching

    If a speed plugin delays, combines or defers JavaScript, add the SignalBridge script to its exclusions. Keep the order received page out of full page caching, because a cached copy cannot carry the right order or the right event ID.

  3. Find the dataset your Pixel reports to

    In Meta Events Manager open the dataset whose Pixel ID matches the one on your site. SignalBridge must send to that same dataset for Meta to line the two copies up.

  4. Connect Meta in SignalBridge

    In the pixel's settings choose Facebook Ads and Connect with Facebook, approve the permissions and select 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 from Events Manager.

  5. Connect your cookie banner

    Make the banner call sb_consent(true) when a shopper accepts marketing cookies and sb_consent(false) when they decline. If you operate where consent is required, set window.SB_REQUIRE_MARKETING_CONSENT = true above the SignalBridge snippet.

  6. Run the connection test

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

Test it with a real order

  1. Place a test order

    Use a low-value order with a test payment method. In the SignalBridge event stream you should see one Purchase with the WooCommerce order number, the right value and currency, and the Facebook destination marked as delivered.

  2. Compare the event IDs

    In Events Manager open Test events, repeat the order, and open the browser and the server Purchase. They should show the same event ID. If they differ, SignalBridge did not see the Pixel call, usually because of a script delay or a second Pixel.

  3. Reload the order received page

    Refresh it and confirm that no second Purchase appears. The order number in the URL is what lets a repeat be recognised.

  4. Compare counts after a day

    Compare yesterday's Meta Purchase count with your paid WooCommerce orders. A count well above your orders points to a second sender with different IDs. A count close to your orders means deduplication works.

Problems that are specific to WooCommerce

  • Meta shows more purchases than WooCommerce

    Check for a second sender with different IDs: a second Pixel, a Pixel inside a tag manager as well as the extension, or the order received page served from cache. Compare the event IDs in Test events, then remove the extra copy.

  • No Purchase appears after a test order

    The script may not have loaded on that page. View the page source of the order received page and look for the SignalBridge snippet. A caching or script-delay plugin is the usual cause.

  • The Purchase has the wrong value

    Open the event and see which source supplied it. If it came from the page text or the products viewed, push a purchase event to the data layer, or let the Pixel call supply the value.

  • Large orders show a tiny value

    A total with a thousands separator can be misread when it is taken from page text. Use a Pixel call or data layer value, and test an order above 1,000 if your orders reach that size.

  • The order number in SignalBridge differs from the one the customer sees

    SignalBridge uses the number in the URL, which is WooCommerce's internal order ID. A sequential order number plugin changes the number shown to customers but not the URL.

  • Server events stop arriving after a period of working

    Look for a reconnect alert in SignalBridge. An expired or revoked Meta access token is the usual cause, and delivery resumes once you connect Facebook again.

What to know before you rely on it

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

  • A purchase is recorded only when the buyer reaches the order received page in a browser that runs the script.
  • There are no refund, cancellation or manual order events for Meta.
  • If the same page also runs a TikTok Pixel, events mirrored from the Meta Pixel go to Meta only, not to your other connected platforms.
  • Event Match Quality follows what shoppers enter. A guest checkout without a phone number matches less than a returning customer.
  • Meta decides attribution, so Ads Manager and SignalBridge will not agree exactly.

Questions about this setup

Do I need to remove Facebook for WooCommerce?

No. Keep it for the catalogue and its Pixel. SignalBridge reads its Pixel calls and reuses their event IDs. Only decide whether to keep both servers sending purchases to Meta, using the table above and the count check.

Which dataset should I connect?

The one whose Pixel ID is on your site. Meta documents that browser and server events must go to the same Pixel to be deduplicated.

Will it work with Google Tag Manager?

Yes. If a tag in the container fires the Meta Pixel, SignalBridge sees the call like any other. Keep one Pixel, not one in the container and one in the theme.

Does it work with block-based checkout?

The script loads on those pages too. What can differ is how the order received page prints the total, so run the test order and check the value.

What happens for shoppers who block the Pixel?

The Pixel's call is still queued by the stub in your page, so SignalBridge can send the server copy with its event ID. A shopper who blocks the SignalBridge script as well is not seen, which is why a custom domain helps.

Can SignalBridge send refunds to Meta?

No. There is no order feed from WooCommerce, and Meta has no refund event for the Pixel or the Conversions API.

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.