The short answer
X Conversion API configuration means sending your conversions from your server to X Ads, next to the X Pixel, with a shared conversion_id so each event counts once. For B2B, the bigger win is choosing the right event: optimise toward a lead your CRM confirmed, not every form submit.
DataCops is a tool that does the ad-conversion job without a container, warehouse or plugin: one script and one DNS record on your own domain, a bot verdict on every visit with a Real people only switch per ad platform, the real sale from your CRM or Shopify sent back to your ads, new campaigns warmed up with the customers you already have, and a log of every send.
How DataCops does it:
- First-party collection, no extra tool. One script and one DNS record put collection on your own subdomain; with your DNS on Cloudflare, the free Worker reads the click at the edge before the page loads. Click IDs are kept on the server for up to 90 days.
- Real people only. Every visit gets a bot verdict against 360+ billion IPs and 350+ monitoring points, with a Real people only switch per ad platform, off by default. Every form email is checked for disposable providers, domains with no mail server and an email risk score.
- The sale after the form. HighLevel natively (lead, booked, showed, won with value, paid), any CRM by webhook, Shopify through the DataCops Shopify app, all matched to the click by click ID or hashed email and phone, and sent to Meta, Google Ads, TikTok and LinkedIn.
- Ads Warmup. Upload your existing customers (up to 20,000 rows), see a 0 to 10 match score per person, and send them to Meta, Google Ads and TikTok so new campaigns start warm.
- Consent, memory and proof. A TCF 2.2 consent banner from your domain with Google Consent Mode v2 on by default, a server-set cookie up to 400 days where enabled, and a delivery log row for every send, counted once against the pixel.
Best for: teams who want better ad conversions without building or maintaining the pipe: lead gen, ecommerce, clinics, home services, B2B and agencies.
- Keep the pixel, add the server, share one conversion_id.
- Match with twclid first, hashed email and phone second.
- Send two events: the raw form fill and the qualified lead.
- Optimise on the qualified one. Bots rarely get past a sales call.
The demo request that never existed
Picture this. A B2B software company runs an X campaign for demo requests. Week one looks great: 40 demos at a cost per lead the CMO likes.
Then sales starts calling. Half the emails bounce. A dozen are free mail addresses with names like "John Smith". Three came in within the same minute. The rest are real, and some are good.
The worse part is invisible. Every one of those 40 went to X as a conversion. X did its job and found more people like them. Week two brings 55 demos and fewer real meetings.
Server-side tracking delivers your data reliably. It does not make it true.
The real cost of a cheap tool
Cheap tracking that is handled badly costs far more, because the bill arrives in what your ads learn.
- Bots forwarded as buyers. A forwarder sends what reaches it. Junk conversions teach the platform to find more junk.
- The sale that never gets sent. A booked call, a phone order or a won deal happens outside the store or the page. Most tools never see it.
- The limit you hit on your busiest day. Hosts and apps cap requests, events or orders, and sending can pause or stop over the limit.
- The build and the upkeep. Containers, plugins and automations need someone to build them and fix them when a platform changes.
The tracking is 0.17 percent of your spend. If one in five of the conversions your ads learn from is a bot or a fake lead, a fifth of the learning signal points at the wrong people, across the other 99.83 percent of the budget.
Cheap tracking is the cheapest line on the bill and the most expensive one to get wrong.
Ways to track X conversions
| Tool | Best for |
|---|---|
| DataCops | Ad-funded teams who want clean conversions from one script |
| The platform's own pixel or tag | Basic browser tracking on one platform |
| Google Tag Manager | Browser tags you manage yourself |
| Stape | Cheap hosted server GTM, if someone owns the container |
When not to use DataCops
- You need custom tag logic or non-ad destinations. DataCops sends to ad platforms and is not a Google Tag Manager container. A hosted server container gives full control, if someone owns it.
- You want a reporting dashboard. DataCops fixes what goes into your ads. It does not replace the reports you already read.
Ads Warmup: tell the ads who pays
X conversion API forwards what your site or store produces. A new ad account, pixel or campaign has nothing yet, so it pays to learn from scratch. That is a job a pipe cannot do, because the customers you already have never visit on command.
Ads Warmup, DataCops' flagship feature, sends them to your ad platforms before a campaign spends:
- Upload a customer list. A CSV of past buyers, old leads or booked calls. DataCops reads your columns; only email is required.
- See a match score for every person. An estimate from 0 to 10 from email, phone, name, location, click ID and customer ID, before anything is sent.
- Pick the event. Purchase, Lead, Complete registration, Add to cart or Schedule.
- Send server-side. Up to 20,000 people per upload to Meta, Google Ads and TikTok, with a sent, skipped or failed result per person. Google Ads credits only people who clicked a Google ad.
Each row is dated when you press send, not with the old sale date, so it gives a new campaign real customers to learn from on day one. Preview is free; sending needs a paid plan.
What else a pipe never does
- Capture at the edge. With DNS on Cloudflare, the free, optional DataCops Cloudflare Worker reads click IDs and UTMs off the first request, before the page or any script runs. It captures; it does not block.
- Keep the click on the server. gclid, wbraid, gbraid, fbclid, ttclid and li_fat_id are stored for up to 90 days, so a deal that closes weeks later still finds its click. A signed server-set cookie lasts up to 400 days where enabled.
- Check the lead's email. Fixed rules, not guesses: disposable providers, domains with no mail server and an email risk score. With LeadCops (Business and up), a lead that fails is held and never billed.
- Install on Shopify. The DataCops Shopify app adds a web pixel and a theme app embed, so every paid order reaches your ads, express checkouts included. See Shopify Conversions API.
- Hand evidence to Google. On the Organization plan, the fraud refund report exports bot-flagged Google Ads clicks in the format Google's Click Quality form asks for. You attach it; Google decides.
What is the X Conversion API?
The X Conversion API is an endpoint in the X Ads API where your server posts conversion events for a pixel. It exists because the browser tag loses events to ad blockers, cookie limits and people closing the tab before the thank-you page loads.
X Pixel
Runs in the browser. Reads the click context from the landing page. Easy to add, easy to lose.
Conversion API
Runs on your server. Survives blockers and can send events that happen later, like a lead your team qualified.
How do you set it up?
You need four things: an X Ads account with a pixel, Ads API access, OAuth 1.0a credentials, and a place in your stack that can post a request when a conversion happens.
- Create or find your pixel in Ads Manager under Tools, then Events Manager. Create an event for each action you care about and note its ID.
- Apply for Ads API access through the X Developer Portal and create an app. You get a consumer key and secret, plus an access token and secret for the ads account user.
- Capture the click ID. When someone arrives from an X ad, the URL carries
twclid. Store it in a hidden form field or a first-party cookie so your server has it at submit time. - Post the event to the Ads API
measurement/conversionsendpoint for your pixel, with the event ID,conversion_timein ISO 8601, aconversion_id, and identifiers:twclid, orhashed_emailandhashed_phone_numberas SHA-256. - Deduplicate. Fire the pixel with the same
conversion_idas the server. X then counts the pair once. - Test it. Submit a real form from an ad click and check the event in Events Manager. A request that returns success with zero attributed conversions usually means no identifier matched.
Two errors eat most afternoons. Hashing an email with a trailing space or a capital letter, so nothing matches. And generating a new conversion_id on the server instead of reusing the one the pixel saw, so every lead counts twice.
What B2B teams get wrong
The mistake is not technical. It is sending the wrong moment.
Most setups fire the conversion on form submit. Nobody has checked the email, the company or whether the same device just filled the form nine times. For a shop selling a cheap product, a few junk events wash out. For B2B, where each lead is worth a lot and volume is low, a handful of fakes is a big share of what X learns from.
| Event you send | What X learns | Risk |
|---|---|---|
| Form submit | Anyone who types into a form | Bots, students, competitors |
| Verified work email | People with a real business inbox | Lower, still unqualified |
| Qualified lead from CRM | People your sales team wants | Lowest, arrives days later |
The fix is to send both. Keep the form submit as a standard event for reporting, and make the qualified lead the one your campaigns optimise toward. The server API is what makes this possible, because the qualified moment happens in your CRM, not in a browser.
Teach X the lead your sales team wanted, not the one a bot typed.
Ways to send events to X
There is no one-click route for X like there is for some platforms. You have three honest options.
Direct API from your backend
Your server posts to the Ads API when a lead is created or qualified. Full control over what is sent and when. You own OAuth signing, retries and hashing.
Best for: teams with an engineer and a CRM that can call a webhook.

