UTM builder for X links
Add tags like utm_source=x to a link so your analytics can tell which post sent each visit. Pick an X preset, name the campaign and copy the tagged link.
- Runs in your browser
- Nothing uploaded
- No sign up
Your tagged link
https://example.com/pricing?utm_source=x&utm_medium=social&utm_campaign=autumn_launch_2026_09&utm_content=post_01
This link is 113 characters long. In an X post it counts as 23, however long it is.
Presets for X
A link inside a normal post.
Campaign name builder
Result
autumn_launch_2026_09
The date goes last, so names sort by campaign first and by date second.
Batch: one page, several posts
| Post | utm_content | Link |
|---|---|---|
| Launch post | 01_launch_post | https://example.com/pricing?utm_source=x&utm_medium=social&utm_campaign=autumn_launch_2026_09&utm_content=01_launch_post |
| How it works thread | 02_how_it_works_thread | https://example.com/pricing?utm_source=x&utm_medium=social&utm_campaign=autumn_launch_2026_09&utm_content=02_how_it_works_thread |
| Customer story | 03_customer_story | https://example.com/pricing?utm_source=x&utm_medium=social&utm_campaign=autumn_launch_2026_09&utm_content=03_customer_story |
| Last call | 04_last_call | https://example.com/pricing?utm_source=x&utm_medium=social&utm_campaign=autumn_launch_2026_09&utm_content=04_last_call |
Everything is built in your browser. Nothing is saved or sent.
The anatomy of a UTM tagged link
Each colour matches the diagram above. Before the question mark is the page; after it, notes for your analytics.
- Protocol
- Almost always https://. Added if you leave it out.
- Domain
- Your own site, or your analytics never sees the tags.
- Path
- The exact page the post promised, not the home page.
- utm_source
- Who sent the visit. For X, use x.
- utm_medium
- social for organic, a paid medium for ads.
- utm_campaign
- The launch, series or promotion.
- utm_content
- Which post or link. This is how you compare posts.
- utm_term
- Paid keywords or audiences. Empty for organic.
How to build a UTM link for X
The first link takes a minute. After that, a preset and the batch box make it seconds.
- ?step=1
Paste the page address
Enter the full address you are linking to, such as https://example.com/pricing.
- &step=2
Pick a preset for X
Organic post, thread, profile link or paid fills source and medium for you.
- &step=3
Name the campaign
Type it in plain words, add a date stamp and press Use as utm_campaign.
- &step=4
Say which post it is
Set utm_content, or use the batch box for one link per post.
- &step=5
Copy and post
Copy the link or the batch as a list or CSV. On X it counts as 23.
UTM parameter reference
Definitions follow Google's campaign data guide. The last column is what we suggest for X.
| Parameter | Status | What Google says it is | For X |
|---|---|---|---|
| utm_source | Required | Referrer, e.g. google, newsletter4 | x |
| utm_medium | Required | Marketing medium, e.g. cpc, email | social or paid_social |
| utm_campaign | Required | Product, slogan, promo code | autumn_launch_2026_09 |
| utm_content | Optional | Tells creatives apart | post_01, bio_link |
| utm_term | Optional | Paid keyword | Ad audience, or empty |
| utm_id | Optional | Campaign ID | Only for cost imports |
| utm_source_platform | Optional | Platform directing the traffic | Rarely needed |
| utm_creative_format | Optional | Type of creative | Rarely needed |
| utm_marketing_tactic | Optional | Targeting criteria | Rarely needed |
UTM tags for X: organic or paid, profile or post
The medium decides the channel. These are the rules in GA4's default channel group.
Organic Social
Medium is one of:
socialsocial-networksocial-mediasmsocial networksocial mediaor the source is on Google's list of social sites.
Paid Social
Source on the social list, and a medium that:
contains cpstarts with paidppcretargeting*Google does not print the full site list, so check where your first paid clicks land.
| Preset | source / medium | content | GA4 channel |
|---|---|---|---|
| X post, organic | x / social | post_01 | Organic Social |
| X thread | x / social | thread_01 | Organic Social |
| X profile link | x / social | bio_link | Organic Social |
| X ads, paid | x / paid_social | ad_01 | Paid Social* |
Profile and post links share source and medium; utm_content tells them apart.
Worked example: one launch week
utm_campaign=autumn_launch_2026_09
- 01_launch_post
- 02_how_it_works
- 03_customer_story
- 04_last_call
- thread_01
- ad_01 · paid_social
One report, every post side by side, paid kept apart.
UTM naming conventions to borrow
Consistent names beat clever ones. Adjust these once, then reuse them.
| Use | Pattern | Example |
|---|---|---|
| Campaign by month | topic_yyyy_mm | autumn_launch_2026_09 |
| Campaign by quarter | topic_yyyy_qn | webinar_series_2026_q4 |
| Always on profile link | profile | profile |
| Post in a batch | nn_short_label | 02_how_it_works_thread |
| Post by format | format_nn | thread_03, poll_01 |
| Post by hook | hook_short_label | hook_question |
| Ad by audience | audience (utm_term) | retargeting_30d |
| Same post, two links | post_nn_position | post_04_reply |
Five rules that keep reports clean
- 1Lowercase everything
- 2Underscores between words, never spaces
- 3Topic first, date last, so names sort
- 4One source per platform: x for X
- 5Write the rules down for the team
How to read UTM results in GA4
Google's campaign data guide points here. Then switch the table's dimension:
| To see | GA4 dimension |
|---|---|
| x / social as its own row | Session source / medium |
| Launches compared | Session campaign |
| Posts compared (utm_content) | Session manual ad content |
| utm_term | Session manual term |
Source: traffic source dimensions.
In any other analytics tool
Find campaigns or sources, filter to source x, then break down by campaign and content.
What to compare
Not raw visits: visits against the post's goal, like sign ups. Repeat the post that brings the right people.
Mistakes that break UTM tracking
Mixed case
X · x · X_Launch
x
Values are case sensitive, so one source splits into rows.
Tags on internal links
blog → pricing?utm_…
untagged
Tagging your own links relabels visitors who already have a source.
A new source name each time
x.com · x_social
x
Pick one name per place and write it down.
Leaving out source or medium
utm_campaign only
source + medium + campaign
Google then reports the source as (not set).
Personal data in the link
utm_content=jane@…
post_04
Links get shared and logged. Never put people in them.
Shorteners that drop tags
?utm_… lost
click once to check
Some redirects drop everything after the question mark.
Parameters after the #
/page#top?utm_…
/page?utm_…#top
Anything after # never reaches analytics. The builder handles it.
What a long UTM link costs on X
Nothing extra. Per X's counting guide, every link counts as 23 characters, so there is no reason to skip tags.
Count a whole draft with the X character counter.
Clicks per post, without the spreadsheet
- Tracked link
- Clicks
- Next to views and credits
Kairo Post creates tracked links for your posts and shows their clicks beside each post's views and credits used. Post metrics come from the official X API, and your UTM tags still ride along.
What is a UTM link?
What should utm_source and utm_medium be for X?
Do UTM parameters hurt my post on X?
Which UTM parameters are required?
Are UTM values case sensitive?
Should I add UTM tags to links on my own website?
Where do I see UTM results in Google Analytics 4?
Is this UTM builder private?
UTM builder questions
Short answers about tagging links for X.
Written by Jonas Ben, founder of Kairo Post. Updated .
More tools
All toolsPost at the right moment.
Starting today.
Connect an account, describe your voice and let Kairo Post do the legwork.