Open the campaign report of any account that has been running paid traffic for a few months and look at the utm_campaign column. You will almost certainly find the same campaign spread across three rows — summer_sale, Summer Sale, summersale-v2 — plus a fat (not set) row where someone forgot to tag at all. Every one of those rows is a decision you can no longer make, because the data that should answer "which campaign produced this order?" got shredded at the moment of tagging.
The fix is not discipline. It is removing humans from the loop. All three major ad platforms can inject campaign, ad set and ad values into your URLs automatically at click time. This post gives you one copy-paste template per platform and the handful of conventions that keep the output clean for years.
Let the Platform Fill In the Blanks
Hand-typed UTMs fail for a boring reason: people abbreviate, capitalize and rename inconsistently. Dynamic parameters fail never, because the platform substitutes the real value on every click. Each platform has its own syntax for the same idea:
| What you want | Google Ads (ValueTrack) | Meta (dynamic parameters) | TikTok (macros) |
|---|---|---|---|
| Campaign name | — (not available) | {{campaign.name}} | __CAMPAIGN_NAME__ |
| Campaign ID | {campaignid} | {{campaign.id}} | __CAMPAIGN_ID__ |
| Ad set / ad group | {adgroupid} | {{adset.name}} | __AID_NAME__ |
| Ad / creative | {creative} | {{ad.name}} | __CID_NAME__ |
| Keyword | {keyword} | — | — |
| Placement | {placement} / {network} | {{placement}} | __PLACEMENT__ |
| Click ID | gclid (auto-appended) | fbclid (auto-appended) | ttclid (auto-appended) |
Three syntaxes, one principle: write the template once, and every URL the platform serves carries the truth about where the click came from.
Google Ads: ValueTrack Parameters
Google's dynamic values are called ValueTrack parameters. The cleanest setup is a single account-level final URL suffix — Settings → Account settings → Tracking — so every campaign inherits it and nobody edits URLs per ad:
utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}&utm_content={creative}
What each piece does:
{campaignid}— the numeric campaign ID. Note the table above: ValueTrack has no campaign-name parameter, so you pass the ID and map it to a name in your reporting layer. The upside is that IDs survive renames; the name in your report stays whatever your tool resolves it to.{keyword}— the bid keyword that matched the search. Populated on Search; empty where keywords do not exist (e.g. Performance Max), which is itself useful signal.{creative}— the ad's ID, so creative tests are separable without guessing.
Worth knowing: {matchtype}, {device} and {network} exist if you want more dimensions, and the gclid click ID is appended automatically by auto-tagging — it rides alongside your UTMs, not instead of them.
Meta: Dynamic URL Parameters
Meta fills values with double-brace parameters in the URL parameters field of the ad setup (Ads Manager → ad level → Tracking → URL parameters):
utm_source={{site_source_name}}&utm_medium=paid&utm_campaign={{campaign.name}}&utm_term={{adset.name}}&utm_content={{ad.name}}
Two deliberate choices in that template:
{{site_source_name}}resolves to a short code for where the ad ran —fb,ig,msgoran. That splits yourutm_sourceinto up to four values, which is exactly what you want when Instagram and Audience Network perform differently. If you prefer one consolidated row, hardcodeutm_source=facebookand pass{{placement}}in a spare slot instead.- Names, not IDs —
{{campaign.name}}reads beautifully in reports, but Meta substitutes the current name at delivery time. Rename a campaign mid-flight and your history splits into two rows. Pick names you will not touch, or use{{campaign.id}}if your team renames things weekly.
Spaces in names arrive URL-encoded (Summer%20Sale), which is one more reason to name entities in kebab-case from day one. Meta documents the full parameter list in its Business Help Center.
TikTok: URL Macros
TikTok has no separate URL-parameters field — you append the macros directly to the landing page URL when building the ad:
utm_source=tiktok&utm_medium=paid&utm_campaign=__CAMPAIGN_NAME__&utm_term=__AID_NAME__&utm_content=__CID_NAME__
The naming convention trips everyone up once: in TikTok's macro vocabulary, AID is the ad group and CID is the creative. So __AID_NAME__ gives you the ad group name and __CID_NAME__ the ad name — the table in the first section is worth bookmarking just for this. ID variants (__CAMPAIGN_ID__, __AID__, __CID__) exist when you want rename-proof values, and the ttclid click ID is appended automatically, same as Google's gclid and Meta's fbclid.
Conventions That Keep Reports Clean
The templates handle the mechanics. These rules handle the entropy:
- Lowercase everything. Most reporting tools treat UTMs as case-sensitive, so
Facebookandfacebookbecome two rows forever. Hardcoded values lowercase; entity names lowercase at creation. - Fix your vocabulary and write it down. One source value per platform (
google,facebookor the{{site_source_name}}set,tiktok) and one medium per traffic type (cpc,paid). The enemy isfb,metaandfacebook-adscoexisting. - Name entities like they will end up in a URL — because they will.
br-prospecting-broad-2026beats[BR] Prospecting | Broad (June)in every report you will ever read. - Decide names vs. IDs per platform. Google forces IDs. On Meta and TikTok, names are readable but break on rename; IDs are stable but need a lookup. Either works — mixing them per ad does not.
- Never hand-edit URLs per ad. Set the template at the highest level the platform allows and let inheritance do the work.
- Keep UTMs and click IDs separate jobs.
gclid/fbclid/ttclidare for click-to-conversion matching; UTMs are for humans reading reports. You need both, and the templates above preserve both.
This is also where a UTM builder earns its keep: in Decisa, links are generated from a fixed vocabulary, so the convention is enforced by the tool rather than remembered by whoever builds Friday's campaign — and the same parameters later join each click to the order it produced.
Set It Up This Week
- Google: paste the template into the account-level final URL suffix so every campaign inherits it.
- Meta: paste the template into the URL-parameters field — and into your duplication checklist, since new ads copy it from the source ad.
- TikTok: append the macro string to the landing page URL in your ad-build routine.
- Document the vocabulary (source and medium per platform) somewhere the whole team sees it.
- Rename before you launch: kebab-case campaign and ad set names on Meta and TikTok, then stop renaming.
- Verify with one real click per platform: click a live ad, check that every parameter arrived populated and lowercase on your landing page.
Tagging is the least glamorous work in paid media, and the templates above make it a one-time job. Do it once, properly, and every report you open for the next year answers the only question that matters: which ad actually produced this order.