Server-side Google Tag Manager
A community X Conversion API tag runs in a server container. Good if you already run server GTM for other platforms. Someone still has to maintain the container.
Best for: teams already running a server container with a GTM specialist.

Automation tools
Trigger a request when a CRM stage changes. Fine for a low number of qualified leads. Watch the hashing and the timestamp format.
Best for: small B2B teams sending a few qualified leads a week.
Where DataCops fits (and where it does not)
DataCops sends events to X through its Conversions API, with the twclid kept on your own domain and hashed email and phone, and the same lead goes to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest too. No GTM, no direct API build.
DataCops is the tracking solution for ad-funded businesses: it keeps bots out of what your ads learn from and sends the sale that happens after the form to Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit, Pinterest and X.
For most B2B teams, X is not the only channel. LinkedIn is usually the bigger one, and the same junk lead that hurts X also teaches LinkedIn and Google Ads the wrong buyer. That is the part DataCops handles:
- Every visit gets a verdict, and flagged visits stop reaching the platform as conversions.
- LeadCops verifies the form in two lines of code, with email rules and a risk score, and can hold the ad conversion until your CRM confirms the lead.
- The CRM result is matched back by click ID or hashed email and phone, and sent as an offline conversion.
- Pixel and server events share an event_id and are counted once. Each row in the delivery log shows sent, held, skipped or failed, with the reason.
See the LinkedIn Conversions API page for the B2B channel we do cover, and DataCops for B2B SaaS for the full picture.
A clean B2B setup, step by step
- Compare your numbers. Put X reported conversions next to leads sales accepted for the same week.
- Fix deduplication if X shows more than your form tool. One conversion_id, pixel and server.
- Store twclid with every lead in your CRM.
- Verify the form: block throwaway domains and addresses that cannot receive mail.
- Add a qualified lead event and post it from the CRM stage change.
- Switch campaign optimisation to the qualified event once it has steady volume.
Fewer conversions, sent right, beat more conversions sent blind.
FAQ
Can I warm up a new campaign with my existing customers?
Yes, with DataCops Ads Warmup. Upload a CSV of customers (only email is required, up to 20,000 rows), see a 0 to 10 match score for each person, and send them to Meta, Google Ads and TikTok, dated when you send. Google Ads credits only people who clicked a Google ad.
What is the X Conversion API?
It is the server-side way to send conversions to X Ads. Your server posts events to the Ads API measurement endpoint instead of relying only on the X Pixel in the browser.
Do I still need the X Pixel if I use the Conversion API?
Keep both. The pixel catches the browser side and sets the click context, the server catches what the browser misses. Send the same conversion_id from both so X counts the event once.
What identifiers does X accept for matching?
The click ID (twclid) is the strongest. Hashed email and hashed phone help when the click ID is missing. Hash with SHA-256 after trimming and lowercasing, or X cannot match them.
Which event should a B2B team send to X?
Send the form fill, but as a separate event from the one that counts: a qualified lead or booked meeting confirmed by your CRM. Optimise toward that one, not the raw submission.
Does DataCops send conversions to X?
Yes. DataCops sends conversions to the X Conversions API with the twclid click ID and hashed email and phone, alongside Meta, Google Ads, TikTok, LinkedIn, Microsoft Ads, Reddit and Pinterest.
Why are my X conversions higher than my real leads?
Usually double counting (pixel and server without a shared conversion_id) or junk form fills from bots. Check deduplication first, then compare the lead list against your CRM.
Is the X Conversion API hard to set up?
The request itself is simple. The work is getting Ads API access, OAuth 1.0a credentials and clean identifiers flowing from your form into your server.