Free tool · no signup · runs in your browser

Free UTM Campaign Builder

Build a correctly encoded UTM campaign URL and see whether the parameters will actually survive the click - chat deep links like wa.me, m.me, t.me and ig.me drop them, and this tool tells you before you find out from an empty report. Runs entirely in your browser; nothing you type is sent to us.

Build your tagged link

The five parameters, and what GA4 actually requires

Google Analytics documents five campaign parameters, and its guidance is to always set utm_source, utm_medium and utm_campaign - GA4 needs those three to assemble a session's traffic-source dimensions cleanly. utm_term (a paid keyword) and utm_content (which creative) are optional refinements. Skip either optional one and attribution still works; skip a required one and GA4 falls back to weaker signals or files the traffic under "(not set)."

A naming convention your future reports will thank you for

Because Google treats parameter values as case sensitive - its documentation gives utm_source=google versus utm_source=Google as the canonical example - a team without a written convention ends up with the same channel scattered across three rows of Traffic Acquisition. Three habits prevent essentially all of it: lowercase everything, always; hyphens instead of spaces, so values survive encoding and stay readable in a report; and a closed vocabulary for utm_medium (pick from something like email, paid-social, cpc, referral, qr - and never invent a new one mid-campaign). For campaign names, a repeatable pattern such as goal-market-yyyymm sorts chronologically on its own.

It also helps to know exactly which GA4 dimension each parameter feeds, because that is where you will go looking for it later:

ParameterRequiredGA4 dimension it fillsExample value
utm_sourceYesSession sourcefacebook
utm_mediumYesSession mediumpaid-social
utm_campaignYesSession campaignspring-sale-uk-202608
utm_termNoSession manual termchatbot-software
utm_contentNoSession manual ad contentcarousel-ad-1

Mistakes that quietly poison attribution

UTM tags on internal links. Campaign parameters describe how a visitor arrived at your site. Put them on your own navigation or an internal banner and the click rewrites the visit's origin story - the homepage promo steals credit from the ad that actually paid for the visitor. Tag entry points only: ads, emails, social posts, QR codes.

Fighting the click IDs. Google Ads auto-tagging appends a gclid that already carries the campaign, ad group and keyword; when a URL arrives with both a gclid and manual UTM tags, Google Analytics uses the auto-tagged values unless you switch on the manual-override setting, so hand-written tags on Google Ads URLs mostly get ignored. Meta does the inverse: it appends fbclid to outbound clicks automatically, but that identifier is not something GA4 can read as a source or medium - Meta ad URLs therefore do need manual UTMs. That asymmetry is a large part of the ad-to-conversation attribution mess, and why chatbot analytics ends up reconciling numbers from two systems that count differently.

Spaces, encoding and what the destination URL already carries

A raw space in a UTM value breaks the query string at the first one - everything after it stops being read as part of that parameter. The conventional fix is to encode it as %20 or avoid it with a hyphen or underscore, which is why "spring-sale" reads better in a report than "spring sale" ever will. This builder encodes every value automatically. It also checks the destination URL you paste in for a "?" or an existing utm_ parameter - appending more tags to a link that already carries tracking produces a URL with two conflicting versions of the same parameter, and only one of them wins.

utm_source_platform, utm_creative_format and utm_marketing_tactic

GA4 documents three newer parameters beyond the original five. utm_source_platform identifies the platform that managed the buy and is genuinely captured in GA4 reporting today. utm_creative_format and utm_marketing_tactic are documented too, but Google's own reference notes neither is currently reported inside Google Analytics 4 properties - safe to include for another tool downstream, invisible in your GA4 reports for now.

Why a wa.me, m.me, t.me or ig.me link drops your UTM tags

A wa.me link only recognizes two things: the phone number in the path and an optional pre-filled text= message. That is the entire documented specification. Anything else appended to the query string, UTM parameters included, is not part of that spec - WhatsApp opens the chat using the phone number and message it recognizes, and nothing else in the URL travels with it into the thread. The conversation that results has no query string attached at all, so a web analytics tool watching for utm_source on a landing page never sees the click, because the click never lands on a page it can watch.

Messenger and Instagram behave better here: an m.me or ig.me link can carry a ref parameter - m.me/yourpage?ref=spring_sale - which Meta delivers to your business through a messaging_referral webhook when the conversation opens. Telegram offers the same idea through t.me/yourbot?start=spring_sale, handed to the bot with the /start command. Neither value is a UTM parameter and GA4 will not read either one, but they are the mechanisms those platforms built for exactly this job.

The practical fix is to stop expecting one mechanism to do both jobs. Tag the page or ad that links to the chat destination with UTM parameters as usual, so GA4 can attribute the click that led someone to tap through. Then use the platform's own parameter - ref for Messenger and Instagram, start for Telegram, a coded prefix inside text for WhatsApp - to carry a matching identifier into the conversation itself, where your bot or unified inbox tooling can log it. Two separate tags, two separate systems, one campaign traceable end to end - which is also what makes cross-channel context possible once a conversation is underway.

Frequently asked questions

What are the five standard UTM parameters?

utm_source, utm_medium, utm_campaign, utm_term and utm_content. Google's documentation says to always set source, medium and campaign, since GA4 needs those three to build its traffic-source dimensions. Term and content are optional refinements - term for a paid keyword, content for telling apart two creatives that otherwise share the same source, medium and campaign.

Does it matter if I use Facebook or facebook as the source?

Yes. GA4 treats UTM values as case sensitive, so utm_source=Facebook and utm_source=facebook create two separate rows in your reports instead of one. Neither link breaks, so the split goes unnoticed until someone tries to total up a channel's traffic and finds it scattered across several near-identical entries. Pick lowercase and use it consistently.

Will UTM parameters work on a wa.me link?

No. A wa.me link only recognizes a phone number and an optional text= message - that is the entire documented format. Any other query string, UTM parameters included, is not part of that spec and does not travel into the WhatsApp conversation that opens. Put a code word inside the pre-filled text instead if the conversation itself needs to carry a campaign identifier.

How do I track which link started a Messenger or Instagram conversation?

Use the ref parameter instead of UTM tags: m.me/yourpage?ref=spring_sale or ig.me/m/yourusername?ref=spring_sale. Meta's Messenger Platform delivers that value to your business through a messaging_referral webhook when the chat opens, up to 2,083 characters, URL-encoded - the mechanism built specifically for attributing which link opened a given conversation.

Is there an equivalent for Telegram bots?

Yes - the start parameter. A link like t.me/yourbot?start=spring_sale delivers that value to your bot as part of the /start command, so the bot can log which link brought the user in. Telegram limits it to 64 characters from A-Z, a-z, 0-9, underscore and hyphen, so keep the identifier short rather than descriptive.

Are utm_source_platform, utm_creative_format and utm_marketing_tactic worth adding?

utm_source_platform is genuinely captured in GA4 reporting and is worth setting if a platform other than your ad network managed the buy. utm_creative_format and utm_marketing_tactic are documented too, but Google's own reference notes neither is currently reported inside GA4 properties, so they are safe to include for other tools but will not change what you see in Analytics yet.

Is there a character limit on a UTM link?

Not on an individual value, but the full URL has a practical ceiling - browsers and servers commonly treat around 2,000 to 2,048 characters as the safe maximum, and QR codes get harder to scan well before that. A five-parameter UTM link rarely gets close, but a chat platform's own referral parameter is tighter: 2,083 characters for an m.me ref and just 64 for a Telegram start value.

Related tools and reading

Turn tagged conversations into answers

Connect a WhatsApp, Messenger or Telegram number to a chatbot in minutes. Free plan, no credit card.