X Ads Integration
In adstage, you can collect cost data from X (formerly Twitter) Ads and send conversions such as purchases and checkouts back to X. X Ads integration is performed in the Conversion API tab.
1. Integration Overview
When you connect an X account in Integrations > Ad Channel Integration > X Ads, three capabilities work together.
| Feature | Description |
|---|---|
| Cost collection | Spend, impressions, and clicks per campaign, collected automatically every 4 hours |
| Conversion sending | Conversions collected by adstage (such as purchases) are sent to X for campaign optimization |
| Click attribution | Clicks and conversions arriving through a tracking link are reported under the twitter.ads channel |
2. Connecting Your Account
-
Click
Integratein theConversion APItab. An X login window opens in a new window. -
Sign in with an X account that manages the ad account and approve the requested permissions.
-
Once approved, the ad accounts you can access are listed. Select the ad account you want to collect cost data for.
Please note
You must approve with an X account that has permission to manage the ad account. If the account lacks permission, the ad account list will be empty.
3. Setting Up Conversion Sending
When conversion sending is enabled, events such as purchases and checkouts are forwarded to X and used for campaign optimization.
-
Turn on the
Send conversions to Xswitch. -
Enter the Pixel ID. You can find it under Events Manager > X Pixel in X Ads Manager.
-
Add event mappings. On the left, enter the adstage event name (for example
purchase); on the right, enter the X event ID.
X event IDs follow the format tw-{pixel}-{code} and differ per event. In X Ads Manager, open Events Manager > Events, select the event, and check the Conversion API tab.
Please note
When creating a new event on X, choose
Define with codeso that the Conversion API can be used. ChoosingDefine with URL ruleswill prevent conversion sending from working. You do not need to add any code to your site — adstage sends the events from its servers.
Recommended mappings:
| adstage event | X event type | Description |
|---|---|---|
purchase | Purchase | Completed purchase |
begin_checkout | Add to cart | Checkout started. Helps optimization learn when purchase volume is low |
4. Creating Tracking Links
Unlike Meta or TikTok, X does not provide URL macros. Only the click ID (twclid) is appended automatically to the landing URL on click. Campaign information must therefore be included in the link itself.
In Deep Links > Create, select X Ads (Twitter) as the ad channel to choose a campaign. Use one of the three approaches below depending on your needs.
If you do not need per-campaign breakdown
Leave the campaign field empty and reuse a single link across all X ads. Cost is still collected per campaign, and channel-level reporting (twitter.ads) aggregates spend, clicks, conversions, and ROAS correctly. This is the simplest approach.
If the campaign already exists
Select it from the campaign dropdown. Campaigns saved as drafts on X also appear, marked as drafts.
If the campaign does not exist yet
Click Enter campaign name manually and decide the name in advance. Then create the campaign on X with exactly the same name and paste the link while creating it.
Put the generated link in the website URL field of your X ad.
Please note
The campaign name must match X exactly for cost and conversions to be combined into a single row. Even a one-character difference splits them into two rows in reports. Renaming a campaign on X after publishing will break alignment with existing data, so create a new link if you rename it.
What about ad group, creative, and keyword fields?
Leave them empty. X cost data is collected at the campaign level only, so adding ad group or creative values splits conversions into finer rows while cost stays at the campaign level, making reports look inconsistent. The keyword field does not apply to X.
Fill in Creative and create one link per creative only if you specifically want to compare conversions by creative.
5. What to Check When Creating a Campaign
Depending on the campaign objective, the website URL field may not be available.
- Website traffic / Conversions objectives: a website URL field is available for the tracking link.
- Reach (impressions) objective: there is no URL field. The campaign promotes a post as-is, so the tracking link must be placed in the post body to measure clicks.
To use conversion sending for optimization, set the objective to Conversions. Reach campaigns do not use conversion signals for optimization.
6. Collected Data
| Item | Description |
|---|---|
| Collection interval | Automatically every 4 hours |
| Data level | Campaign level |
| Metrics | Spend, impressions, clicks |
| Channel name | twitter.ads |
7. Cautions
Please note the following.
- Numbers may differ between X Ads and adstage due to differences in aggregation timing and timezone.
- Revoking permissions on the X account stops both cost collection and conversion sending.
- If an ad is in the
Haltedstate, no impressions occur and no cost data accumulates. Check the budget and payment method settings. - Draft campaigns are not collected. Data accumulates only after publishing.

