The X Pixel and the usual WooCommerce plugins
The X Pixel (still loaded from static.ads-twitter.com, from the Twitter days) is the browser script that reports page views and conversion events to X Ads. Conversion campaigns, website audiences and bidding all use those events.
On WooCommerce there are a few ways to add it (checked October 2026). The X Pixel plugin on WordPress.org loads the pixel, fires product view, add to cart, checkout and purchase events, and can also send those events through the Conversions API when you save an API token, with a shared conversion id so X can deduplicate. Conversios has a Twitter (X) Pixel setting where you paste your Pixel ID. General header-script plugins work too, but then you build the purchase event yourself. If you only run a few X campaigns and want audiences, a free plugin is a fair place to start.
The X Conversions API is the server-side route: your server posts conversions to X's Ads API. X's docs say it needs a developer account with Ads API access and tokens from a user with Ad manager or Account administrator access to the ad account. That extra step is why many tracking tools skip X.
Why WooCommerce loses X conversions
- Ad blockers and privacy browsers that block the X Pixel script. When it doesn't load, the purchase never reaches X.
- Payment methods that leave your site, such as PayPal, iDEAL in a bank app, Klarna or a hosted card page. The buyer pays, closes the tab, and the order-received page where the pixel fires never loads.
- Bank transfer and cash on delivery. The thank-you page loads before the money arrives, so a browser pixel counts orders that may never be paid.
- Shoppers who tap an ad in the X app, browse in its in-app browser and buy later in Safari or Chrome, so click and sale sit in different browsers.
- Caching and script-delay settings in optimization plugins, or a cookie banner, holding the pixel back on exactly the page that matters.
What X uses to match a purchase
X asks for at least one identifier: the click id (twclid), an email address or a phone number. IP address and user agent only count next to one of those. The more you send, the better X can match.
- twclid: the X click id on your landing URL. Settl's plugin saves it at landing and sends it unhashed, as X asks.
- Email, trimmed, lowercased and hashed with SHA-256.
- Phone number in international format, hashed with SHA-256.
- IP address and user agent from the visit, alongside the identifiers above.
- Order value, currency, number of items and the products in the order.
Which WooCommerce orders should count
X optimizes toward whatever you report as a purchase. If unpaid orders count, it learns to find people who start a bank transfer and never finish it. Only paid orders belong in your Purchase event:
- 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, Refunded or a checkout draft: don't send it.
- Processing turning into Completed is the same order and must not create a second purchase.
How Settl sends WooCommerce orders to X
The Settl Tracking plugin saves the twclid when a visitor lands from an X ad and keeps it in a first-party cookie for 90 days, and tells Settl about the click so it survives a cleared cookie. At checkout the click is stored on the order itself, together with the buyer's email and phone.
When WooCommerce marks the order paid, the plugin passes it to Settl, which sends a purchase to the X Conversions API from the server: value, currency, number of items, the products, the twclid, hashed email and phone, IP address and user agent, and a conversion_id tied to the order. Custom statuses you use after payment, such as Shipped, still count as paid. Every hour Settl asks the plugin for the past week's paid orders and sends any that are missing.
With server-side shopping steps switched on, page visits, product views, searches, add-to-carts and checkouts go to X from the server too, for visitors X can match: someone with a saved twclid, or a known email or phone. Anonymous visitors without a click id are skipped, because X would reject them.
Avoiding double counts
Settl's WooCommerce plugin doesn't load the X Pixel, so it can't share a conversion_id with a pixel that another plugin adds. If that plugin also sends a purchase to the same X event, X can count each sale twice. Keep one source for purchases: switch purchase tracking off in the other plugin, or leave X out of Settl and let the plugin handle it.
To check, compare a week of X purchases with your paid WooCommerce orders from X clicks. Close to double means two sources report the same sales; far fewer usually means twclid isn't on your landing URLs.
How to check it works
Click one of your own X ads and check that twclid is still in the address bar when your store opens. A redirect or a link shortener that drops it means no click can be saved. Settl's hourly tracking health check also flags ad visits that arrive with an empty or template click id.
Then place a real order with a payment method that leaves your site and close the tab right after paying. In X Ads Manager, open Tools → Events Manager, select your pixel and look at the Purchase event's activity: the order should show up with its value.