UTM Builder
Add your page and campaign details. Your link builds as you type, and you can see which GA4 channel it will report under before you publish it.
Free · runs in your browser · nothing uploaded
Five tags, one link
What UTM tags actually do.
UTM tags are short labels added to the end of a link. When someone clicks, your analytics reads the labels and records exactly where the visit came from.
No extra code is needed for GA4 to read them. The five standard tags answer five questions about every visit, and GA4 uses the source and medium to decide which channel the visit belongs to.
The five tags
| Tag | Answers | Example |
|---|---|---|
utm_source | Where did the click come from? | google, facebook, newsletter |
utm_medium | What type of traffic is it? | cpc, paid_social, email |
utm_campaign | Which campaign was it? | spring-sale_202611 |
utm_content | Which ad or link was clicked? | hero-banner, video-a |
utm_term | Which keyword or audience? | running shoes |
Four reasons to tag every link
Why it matters for reporting.
01
Credit goes to the right campaign.
Without tags, a click from an email or WhatsApp message often shows up as Direct, and the campaign that earned it gets no credit.
02
Channels are compared fairly.
One naming convention across every channel means paid, owned and partner traffic line up in the same report.
03
Leads and revenue connect to marketing.
Stored with each lead, UTM tags show which campaign produced customers, not just clicks.
04
Budget follows results.
Clean data shows which ads and messages to scale and which to stop.
From link to report
Tag the link. Then trust the report.
Use the builder
Step 01
Paste the page you want people to land on.
Existing UTM tags are picked up so you can edit them.
Step 02
Pick a channel shortcut or type your own source, medium and campaign.
Values are lowercased and cleaned as you type.
Step 03
Check the GA4 channel and any warnings, then copy the link, open it to test, or download a QR code.
The naming convention
Pattern{offer-or-theme}_{product-or-audience}_{market}_{yyyymm}
Examplespring-sale_running-shoes_uae_202611
Pick the parts your reports need, keep them in the same order every time, and write them down where the whole team can see them. Need a ready-made convention? Each industry builder comes with one.
Source, medium and GA4 channel
Every channel, mapped to GA4.
The source and medium each preset uses, and the GA4 default channel it reports under. Unassigned means GA4 has no default rule for it; add a custom channel group rule.
| Channel | utm_source | utm_medium | GA4 channel |
|---|---|---|---|
| Google Ads: Search | google | cpc | Paid Search |
| Facebook ads | facebook | paid_social | Paid Social |
| Instagram ads | instagram | paid_social | Paid Social |
| LinkedIn ads | linkedin | paid_social | Paid Social |
| TikTok ads | tiktok | paid_social | Paid Social |
| Email newsletter | newsletter | email | |
| LinkedIn post | linkedin | social | Organic Social |
| WhatsApp message or broadcast | whatsapp | social | Organic Social |
| SMS | sms | sms | SMS |
| Print or poster QR code | print | qr | Unassigned |
Habits that keep reports clean
Tips that keep the data clean.
01
Keep everything lowercase.
GA4 treats Facebook and facebook as two different sources, so one campaign splits into two rows.
02
Never tag internal links on your own site.
A UTM click starts a new session and overwrites the original source.
03
Use utm_content to tell apart ads or links that point to the same page, and utm_term for keywords or audiences.
04
Agree a separator rule: hyphens inside a value, underscores between parts of a campaign name, so names can be split back out in a spreadsheet.
Store UTMs with every lead
Get UTM data into your CRM.
GA4 counts visits. Your CRM or database records who became a lead or customer. Unless the UTM tags are saved with each record, the two never meet, and you can't tell which campaign produced which sale. Share this brief with your website developer.
What to ask for
Step 01
Read the UTM tags and ad click IDs from the URL on every page load.
Step 02
Save them in a first-party cookie for 90 days.
Keep a first-touch copy that is never overwritten, and a last-touch copy that updates on each new tagged visit.
Step 03
Ignore visits without UTM tags, so an untagged return visit never wipes the saved values.
Step 04
Add hidden fields for every value to every form: contact, booking, sign-up and checkout.
Step 05
Fill the hidden fields from the cookie when the form is sent.
Step 06
Store each value in its own column on the lead or order record, and map the same fields into the CRM.
Step 07
Test it: open a tagged link, send a form, and check the record shows the right values.
Fields to add to each lead or order
| Field | What it holds |
|---|---|
first_utm_source … first_utm_term | First tagged visit. Set once, never overwritten. |
last_utm_source … last_utm_term | Most recent tagged visit before the form was sent. |
gclid, fbclid, msclkid | Ad click IDs, for offline conversion uploads. |
landing_page | Full URL of the first page seen. |
referrer | The site the visitor came from. |
first_touch_at, last_touch_at | Timestamps of both visits. |
A starting point for the developer
const KEYS=['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid','fbclid','msclkid'];
const q=new URLSearchParams(location.search);
const hit={};KEYS.forEach(k=>{if(q.get(k))hit[k]=q.get(k);});
if(Object.keys(hit).length){
hit.landing_page=location.href;hit.referrer=document.referrer;hit.at=new Date().toISOString();
const save=(n,v)=>document.cookie=n+'='+encodeURIComponent(JSON.stringify(v))+';path=/;max-age=7776000;SameSite=Lax';
if(!document.cookie.includes('utm_first='))save('utm_first',hit);
save('utm_last',hit);
}Request: store UTM data with every lead and order
Why: GA4 shows visits. Our database shows leads and sales. Saving the UTM tags with each record tells us which campaign produced each lead and how much revenue it brought in.
Steps:
1. Read the UTM tags and ad click IDs from the URL on every page load.
2. Save them in a first-party cookie for 90 days. Keep a first-touch copy that is never overwritten, and a last-touch copy that updates on each new tagged visit.
3. Ignore visits without UTM tags, so an untagged return visit never wipes the saved values.
4. Add hidden fields for every value to every form: contact, booking, sign-up and checkout.
5. Fill the hidden fields from the cookie when the form is sent.
6. Store each value in its own column on the lead or order record, and map the same fields into the CRM.
7. Test it: open a tagged link, send a form, and check the record shows the right values.
Fields to add:
- first_utm_source … first_utm_term: First tagged visit. Set once, never overwritten.
- last_utm_source … last_utm_term: Most recent tagged visit before the form was sent.
- gclid, fbclid, msclkid: Ad click IDs, for offline conversion uploads.
- landing_page: Full URL of the first page seen.
- referrer: The site the visitor came from.
- first_touch_at, last_touch_at: Timestamps of both visits.
Starting point:
const KEYS=['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid','fbclid','msclkid'];
const q=new URLSearchParams(location.search);
const hit={};KEYS.forEach(k=>{if(q.get(k))hit[k]=q.get(k);});
if(Object.keys(hit).length){
hit.landing_page=location.href;hit.referrer=document.referrer;hit.at=new Date().toISOString();
const save=(n,v)=>document.cookie=n+'='+encodeURIComponent(JSON.stringify(v))+';path=/;max-age=7776000;SameSite=Lax';
if(!document.cookie.includes('utm_first='))save('utm_first',hit);
save('utm_last',hit);
}Never put names, emails or phone numbers in UTM tags. Store them only in your own database, under your privacy policy.
The ones that come up most
Common questions.
01What is a UTM link?
A UTM link is a normal web address with tracking tags added after a question mark. The tags (utm_source, utm_medium, utm_campaign, utm_content and utm_term) tell GA4 and other analytics tools where a visit came from, so you can compare campaigns that send people to the same page.
02Which UTM parameters are required?
utm_source, utm_medium and utm_campaign. Without all three, GA4 reports the campaign as (not set) or files the visit in the wrong channel. utm_content and utm_term are optional and are mostly used for ad variations and keywords.
03Why does my campaign traffic show as Unassigned in GA4?
GA4 sorts visits into channels using fixed rules on the source and medium. A medium it doesn't recognise, such as "paid-ads" or "influencer" from an unknown source, matches no rule and ends up in Unassigned. The channel check in this builder runs the same rules, so you can fix the link before it goes live.
04What are utm_id, utm_source_platform, utm_creative_format and utm_marketing_tactic?
These are extra parameters GA4 can collect. utm_id is a campaign ID that lets you join cost data imported into GA4. The other three describe the buying platform, the creative format and the targeting tactic. They are optional and sit under Extra GA4 fields.
05Is anything I type saved or sent anywhere?
No. The builder runs entirely in your browser. Your recent links are stored only in this browser so you can copy or export them later, and you can clear them at any time.