Why TikTok loses WooCommerce sales
Most TikTok ad clicks open in TikTok's in-app browser, which keeps its own cookies. A visitor who taps your ad, adds to cart, then opens your site in Safari or Chrome to pay with saved details starts a new session. The TikTok pixel in that browser has no idea the visit started with an ad.
WooCommerce adds its own weak spots. The pixel usually reports the purchase when the order-received page loads, and many payment methods send the buyer to another site first: PayPal, iDEAL through a bank app, Klarna or a hosted card page. If the buyer pays and closes the tab, the page never loads and TikTok never hears about the sale. Script-delay and cache settings in optimization plugins can hold the pixel back further.
The TikTok Events API sends the purchase from a server, based on the order itself, so none of that stops it.
Which WooCommerce orders should reach TikTok
TikTok optimizes towards the people who trigger your CompletePayment events. If unpaid orders count, it learns to find people who start a bank transfer and never finish it. Only paid orders should go through:
- Processing or Completed after a successful payment: send it.
- On hold (bank transfer, cash on delivery): wait until the order is actually paid.
- Pending payment, Failed, Cancelled or a checkout draft: don't send it.
- Refunds: they shouldn't create a new purchase.
What TikTok needs from a WooCommerce order
To link a server purchase to an ad, TikTok uses a mix of identifiers. Some come from the order, others only exist during the visit, so they have to be saved before checkout:
- ttclid: TikTok's click id, added to the landing URL when someone clicks an ad. It's the strongest link to the ad, and it's gone once the visitor moves on unless it was saved.
- The _ttp cookie that the TikTok pixel sets in the browser.
- Email and phone, hashed with SHA-256 before they're sent.
- The IP address and user agent of the visit.
- Order value, currency, the products and the order id.
Deduplication: one purchase, not two
When the TikTok pixel and the Events API both report an order, TikTok only keeps one if both have the identical event name and event_id, within 48 hours; it keeps the first one it received (TikTok Ads help centre, checked October 2026).
On WooCommerce this breaks most often because two plugins load the same TikTok pixel, each with its own ids. The Settl plugin uses one id per order for the browser and the server purchase, so TikTok keeps one CompletePayment.
Your options on WooCommerce (checked October 2026)
TikTok's own WordPress plugin sets up the browser pixel and server connection together and supports the standard shopping events. If TikTok is your only paid channel and you don't need anything else, it's a fair place to start.
PixelYourSite Pro lists TikTok as pixel plus Events API: you paste the access token from TikTok Ads Manager and enable the Conversion API in its settings. It covers many platforms and suits stores that want lots of event options.
Datahash offers a WooCommerce to TikTok Events API connection built around order data, with field mapping and adjustable sync, aimed at teams that work with a sales contact.
Settl's WooCommerce plugin focuses on purchases that actually happened: it keeps the ad click for 90 days, sends each paid order once, and checks every hour that no paid order of the past week was missed. The same plugin covers Meta, Google, Snapchat, Pinterest, X, Microsoft Advertising and Reddit. Pick one source per TikTok pixel, whichever you choose.
What the Settl plugin sends to TikTok
Browser events, if you switch them on: page views, product views, searches, checkout starts and the purchase, sent by the TikTok pixel only after the visitor accepts marketing cookies (when your consent plugin supports the WP Consent API). Shop staff who are logged in and known bots are skipped, so your own test clicks don't train your ads.
Server events: every paid order goes to Settl and from there to the TikTok Events API as CompletePayment, with hashed email and phone, the saved ttclid and _ttp, IP, user agent, value, currency and products. Add-to-cart is sent from the server too, because the page often doesn't reload after adding a product.
How to test it in TikTok Events Manager
In TikTok Ads Manager, open Tools, then Events, then Web events, and choose your pixel. Use Test Events, place a real order with a payment method that leaves your site, and close the tab right after paying. CompletePayment should still arrive from the server.
Over the following days, check that purchases come in from both the pixel and the Events API without duplicate warnings, and look at the diagnostics for missing value, currency or match parameters.