Blog
Growth11 min readVisitTrack Team

How to Track X Ads Conversions Without a Pixel

Measure X (Twitter) ad signups and revenue with UTM tags, the twclid click id and first-party analytics, and when the Conversions API is worth adding.

You can track X (Twitter) ads conversions without the X Pixel by tagging every ad's destination URL with UTM parameters, recording signups and payments in your own first-party analytics, and attributing them to the campaign the visitor arrived from. That tells you which ads produced customers and revenue, with no third-party script on your site. What it doesn't do is feed conversions back to X for delivery optimization; if you need that, X's server-side Conversions API can send them without a pixel on the page.

Key takeaways

  • The question “which X ads made money?” can be answered entirely on your side, with UTMs plus analytics that connect visits to signups and payments.
  • The question “can X optimize my campaign for purchases?” requires sending conversions to X, through the pixel or the server-side Conversions API.
  • X attaches a twclid click id to ad clicks in many setups; capturing it lets you send server-side conversions later without a browser pixel.
  • Your numbers and X Ads Manager will disagree, mostly because X counts view-through conversions and uses a 30-day post-engagement window by default.
  • Judge X ads on cost per paying customer and revenue per visitor, not on clicks or engagement rate.

Why would you track X ads without the pixel?

Three reasons come up again and again. The first is consent. The X Pixel is a third-party advertising tag that sets identifiers and sends browsing data to X; in the EU and UK that almost always needs prior opt-in consent under the ePrivacy rules and GDPR, which means a consent banner and a large share of visitors you never measure. The second is blocking: GWI data reported by Backlinko puts ad blocker use around 29.5% of internet users worldwide in 2025, and ad pixels are the first thing those blockers remove. The third is simplicity — one less script, one less vendor, one less thing on your privacy policy.

The pixel also answers a narrower question than people assume. It tells X what happened after an ad interaction, so X can report and optimize. It does not tell you how those customers behave afterwards, whether they refund, or how they compare with customers from Google or a newsletter. For that you need your own analytics anyway.

What are the ways to track X ads conversions?

MethodData goes to X?Needs consent banner (EU)?X can optimize delivery?Sees revenue by ad?
X Pixel (browser tag)YesTypically yesYesOnly what you send it
X Conversions API (server to server)Yes, from your serverDepends on identifiers and lawful basisYesOnly what you send it
UTM tags + first-party analyticsNoNot for privacy-first analytics in many casesNoYes, with payment attribution
Dedicated landing page or promo codeNoNoNoRoughly
“How did you hear about us?” fieldNoNoNoRoughly
Consent requirements depend on your setup and jurisdiction; this is general information, not legal advice.

For most indie and early-stage SaaS products, the third row is the right starting point. It answers the business question — is X advertising profitable for us — with no pixel, no banner and full revenue visibility. You can add the Conversions API later once spend is high enough that X's optimization is worth feeding.

How do you track X ads conversions without a pixel, step by step?

  1. 1.Decide your conversions: usually signup (or trial start) and first payment. Both should be recorded server-confirmed, not on button clicks.
  2. 2.Tag every ad's website URL with UTMs: utm_source=x, utm_medium=paid-social, and a campaign name per campaign (utm_campaign=2026-q4-prospecting). If you test creatives, encode the variant in utm_content or in the campaign name. The UTM builder keeps the naming consistent.
  3. 3.Open each ad's preview, click through, and check the landing URL in the address bar. The UTMs must survive; avoid redirects and link shorteners in between, which can strip query parameters (X's own documentation warns that redirects strip twclid too).
  4. 4.Install privacy-first analytics on the landing pages so each visitor's first source and campaign is recorded. See the install guide.
  5. 5.Record signups with an event after your backend confirms the account. The custom events docs cover the call, and server events cover reporting it from the backend.
  6. 6.Connect your payment provider so payments are matched to the visitor and credited to their X campaign. How to track revenue by traffic source walks through Stripe.
  7. 7.After two weeks, compare spend from X Ads Manager with your own customer and revenue numbers per campaign. Compute cost per customer and return on ad spend with the CAC calculator and the ROAS calculator.
Ad destination URL, one per campaign:
https://example.com/lp/x?utm_source=x&utm_medium=paid-social&utm_campaign=2026-q4-prospecting&utm_content=video-a

What arrives in the browser after a click (twclid added by X when click ids are on):
https://example.com/lp/x?utm_source=x&utm_medium=paid-social&utm_campaign=2026-q4-prospecting&utm_content=video-a&twclid=2-abc123...

A practical detail: if you forget the UTMs on an ad, not everything is lost. Clicks from X arrive with t.co as the referrer, and many analytics tools recognize the twclid parameter. VisitTrack, for example, records a visit with a twclid and no utm_source as source “twitter” with medium “paid”, and classifies t.co referrers as social traffic from X, so untagged ad clicks still land in the right channel — just without the campaign name.

What is twclid and should you store it?

twclid is X's click identifier: a string added to the landing URL that uniquely identifies one ad click inside X's systems. X's Conversions API documentation says to parse it from the query string when it's available and keep it with the conversion. It is the bridge between your server and X: later, when that visitor signs up or pays, you can send X a conversion carrying the same twclid, and X matches it to the click without any pixel having run on your page.

Store it only if you plan to use the Conversions API. If you don't, there's no reason to keep an advertising identifier; UTMs and your own analytics are enough for reporting. If you do, store it alongside the signup (a hidden form field read from the URL, saved with the account) and treat it as advertising data in your privacy policy.

