- Mirrored events
- ViewContent, AddToCart, InitiateCheckout, Purchase, Lead (from SubmitForm), CompleteRegistration, Subscribe and Contact
- Event IDs
- Reuses the event_id passed to ttq.track, otherwise creates one and adds it to the browser call
- Purchase name
- Sent as CompletePayment, which TikTok converts to Purchase
- Click ID
- ttclid from the landing page, stored for 30 days (Safari caps JavaScript cookies at seven days)
- Match data
- ttp cookie, hashed email and phone, IP address and user agent, subject to consent
- Consent
- Also calls grantConsent, revokeConsent or holdConsent on the TikTok Pixel
- Needs
- A TikTok Pixel on the page and the Pixel Code in SignalBridge
- Not sent
- Refunds and cancellations, and events that happen inside TikTok Shop
How many copies of a purchase TikTok can receive
With the official extension and SignalBridge both active, a single order can in principle produce three events: the browser Pixel event, the extension's own Events API event and SignalBridge's Events API event. TikTok deduplicates on the event name plus the event ID, within 48 hours. Events that share both are treated as one event, and events with different IDs are not.
SignalBridge does its part: it reads the event_id from the third argument of ttq.track, and if there is none it creates one and puts it into the browser call itself, so its server event and the browser event always match. Whether the extension's server event also carries that ID depends on whether the extension puts it in the browser call. TikTok's own listing says deduplication work may be required if you use a custom setup alongside the extension, so treat this as something to check, not assume.
The safe rule is one server sender for each event. Run the test below, look at the counts and then decide which sender stays.
What Events Manager shows and what it means
After a test order, open the Pixel in TikTok Events Manager. The Pixel page lists each event as Browser, Server or Server and Browser.
| What you see | Likely cause | What to do |
|---|---|---|
| Purchase shows Server and Browser and the count matches your paid orders | One browser event and one or more server events share an ID | Nothing. This is the intended result. |
| Purchase count is roughly double your orders | Two server senders, with different event IDs | Turn off one of them for Purchase, or make sure both use the ID from the browser call. |
| Purchase shows Browser only | No server copy reached TikTok, from SignalBridge or from the extension | Check in SignalBridge that the TikTok destination is connected and that consent was granted in your banner. |
| Purchase shows Server only | The Pixel did not fire, or an ad blocker removed it | This is normal for a share of shoppers and is why the server copy exists. |
Events SignalBridge copies from the TikTok Pixel
Only calls to ttq.track are copied. Page views sent with ttq.page and events with other names are left alone.
| Pixel event | What SignalBridge does |
|---|---|
| ViewContent | Copies the call with its product data. Without it, a product page is recognised from the page itself. |
| AddToCart | Copies the call, so the value and product IDs are exactly what the extension reported. |
| InitiateCheckout | Copies the call on the checkout page. SignalBridge also recognises checkout pages by their path, and the order received page lives under /checkout/, so a completed order can record one extra server InitiateCheckout. |
| Purchase or CompletePayment | Copies the call with its value, currency and the order number from the order received URL, and sends it as CompletePayment. Reloading the page does not send it twice for the same order. |
| SubmitForm | Becomes a Lead. Only one Lead is sent per browser each hour, so a second form on a different page may not produce another. |
| CompleteRegistration, Subscribe, Contact | Copied under the same name. Registration and Lead are also limited to one an hour per browser. |
Matching the shopper to a TikTok ad click
The Events API needs something to tie a server event to a person. SignalBridge sends the ttclid it saved from the landing page, the _ttp cookie that the TikTok Pixel sets, the shopper's IP address and user agent, and hashed email and phone when it has them. The email and phone are kept for 30 minutes after the shopper types them into checkout, so the purchase page can still use them. Advanced Matching in the extension is a separate Pixel setting and is not required.
Consent is passed in both directions. SignalBridge holds server events when your banner says marketing is declined, or when you have required a choice and none was made. It also calls grantConsent, revokeConsent or holdConsent on the TikTok Pixel to match, so the browser and server sides do not disagree.
Set it up
Start in a quiet period if the store already spends on TikTok, because you will be comparing counts.
Check which Pixel the store runs
In TikTok Events Manager note the Pixel Code, and whether it was created by the official extension, pasted in by hand or added through a tag manager. SignalBridge must be connected to this same Pixel.
Add the snippet to the header, ahead of the Pixel
Paste the SignalBridge WordPress snippet into a header scripts plugin or theme field so it loads before any TikTok code. SignalBridge can only copy ttq.track calls made after its script has loaded.
Exclude it from script delay and caching
Keep the snippet out of any plugin that delays, combines or defers JavaScript, and keep the order received page out of full page caching.
Connect TikTok in SignalBridge
Open the pixel in SignalBridge, choose TikTok Ads and either sign in with TikTok and pick the Pixel, or enter the Pixel Code with an Events API access token and the advertiser ID.
Send a test event
Copy the current Test Events code from TikTok Events Manager, paste it into the Test field on the TikTok card in SignalBridge and run the test. Open the Test Events tab for your Pixel while you do. Test traffic goes only to the test stream, never to production reporting.
Connect your cookie banner
Have the banner call sb_consent(true) when marketing is accepted and sb_consent(false) when it is refused. If you need an explicit choice first, set window.SB_REQUIRE_MARKETING_CONSENT = true above the snippet.
Test it and decide on one server sender
Place a real test order
In a browser that accepts marketing cookies, add a product, complete checkout and land on the order received page. In the SignalBridge event stream the Purchase should appear with TikTok listed as a delivered destination.
Read the Pixel page the next day
In TikTok Events Manager, open the Pixel and look at how Purchase is reported: Browser, Server, or Server and Browser. Server and Browser means TikTok has matched the two copies.
Compare counts with paid orders
Count the Purchase events TikTok received for a full day and compare them with the paid WooCommerce orders of the same day. Expect fewer in TikTok, never more.
Switch one sender off if counts are doubled
If Purchase is close to double, turn off the server events from one of the two sources for that event and repeat the comparison.
Problems that are specific to this combination
SignalBridge misses TikTok events that fire as the page loads
The TikTok code ran before the SignalBridge script. Move the snippet higher in the header. Calls made before the wrapper is in place are not replayed, and calls that do not go through ttq.track, for example through a Pixel instance, are not seen.
Purchases are counted twice
The extension and SignalBridge each send a server event and the IDs differ. Keep one server sender for Purchase.
Revenue appears in the wrong currency
If a call carries a value without a currency, the server event is sent as USD. Check that the Pixel call includes the currency, and look at the test event.
Purchases are logged for orders that were never paid
The order received page is also shown for bank transfer and cash on delivery orders. Compare against paid orders, not against all of them.
Events from the Pixel do not reach Google Ads or other platforms
When a page runs both a Meta Pixel and a TikTok Pixel, SignalBridge sends each pixel's events only to its own platform. Check the destination list on the event.
No events after the visitor accepts cookies late
SignalBridge looks for the Pixel for about six seconds after the page loads. A Pixel that your banner loads only after consent may be missed on that page view.
Limits to keep in mind
- Refunds, cancellations and manual admin orders are not sent, because SignalBridge only sees pages the shopper loads.
- Orders placed inside TikTok Shop do not pass through your store pages and are not seen.
- TikTok decides attribution. Its window, view-through rules and reporting delay mean counts will not match WooCommerce exactly.
- On Safari the ttclid cookie lasts seven days at most, so a later purchase may reach TikTok without the click ID.
Questions about this setup
Do I need to uninstall TikTok for WooCommerce?
No. Keep it for catalog sync, TikTok Shop and campaign tools. What matters is that only one source sends each server event, or that all sources share the event ID.
Can I use SignalBridge without a TikTok Pixel on the page?
Yes. SignalBridge then recognises the order received page itself and sends server events. You lose the browser event, which means less matching data, so a Pixel with Events API is the better setup.
Why does SignalBridge send CompletePayment and not Purchase?
TikTok renamed the standard event to Purchase in 2025 and converts the old name automatically. Check the event name in Events Manager and compare the count to confirm it is landing in the right place.
Does it work if I connected an existing Pixel to the extension?
Yes. SignalBridge only needs the same Pixel Code. TikTok notes that custom setups can need extra work to avoid duplicates, which is the check described above.
Why does TikTok show fewer purchases than WooCommerce?
Only purchases TikTok can tie to an ad click or a modelled match are counted, and TikTok applies its own attribution window. Orders from other sources are not expected to appear.
What happens if the shopper declines cookies?
With consent denied, SignalBridge does not send the event, clears the stored click ID and identifiers and tells the Pixel to revoke consent.
Sources
The vendor documents this guide relies on. Statements about SignalBridge come from the product itself.
- WooCommerce Marketplace: TikTok for WooCommerceThe extension installs the Pixel and Events API, and its note on deduplication with custom setups.
- TikTok Help Center: Event deduplicationThe event name plus event ID rule and the 48-hour window.
- TikTok API for Business: Get started for Events API 1.0 WebSending from both the Pixel and Events API needs deduplication.
- TikTok API for Business: Verify events setupThe Browser, Server, and Server and Browser columns on the Pixel page.