UTM link builder with ad platform presets

Pick a preset, add the page, and copy a tagged link. The Meta, Google Ads and TikTok presets use the placeholders each platform fills in on every click, and the checks tell you when Google Analytics would file the visit somewhere you did not expect.

Free tool Builds the link in your browser. Nothing is sent, stored or logged: there is no server on the other end of this page.

The five UTM parameters, and what each one is for

A UTM parameter is a label added to the end of a link. When someone clicks it, your analytics reads the labels and files the visit under them. Google Analytics reads these, and says to always set the first three:

  • utm_source: who sent the visit. facebook, google, newsletter.
  • utm_medium: the kind of traffic. paid_social, cpc, email, social.
  • utm_campaign: the campaign, promotion or launch the link belongs to.
  • utm_term: the paid keyword, or the ad set or audience on social.
  • utm_content: which ad or which link, so two links in the same email or two ads in the same campaign stay apart.

The builder also fills utm_id, the campaign ID, which Google Analytics lists alongside the five above. On the ad presets the platform fills it in for you.

Where each preset comes from

The ad presets use placeholders that the ad platform replaces with real values on every click, so one set of parameters works for every ad in the account. Each placeholder here is copied from the platform’s own documentation:

  • Meta ads: {{campaign.name}}, {{campaign.id}}, {{adset.name}} and {{ad.name}}, from Meta’s specifications for URL dynamic parameters. Meta notes that a name placeholder is filled with the name the campaign had when the ad was first published, so renaming a campaign later does not change the links. The same page lists {{site_source_name}}, which returns fb, ig, msg, an or th if you want to split Facebook, Instagram, Messenger, Audience Network and Threads.
  • Google Ads: {campaignid}, {keyword} and {creative} (a unique ID for the ad), from Google’s ValueTrack parameters list. Google has no placeholder for a campaign name in this list, so type yours in. Google also notes that {keyword} comes back blank when an ad matches without a keyword, as in Performance Max.
  • TikTok ads: __CAMPAIGN_NAME__, __CAMPAIGN_ID__, __AID_NAME__ (the ad group name) and __CID_NAME__ (the creative name), from TikTok’s UTM parameters help page. The names are easy to misread: AID is the ad group and CID is the creative.
  • Email newsletter and organic social have no placeholders, because nothing fills them in for you. Name the campaign yourself.

Pick a medium Google Analytics will recognise

GA4 sorts visits into channels by source and medium, using the rules in its default channel group definitions. The medium is what trips people up. A visit from a social site counts as Paid Social only when the medium contains cp (as cpc does), is ppc or retargeting, or starts with paid. That is why the paid presets use paid_social and cpc. An email visit needs the medium email, and social puts a visit in Organic Social. The builder warns you when a paid preset’s medium would miss.

Values are also case sensitive. Google’s own help says utm_source=google and utm_source=Google are different values, so a team that mixes Facebook and facebook ends up with two sources in every report. Leave the lowercase box ticked and it cannot happen. Platform placeholders are never lowercased, so they stay exactly as each platform documents them.

What this builder does not do

It does not shorten links, and it does not check that the page loads, because both need a server and this page has none. It keeps any parameters already in your address, replaces any old UTM values with the new ones, and puts the new parameters ahead of a #section anchor so the anchor still works.

If you would rather not tag links by hand

Hermoso is marketing on autopilot: it researches the ads already working in your market, makes on-brand image and video ads, schedules the posts and runs paid campaigns on your own ad accounts. It works in the web app, or inside Claude, ChatGPT and Cursor through its MCP server.

Frequently asked questions

What UTM parameters should every link have?

utm_source, utm_medium and utm_campaign. Google Analytics says to always use those three. utm_term, utm_content and utm_id are optional, and are most useful on ads, where the ad platform can fill them in for you.

What are the Meta ads URL parameters for UTM tracking?

Meta documents dynamic parameters including {{campaign.name}}, {{campaign.id}}, {{adset.name}}, {{ad.name}}, {{placement}} and {{site_source_name}}. The Meta preset here uses utm_source=facebook, utm_medium=paid_social, utm_campaign={{campaign.name}}, utm_id={{campaign.id}}, utm_term={{adset.name}} and utm_content={{ad.name}}. Paste the parameters into the ad's URL parameters field and Meta fills the tokens in on each click.

What are the TikTok ads UTM macros?

TikTok lists __CAMPAIGN_NAME__, __CAMPAIGN_ID__, __AID_NAME__ and __AID__ for the ad group, __CID_NAME__ and __CID__ for the creative, and __PLACEMENT__. Type them exactly as TikTok lists them, in capitals with two underscores at each end.

Which utm_medium should I use for paid social?

One that matches GA4's paid rule: a medium containing cp (such as cpc), ppc, retargeting, or anything starting with paid. paid_social works. A medium like facebook_ads does not match, so GA4 would not file the visit as Paid Social.

Are UTM values case sensitive?

Yes. Google Analytics treats utm_source=google and utm_source=Google as two different sources. The builder lowercases values by default and leaves platform placeholders untouched.

Is anything I type sent anywhere?

No. The link is put together in your browser. There is no network request carrying what you type and nothing is stored, so reloading the page clears it.

Hermoso makes the ads, schedules the posts and runs the campaigns. Start free, no card.

Start free   See pricing