What is a UTM link?
A UTM link is a normal web address with tags on the end, such as ?utm_source=clevertap&utm_medium=email&utm_campaign=diwali_sale_2026. When someone clicks it, Google Analytics reads the tags and records where the visit came from. UTM stands for Urchin Tracking Module, after Urchin, the analytics company Google bought in 2005 and turned into Google Analytics.
A UTM builder adds those tags for you, in the right format, so you don't type them by hand. You'll also see it called a UTM generator, UTM maker, UTM code generator, UTM link builder, campaign URL builder or Google Analytics URL builder. Google has its own Campaign URL Builder, which does the basics. This one adds channel presets for CRM, your own naming rules, bulk links from a sheet, a link checker and a check of the GA4 channel each link lands in.
Tags matter most for CRM. Clicks from email apps and WhatsApp often arrive without a referrer, so untagged visits tend to show up as Direct, and the campaign that earned them gets no credit.
How to create a UTM link
- Paste the page you want people to land on, such as a collection or product page.
- Pick the channel: email, SMS, WhatsApp, push, in-app, Meta ads, influencer or QR on pack. The medium fills in for you.
- Pick the tool sending it, such as CleverTap or MoEngage. That becomes the source.
- Name the campaign, for example
diwali_sale_2026, and add utm_content if the message has more than one link. - Check the GA4 channel box, then copy the link into your campaign. If your CRM or ad platform has its own field for tags, click Copy tags only. For many links, switch to Many links and download the CSV.
Already have a link and want to know if it's tagged right? Open Check a link, the UTM checker built into the tool, and paste it. It reads every UTM tag and tells you where GA4 will put the visit.
The UTM parameters
Google lists these parameters in its URL builders help page. It says to always use source, medium and campaign. Leave one out and GA4 shows (not set) in its place.
| Parameter | What it records | Example | When to use it |
|---|---|---|---|
utm_source | Who sent the visit. Google calls it the referrer. | clevertap, facebook | Always |
utm_medium | The marketing medium. For CRM, that is the channel. | email, sms, whatsapp, push | Always |
utm_campaign | The offer, product or promotion. | diwali_sale_2026 | Always |
utm_content | Which creative or link was clicked. | hero_banner, variant_b | When a message has more than one link, or you test two versions |
utm_term | The paid keyword. | kurta_women | Paid search |
utm_id | A campaign ID. | cmp_1042 | When you import cost data into GA4 |
What is utm_source?
utm_source names who sent the visit: a tool like clevertap, a site like facebook, or a newsletter. It's the first thing GA4 shows in the Session source / medium report, so keep the names short and the same every time.
What is utm_medium?
utm_medium is the type of marketing. GA4 uses it to sort visits into channels: email lands in Email, sms in SMS, anything ending in push in Mobile Push Notifications. Get the medium wrong and the visit lands in the wrong channel, or in Unassigned.
What is utm_campaign?
utm_campaign is the name of the offer or journey, such as diwali_sale_2026 or cart_reminder. Use the same name on every channel in a campaign, so one filter in GA4 shows email, SMS and WhatsApp side by side.
What is utm_content?
utm_content tells apart links in the same message: the banner, the button and the footer link in one email, or version A and B of a test. Same campaign, different content.
What is utm_term?
utm_term was made for paid search keywords. With Google Ads linked to GA4 and auto-tagging on, GA4 gets keywords from Google Ads itself, so most teams leave it empty. Some use it for the audience or segment, such as lapsed_90d, which works as long as everyone uses it the same way.
GA4 also reads utm_source_platform, utm_creative_format and utm_marketing_tactic. Most CRM teams never need them. If you do, or you need your own parameters like ref or aff_id, add them under More fields in the tool.
utm_source vs utm_medium: the naming rule for CRM
This is where most CRM teams get stuck. If CleverTap sends a WhatsApp message, is CleverTap the source or the medium? Is WhatsApp?
Google's own definitions answer it. Source is who sent the visit. Medium is the kind of marketing. So the tool that sent the message is the source, and the channel is the medium. That is the convention this builder uses.
| What you are sending | utm_source | utm_medium | GA4 channel |
|---|---|---|---|
| Email from CleverTap | clevertap | ||
| SMS from MoEngage | moengage | sms | SMS |
| Push from WebEngage | webengage | push | Mobile Push Notifications |
| WhatsApp from Kwik Engage | kwikengage | Unassigned, until you add a channel | |
| In-app message from CleverTap | clevertap | in_app | Unassigned, until you add a channel |
| Meta ad | facebook or instagram | paid_social | Paid Social |
| Influencer story | influencer | Organic Social | |
| QR code on a pack insert | pack_insert | qr | Unassigned, until you add a channel |
Two reasons it works this way round. GA4 sorts visits into channels mostly by medium, so putting the channel there gives you Email, SMS and Push without any setup. And keeping the tool in source lets you compare tools, which matters when you run two or move from one to another.
The trap is utm_source=whatsapp. WhatsApp is on Google's list of social sites, so those visits land in Organic Social, mixed in with your Instagram posts. Your CRM numbers drop and your social numbers rise, and neither is true.
How to give WhatsApp its own channel in GA4
GA4's default channels include Email, SMS and Mobile Push Notifications, but not WhatsApp. A link with utm_medium=whatsapp matches none of the default channel rules, so GA4 shows it as Unassigned. Keep the name and fix it once with a custom channel group:
- In GA4, open Admin, then Data display, then Channel groups. You need Editor access.
- Click Create new channel group. GA4 starts you with a copy of the default channels.
- Name it, for example "Channels with WhatsApp".
- Add a channel called WhatsApp with the condition: Medium exactly matches
whatsapp. Do the same forin_apporqrif you use them. - Click Reorder and drag your new channels to the top. GA4 puts each visit in the first channel it matches.
- Save the group, then choose it in your acquisition reports in place of the default channel group.
Per Google's custom channel groups page, the new group applies to your past data in reports as well (audiences only change from then on). A standard property can have two custom groups, with up to 50 channels in each.
Make the builder fit your team
The presets are built for CRM, but every part can be changed to match how your team already tags links.
- Your naming rules. Lowercase is on by default because Google treats values as case sensitive. If your team uses capitals on purpose, switch to Keep what I type. Spaces can become underscores, hyphens or nothing. Tick Remember, and the rules stay in this browser for next time. Nothing is sent to us.
- Your own sources. Add the names your team uses, such as
newsletterorapp_inbox, and they show up as one-click options on every channel. - Personalisation tags stay as they are.
{{first_name}}and other Liquid or Jinja tags,*|FNAME|*from Mailchimp,{#url#}from DLT templates,{keyword}from Google Ads and Meta's{{campaign.name}}are kept exactly as typed, in the address and in the tags, so your tool can fill them in when it sends. - App links work. Paste
yourapp://product/123and the tags go on it. They only reach your analytics if the app reads them, through Firebase or your attribution tool. - Click IDs are removed. A link copied from your browser often carries
gclidorfbclidfrom someone's ad click. Reusing them sends visits to the wrong campaign, so the builder takes them out and tells you. - Bulk from a sheet. Paste two columns from Google Sheets or Excel, or add a header row (url, source, medium, campaign, content, term) and each row can set its own values. Download the result as a CSV that opens cleanly in Excel, Hindi included.
Where to see UTM tracking in GA4
In GA4, open Reports, then Acquisition, then Traffic acquisition. The table starts on Session default channel group, which shows the channel each link landed in. Switch the dimension above the table to Session source / medium to see clevertap / email and the rest, or to Session campaign to compare campaigns. Visits only show up after someone clicks, and GA4 can take up to two days to process them.
Naming rules that keep reports clean
- Lowercase everything. Google says parameter values are case sensitive, so
Diwalianddiwalibecome two rows. The builder lowercases for you. - Underscores, no spaces. Spaces turn into
%20or+in the address, and a stray space makes another row. - One campaign name across channels. Use
diwali_sale_2026on email, SMS, WhatsApp and push, so one filter shows the whole campaign. - Use content for the link, not the campaign. Banner, button and footer links in one email share a campaign and differ in
utm_content. - Keep "shop" out of campaign names. GA4's Organic Shopping rule matches campaign names containing "shop", so
shop_now_diwalisent by email matches two channels. - No personal data. Never put a phone number, email address or name in a tag. Google Analytics does not allow personal data to be sent to it.
- Write the list down. Agree the sources and mediums once and keep them in a shared sheet. The CSV download in bulk mode is a good start.
Mistakes most UTM guides don't mention
| What people do | What GA4 does with it | Do this instead |
|---|---|---|
utm_source=whatsapp on CRM messages | Organic Social, because whatsapp is on Google's social list | Source is the tool, medium is whatsapp |
utm_medium=whatsapp with no other setup | Unassigned | Add a WhatsApp channel in a custom channel group |
A paid Meta ad tagged utm_medium=social | Organic Social | paid_social, which matches GA4's paid rule |
utm_source=x for posts on X | Not counted as social, because x is not on Google's list | twitter, which is on the list |
Email on one link and email on another | The same channel, but two rows in the source and medium report | Lowercase every value |
Sources: Google Analytics Help, default channel group and its list of sources and categories, URL builders and custom channel groups. Checked 16 October 2026.
Tracking is where retention reporting starts
Clean tags are what let you say which flow, channel and message brought revenue back. For what to measure once the tags are in, read CM1, CM2 and CM3 and global control groups. For links that open a WhatsApp chat with you, use the WhatsApp link generator. For the channels themselves, see sending bulk WhatsApp messages safely and SMS DLT templates.
If your CRM tool and GA4 never agree on what a campaign earned, book a free call and I'll look at how your links are tagged.
Questions about UTM links
What is a UTM builder?
A tool that adds UTM tags to a web address, so Google Analytics can tell which campaign, channel and tool sent each visit. It is also called a UTM generator, UTM link builder or campaign URL builder. This one also checks which GA4 channel the link lands in.
How do I add a UTM source to a URL?
Add a question mark after the address, then utm_source= and the name, for example yourbrand.com/sale?utm_source=clevertap&utm_medium=email&utm_campaign=diwali_sale_2026. If the address already has a question mark, join the tags with & instead. The builder handles this for you.
What are the 5 UTM parameters?
utm_source, utm_medium, utm_campaign, utm_term and utm_content. GA4 also reads utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic. Source, medium and campaign are the ones to use every time.
What does UTM stand for?
Urchin Tracking Module. Urchin was the analytics company Google bought in 2005, and its software became Google Analytics.
Are UTM parameters case sensitive?
Yes. Google says utm_source=google and utm_source=Google are different values, so they show as separate rows. Use lowercase for everything.
What should utm_source and utm_medium be for WhatsApp?
Put the tool that sent the message in utm_source, such as clevertap or kwikengage, and whatsapp in utm_medium. Avoid utm_source=whatsapp, which GA4 counts as Organic Social.
Why does my WhatsApp traffic show as Unassigned in GA4?
GA4 has no default channel for WhatsApp, so utm_medium=whatsapp matches none of its rules. Create a custom channel group with a WhatsApp channel where medium exactly matches whatsapp, and move it to the top.
What is the difference between utm_source and utm_medium?
utm_source is who sent the visit, such as clevertap or facebook. utm_medium is the kind of marketing, such as email, sms or paid_social. GA4 sorts visits into channels mostly by medium.
What does utm_source=chatgpt.com mean?
The visitor clicked a link in a ChatGPT answer. ChatGPT adds this tag to many of the links it shows. You didn't add it, and you don't need to remove it.
Do UTM tags work for push notifications that open my app?
UTM tags are read by Google Analytics when a web page loads. They work when a push opens your website. A push that opens your app needs the app's own attribution setup, such as deep link parameters.
What is a UTM generator?
The same thing as a UTM builder: a tool that adds UTM tags to a link in the right format. People also call it a UTM maker, UTM code generator or campaign URL builder.
Can I use merge tags like {{first_name}} in UTM links?
Yes. This builder keeps personalisation tags exactly as typed, including Liquid and Jinja tags, Mailchimp merge tags, DLT {#url#} tags and Google Ads {keyword}. Send yourself a test so you can see the filled-in link.
Can I add UTM tags to an app deep link?
Yes, paste the app link and the tags are added. Your app has to read them and pass them to your analytics, usually through Firebase or an attribution tool, or they are lost.
Is there a free way to generate UTM codes?
Yes. This UTM builder is free, with no sign-up and no limit. It builds links in your browser, makes up to 500 at a time from a list or sheet, and checks existing links.
More free tools
Calculators, guides and tools for D2C brands, all free. See them all.