Home/ Guides/ UTM parameters for TikTok ads
Guide · Campaigns
Tag your TikTok ads so the clicks add up.
TikTok has no GA4 auto-tagging shortcut — its ttclid only feeds TikTok's own pixel. So every click you want in analytics gets tagged by hand. Here are the exact source and medium values for TikTok, the dynamic macros that auto-fill campaign and ad names, and a copy-paste template.
The short answer
Source is tiktok, medium is paid-social — tagged by hand.
Set utm_source=tiktok and utm_medium=paid-social in the ad's URL parameters field, and let TikTok's dynamic macros fill in the campaign and ad names. Keep every value lowercase and hyphenated so GA4 reports one clean row per ad instead of a dozen near-duplicates. TikTok's ttclid stays for its own pixel — it doesn't replace UTMs.
Want it right before it goes live? Build the parameter string with the free slsh.me UTM builder — it lowercases and encodes as you type — then drop a slsh.me short link into the ad so the destination stays clean and every TikTok click lands in your dashboard. Already shipped an ad? Paste its URL into the UTM parser to check the tags.
The right values per parameter.
Five UTM parameters, mapped to what a TikTok ad should put in each one. Source and medium are the two that decide whether GA4 files the click as Paid Social.
| Parameter | Use for TikTok ads | Why |
|---|---|---|
utm_source | tiktok | The platform. TikTok is on GA4's default social-source list, so it counts toward Paid Social. |
utm_medium | paid-social | The channel type. GA4 buckets this into Paid Social — not Paid Search, not Unassigned. |
utm_campaign | __CAMPAIGN_NAME__ | TikTok fills in the real campaign name per click. Name it cleanly in Ads Manager. |
utm_content | __CID_NAME__ | Which ad drove the click — the dynamic ad name, auto-substituted. |
utm_term | __AID_NAME__ (optional) | Optional. Handy for ad-group breakdowns when you don't use term for keywords. |
The pair to get right is source and medium: tiktok + paid-social. That's the combination GA4's default channel grouping maps to Paid Social. Whatever you choose, apply it identically everywhere — a mix of tiktok, tik-tok and tt fragments the channel exactly the way GA4 splits casing. (More on that in the UTM naming convention guide.)
Let TikTok fill in the names automatically.
You don't hand-type a UTM for every ad. TikTok supports dynamic macros — wrapped in double underscores — that get substituted with the real names at delivery, so one template covers your whole account.
| Macro | Resolves to |
|---|---|
__CAMPAIGN_NAME__ | The campaign's name from Ads Manager |
__CAMPAIGN_ID__ | The numeric campaign ID |
__AID_NAME__ | The ad group's name |
__AID__ | The numeric ad group ID |
__CID_NAME__ | The individual ad's name |
__CID__ | The numeric ad ID |
__PLACEMENT__ | Where it ran — e.g. the TikTok feed |
The catch: these resolve to whatever you typed in Ads Manager, then get URL-encoded as-is. If a campaign is named Summer Sale 2026, your UTM becomes Summer%20Sale%202026 — a different value from summer-sale-2026 and a capitalised one at that. So the naming discipline moves up a level: name your campaigns, ad groups and ads cleanly in Ads Manager — lowercase, hyphens, no spaces — and the dynamic UTMs come out clean for free. Prefer the _NAME__ macros over the numeric IDs in your reports; the IDs are stable but unreadable.
ttclid is not a UTM.
The single biggest TikTok tracking mistake is assuming its click ID does what Google's gclid does. It doesn't.
When you run the TikTok Pixel or Events API, TikTok appends a ttclid — the TikTok Click ID — to your landing URL. It's the counterpart to Meta's fbclid and Google's gclid, and it lets TikTok's own pixel attribute conversions back to the ad that drove them.
Here's the difference that trips people up: Google Ads' gclid, once you link Google Ads to GA4, feeds GA4 richer paid-search data than UTMs could — so for Google you often skip manual tags. TikTok has no equivalent link. GA4 doesn't read ttclid, and neither do most third-party analytics tools. So TikTok behaves like Meta: there's no auto-tagging shortcut, and you tag every ad by hand with UTM parameters if you want the click in GA4.
The good news is they don't conflict. Keep ttclid for TikTok's pixel and add your utm_ parameters alongside it — both ride on the same landing URL, each read by a different tool.
The copy-paste template.
Paste this into the ad's URL parameters field in TikTok Ads Manager (at the ad level, under the destination URL). No leading ? — TikTok joins it to your landing URL.
# TikTok ad — URL parameters field (not the impression/click tracking URLs) utm_source=tiktok&utm_medium=paid-social&utm_campaign=__CAMPAIGN_NAME__&utm_content=__CID_NAME__
Add &utm_term=__AID_NAME__ if you want the ad-group name too. Because the names come from Ads Manager, you set this once per ad (or reuse it across the account) and never touch the UTMs again. This lives alongside ttclid — TikTok still appends its own click ID for the pixel, and your UTMs stay untouched for GA4.
The mistakes that break attribution.
Four things that quietly send your TikTok clicks to the wrong place in GA4.
Relying on ttclid for GA4
Assuming the click ID tracks like Google's gclid. GA4 doesn't read ttclid, so those clicks land in Direct or Unassigned.
Fix: tag every TikTok ad by hand with utm_source/utm_medium; keep ttclid for the pixel.
Using cpc loosely or the wrong medium
A non-standard medium like ppc-tt or social can fall into Unassigned or miss the Paid Social bucket entirely.
Fix: use utm_medium=paid-social with utm_source=tiktok, applied consistently.
Spaces and capitals in names
Dynamic macros inherit your Ads Manager names verbatim. Q3 Retargeting becomes Q3%20Retargeting — capitalised and encoded.
Fix: name campaigns, ad groups and ads lowercase-with-hyphens from the start.
Mixing tiktok, tt and tik-tok
Three spellings of the same source means three rows in GA4 that never add up to your real TikTok total.
Fix: pick one source spelling and apply it to every single ad.
Build the string without typos.
The dynamic macros are easy; the static part (utm_source, utm_medium) is where a stray capital or space sneaks in. Build that part once from a form that lowercases and encodes for you, then slot the __…__ macros in by hand.
The free slsh.me UTM builder lays out every parameter, normalises casing and spacing as you type, and shows the finished string — so your TikTok ads ship with identical, GA4-friendly source and medium values every time.
Build your TikTok UTMs, freeThen shorten the destination on slsh.me — a clean short link in the ad keeps the long tagged URL out of sight and logs every click by country and device, free.
Questions
What utm_source and utm_medium should I use for TikTok ads? +
utm_source=tiktok and utm_medium=paid-social. TikTok is on GA4's default social-source list, so a social source with a paid medium files the click under Paid Social. Keep both lowercase and use the same spelling on every ad so GA4 doesn't split the channel. See the reading UTM data in GA4 guide.What are TikTok's dynamic tracking macros? +
__CAMPAIGN_NAME__, __AID_NAME__ (ad group), __CID_NAME__ (ad) and __PLACEMENT__, plus their _ID__ variants. A typical pattern is utm_campaign=__CAMPAIGN_NAME__&utm_content=__CID_NAME__. They inherit your Ads Manager names verbatim, so name those cleanly — lowercase, hyphens, no spaces.Isn't ttclid enough to track TikTok ads? +
ttclid is TikTok's own click ID, read by the TikTok Pixel and Events API for on-TikTok conversions — not by GA4 the way Google's gclid is. Unlike Google Ads, TikTok gives you no auto-tagging shortcut for GA4, so you still tag every ad by hand with UTMs. Keep ttclid for the pixel and add UTMs for analytics; they don't conflict.Is this the same as tagging Facebook or Instagram ads? +
__CAMPAIGN_NAME__ vs Meta's {{campaign.name}}). See the UTM parameters for Facebook & Instagram ads guide for that side.Every TikTok click, accounted for.
Shorten the link behind your TikTok ads with slsh.me. The long tagged URL hides behind a tidy short link, and you get live click analytics per ad — by country, device and referrer, free.
Create a link with slsh.meFree forever · see pricing