How do you send conversions to X without a pixel?

X's Conversions API is a server-to-server endpoint. You still create an event source (a pixel id) in X Ads Manager, because the API is addressed by it, but you never install the pixel's JavaScript. Your backend sends one request per conversion with a timestamp, an event id, and at least one identifier — the twclid, or a SHA-256-hashed email or phone number.

// After a confirmed signup or payment, on your server.
// Endpoint shape per X's docs: POST <ads-api-host>/<version>/measurement/conversions/<pixel_id>
// Authenticate with OAuth 1.0a user tokens that have Ad Manager access.
const body = {
  conversions: [
    {
      conversion_time: new Date().toISOString(),
      event_id: "tw-o8z6j-o8z2x", // the event created in X Ads Manager
      identifiers: [{ twclid: account.twclid }], // stored at signup
      conversion_id: payment.id, // lets X deduplicate retries
      value: (payment.amountCents / 100).toFixed(2),
      price_currency: payment.currency.toUpperCase(),
    },
  ],
};

This is “without a pixel” in the browser sense, not in the data sense: X still learns that a specific ad click converted. Whether that needs consent depends on the identifiers you send and on your lawful basis. A click id alone is less sensitive than a hashed email, but it is still advertising data, so decide on purpose and document it.

Why do X Ads Manager and your analytics show different numbers?

They will never match, and that's expected. The gaps have well-understood causes.

CauseEffectWhich side counts more
View-through conversions: X can credit a conversion to someone who saw an ad but didn't click (1-day post-view by default)X reports conversions your analytics attributes elsewhereX
Attribution window: X's recommended default is 30 days post-engagement, including likes and follows, not just clicksX credits conversions from people who engaged and came back later via searchX
Clicks vs landings: some ad clicks never finish loading the page (back button, slow connection, bots)X reports more clicks than your analytics reports visitorsX
Ad blockers and consent refusalPixel-based numbers lose blocked users; cookieless first-party analytics loses fewerYour analytics
Last touch vs first touchYour analytics may credit the first source (say, organic search), not XDepends on model
Window defaults as documented by X for website conversion campaigns, as of October 2026.

A useful rule of thumb: treat X's number as an upper bound (it credits anything X touched within its windows) and your first-party, click-based number as a lower bound. The truth for “would this customer exist without the ad” is somewhere between. If you want a tighter answer, pause one campaign for two weeks and watch total signups — a crude holdout test beats any attribution report. Our explainer on first-touch vs last-touch attribution covers how the model choice moves credit around.

How do you judge whether X ads are profitable?

Engagement rate and cost per click are X's metrics. Yours are cost per paying customer and revenue per visitor compared with what a visitor costs. Here is an example for a $19/month developer tool running two campaigns for 30 days.

CampaignSpendLanding visitorsSignupsCustomersRevenue (first payments)Cost per customer
Prospecting, interest targeting$9003,100282$38$450
Followers of 5 competitor accounts$6001,250316$285$100
Example data. Revenue is first payments only: monthly plans at $19, plus one annual plan at $190 in the second campaign.

The first campaign costs $0.29 per visitor and earns about $0.01 per visitor in first payments — not close. The second costs $0.48 per visitor, looks more expensive in Ads Manager, and earns about $0.23 per visitor up front, with a cost per customer that a $19 product can recover in about five months of retention. That's a campaign worth iterating on. If you only looked at cost per click, you would have scaled the wrong one. To see how this fits into a wider channel review, read which marketing channels bring paying customers.

Does this approach work for other ad networks?

Yes. The pattern is identical for LinkedIn, Reddit, Meta and TikTok ads: UTMs on every destination URL, first-party analytics that remembers the campaign, and conversions connected to the visitor. Each network has its own click id (li_fat_id for LinkedIn, fbclid for Meta, ttclid for TikTok) and its own server-side conversions API for when you want to feed optimization. Start with the version that keeps data on your side; add the networks' APIs only for the campaigns where their optimization clearly pays. If you're weighing analytics tools for this, our Plausible comparison and Google Analytics comparison cover how each handles campaigns and revenue.

Can I track Twitter (X) ads conversions without the X Pixel?

Yes. Add UTM parameters to each ad's destination URL and use first-party analytics that connects those visits to signups and payments. You'll see conversions and revenue per campaign without any X script on your site; X itself just won't receive the conversions for optimization.

What is twclid?

twclid is X's click identifier, a parameter added to the landing page URL of an ad click. It can be stored with a signup and later sent to X's Conversions API so X can match the conversion to the original click without a browser pixel.

Does the X Conversions API require the pixel?

It requires a pixel id (event source) created in X Ads Manager, because the API endpoint is addressed by it, but not the pixel's JavaScript on your website. Conversions are sent from your server with a twclid or hashed email or phone number.

Why does X Ads Manager show more conversions than my analytics?

X counts view-through conversions (1 day after an ad view by default) and engagement-based conversions within a 30-day window, while most analytics tools only credit visits that arrived by clicking. Clicks that never finish loading the page also inflate X's side.

Do I need a cookie banner for X ads tracking?

If you use the X Pixel, you generally need consent in the EU and UK because it is a third-party advertising tracker. Tracking X campaigns with UTM tags in a privacy-first, first-party analytics tool often doesn't require a banner. This is general information, not legal advice.

What UTM parameters should I use for X ads?

Use utm_source=x, utm_medium=paid-social and a utm_campaign value per campaign, all lowercase. Add utm_content to tell creatives apart. Keep organic X posts on utm_medium=social so paid and organic stay separate.