100% In Browser
Your tagged URL appears here.
Make a QR code for this link

Tidy values lower cases everything and swaps spaces for underscores, which is what keeps one campaign from splitting into four rows in a report. Macros are never touched.

How to build a UTM link in three steps

  1. Paste the landing page. Use the final https address the ad should open. If it already carries a UTM parameter, the builder replaces that copy and tells you so.
  2. Pick the channel preset. The preset fills utm_source and utm_medium with values GA4 maps to a channel, and offers the platform macros for the fields that change from ad to ad.
  3. Name the campaign and copy the link. Type the campaign name, or generate it from your team's convention in the Naming tab. Then copy the URL, or make a QR code for it when the link has to go on print or packaging.

What each UTM parameter is for

ParameterRequiredWhat it answers
utm_sourceYesWhich property sent the visit. google, facebook, newsletter.
utm_mediumYesWhat kind of marketing it was. This is the field that decides the channel group.
utm_campaignRecommendedWhich campaign or promotion it belongs to.
utm_contentOptionalWhich creative or placement, so two ads in one ad set stay separable.
utm_termOptionalThe keyword on paid search.
utm_idOptionalThe campaign ID, used to join sessions to cost data imported into GA4.

The utm_medium values that map to a channel

GA4 decides the channel from utm_source and utm_medium together, in a fixed rule order. Paid Search and Paid Social need a source GA4 lists as a search or social site plus a medium that contains cp, starts with paid, or is exactly ppc or retargeting. Display, Email and Affiliates can be decided by the medium alone. Organic Social matches either a listed social source or a social medium, so a listed source can still rescue a medium that is not on any list. Only a session that matches no rule at all lands in Unassigned. facebook_ads, social_paid and ppc_google break paid campaigns most often: none of them counts as paid, so the clicks report as an organic channel when the source is listed, and as Unassigned when it is not.

ChannelUseNot
Paid search, with a search source such as googlecpc, ppc, paidgoogle_ads, search
Paid social, with a social source such as facebookpaid_social, cpcfacebook_ads, social_paid
Organic social, from the medium alonesocialinstagram
Display, from the medium alonedisplay, banner, cpmprogrammatic
Email, from the medium aloneemailmailchimp, edm
Affiliates, from the medium aloneaffiliatepartner

Platform macros stay literal

A macro is a placeholder the ad platform swaps for a real value at click time. It has to reach the platform exactly as written, so this builder never percent encodes one, and never flags its capital letters as a casing mistake.

PlatformSyntaxExample
Google AdsValueTrack in braces{keyword}, {campaignid}, {creative}
Microsoft AdsBraces, mixed case{CampaignId}, {AdGroupId}
MetaDouble braces{{campaign.name}}, {{ad.name}}
TikTokDouble underscores__CAMPAIGN_NAME__, __CID_NAME__
Display & Video 360Dollar and braces${CAMPAIGN_ID}, ${CREATIVE_ID}
Campaign Manager 360Percent and bang%ecid!, %epid!

Google Ads

ValueTrack parameters sit in single braces and are filled at click time. {campaignid} is the numeric campaign ID, which survives a rename, so it makes a steadier utm_id than the campaign name. {keyword} belongs in utm_term.

Meta

Meta uses double braces. {{campaign.name}}, {{adset.name}} and {{ad.name}} are replaced with the names as they read in Ads Manager when the ad is clicked, so a campaign renamed in flight splits into two rows. Put them in the URL parameters field of the ad.

TikTok

TikTok macros sit between double underscores: __CAMPAIGN_NAME__, __AID_NAME__ for the ad group and __CID_NAME__ for the ad. They are capitals by design, so the builder leaves their case alone and still flags capitals in the text around them.

Display & Video 360

DV360 writes macros as a dollar sign and braces. ${CREATIVE_ID} in utm_content tells you which creative earned the visit, and ${CAMPAIGN_ID} or ${LINE_ITEM_ID} identify the buy.

Campaign Manager 360

CM360 macros start with a percent sign and end with an exclamation mark. According to the Campaign Manager 360 macro table, %ecid! expands to the creative ID, %epid! to the placement ID and %ebuy! to the campaign ID. Percent encoding one turns it into %25ecid!, which CM360 no longer recognises, so the builder never encodes them.

Naming conventions that survive a report

Analytics is case sensitive and treats every spelling as a new campaign, so the naming convention matters as much as the medium. Agree on the order of the parts once, for example client, campaign, market, platform, size and version, pick one separator, and write everything in lowercase. The Naming tab turns that agreement into a tool: define the tokens and their allowed values, generate names that follow it, check names somebody else wrote, and send the convention to the team as a link. A generated name goes straight into utm_campaign or utm_content, and the clickTag generator bulk sheet can apply the same convention to every creative.

What the checker looks for

Frequently asked questions

Which UTM parameters are required?

None is technically required, but Google recommends always setting utm_source, utm_medium and utm_campaign. A missing one shows as (not set) in reports, and without source and medium GA4 cannot place the visit in the right channel.

Why does my campaign show as Unassigned in GA4?

Because the source and medium together matched none of the default channel rules. Usually the medium is a custom word such as programmatic and the source is a name GA4 does not list, such as dv360. Switch the medium to one the rules know, such as cpc or paid_social, and paste the link into the checker above to confirm.

Are ad platform macros safe inside UTM values?

Yes, as long as they reach the platform exactly as written. This builder never percent encodes a macro and never flags its capitals. It does flag a reserved character inside a macro, because that would break the query string.

Should UTM values be lowercase?

Yes. GA4 treats Spring_Sale and spring_sale as two campaigns. Tidy values, or a lowercase naming convention, keeps every link consistent.

Can I use UTM parameters on Google Ads with auto tagging?

You can add them, and they help tools other than GA4 that only read UTM values. Keep the values in line with the campaign names in the account so the two sources of truth agree.

Does anything I type leave my browser?

No. Links, the bulk sheet and the naming convention are built and stored in this browser only. A share link carries the convention after the #, which browsers never send to a server.

Further reading

UTM parameters explained for paid media covers what each field is for and a naming convention worth adopting. Why GA4 shows unassigned traffic explains the one field that decides whether a campaign appears in reporting at all. Ad platform URL macros lists the placeholder syntax for Google Ads, Meta, TikTok, DV360 and Campaign Manager 360, and why encoding one breaks it.

Related tools

Once the click URL is settled, put it into the creative with the clickTag generator, or inject it straight into a zipped banner with the HTML5 clickTag editor. Before the campaign ships, run the finished creatives through the HTML5 banner validator and check the video cuts against the safe zone checker.