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.

The five parameters, and what GA4 actually requires

Google Analytics documents five campaign parameters: utm_source, utm_medium, utm_campaign, utm_term and utm_content. Only three are required in practice - Google's own guidance says to always set utm_source, utm_medium and utm_campaign, because GA4 needs all three to assemble a session's traffic-source dimensions cleanly. utm_term and utm_content are optional refinements: term for a paid search keyword, content for distinguishing two creatives that otherwise share identical source, medium and campaign values. Skip either one and the session still gets attributed correctly; skip source, medium or campaign and GA4 falls back to weaker signals or files the traffic under "(not set)."

Case sensitivity is the most common way people fragment their own reports

GA4 treats UTM values as case sensitive. utm_source=Facebook and utm_source=facebook are two different rows in Traffic Acquisition, not one - the same happens with utm_medium=Social versus social, or a campaign name typed once in Title Case and once in lowercase by a different team member. None of this throws an error; it just splits one line of a report into two or three. The fix is mechanical: pick one casing convention, almost always all lowercase, and hold to it everywhere a link gets built, including this tool.

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 or the organic post, and it is genuinely captured in GA4 reporting today. utm_creative_format and utm_marketing_tactic are documented too, covering creative type and targeting approach, but Google's own reference notes both are not currently reported inside Google Analytics 4 properties. They are real and safe to include for another tool downstream, but adding them purely for GA4's benefit will not surface anything new in your reports yet.

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 differently, and better, for this specific case. An m.me or ig.me link can carry a ref parameter - m.me/yourpage?ref=spring_sale - and Meta's Messenger Platform actually delivers that value to your business through a messaging_referral webhook when the conversation opens, up to 2,083 characters, URL-encoded. It is not a UTM parameter and GA4 will not read it, but it is the mechanism built for exactly this job. Telegram's t.me links work the same way through a start parameter - t.me/yourbot?start=spring_sale - delivered to the bot as part of the /start command, capped at 64 characters from A-Z, a-z, 0-9, underscore and hyphen.

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.

Length limits worth knowing

Neither GA4 nor the URL specification sets a hard limit on an individual UTM value. A practical ceiling exists on the whole URL instead - roughly 2,000-2,048 characters is the safe cross-browser maximum. A five-parameter UTM link rarely approaches it, but a chat platform's referral parameter is tighter: 2,083 characters for an m.me ref, just 64 for a Telegram start value.

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.