---
title: "UTM Builder"
id: "23920"
type: "page"
slug: "utm-builder"
published_at: "2026-11-04T08:02:12+00:00"
modified_at: "2026-11-04T20:34:45+00:00"
url: "https://uprisedigital.com.au/tools/utm-builder/"
markdown_url: "https://uprisedigital.com.au/tools/utm-builder.md"
excerpt: "Free UTM Builder for GA4 Build tagged campaign links in seconds, with presets for Meta, Google Ads, email and Google Business Profile, plus a check on which GA4 channel each link will land in. Free to use. No sign-up. Built..."
---

# Free UTM Builder for GA4

Build tagged campaign links in seconds, with presets for Meta, Google Ads, email and Google Business Profile, plus a check on which GA4 channel each link will land in.

Free to use. No sign-up. Built by [Uprise Digital](https://uprisedigital.com.au/about-us/)
.

Free UTM builder## Build your campaign link

Pick where the link will run, add your page, and copy a tagged URL that GA4 reports correctly.

Where will this link run?

CustomMeta adsGoogle AdsLinkedIn adsEmailGoogle Business ProfileQR code / print

One linkBulk links

Website URL *

Campaign source (utm_source) *

Campaign medium (utm_medium) *

Campaign name (utm_campaign) *

Campaign ID (utm_id)

Campaign term (utm_term)

Campaign content (utm_content)

Campaign names, one per line

Content values, one per line

We build one link for every campaign and content pair, using the source and medium above.

More GA4 parameters Source platform (utm_source_platform)

Creative format (utm_creative_format)

Marketing tactic (utm_marketing_tactic)Google says creative format and marketing tactic aren’t reported in GA4 yet, but other tools can read them.

 Formatting Case Force lowercase

Spaces becomeHyphens (-)Underscores (_)%20

 ResetCopy link to these settings

Your campaign URL

`Your tagged link appears here as you type.`Copy linkCopy parameters onlyTest link

Printing this link? Download a QR code for flyers, signs and quotes.

PNGSVG

Your campaign URLs

Download CSVCopy all

Recently copied on this deviceClear

**Tagged links are step one.** Want tracking that follows every lead from the first click to a signed contract? We set it up as part of every campaign.

[Get a free tracking audit](#audit)

'; }).join(''); var cg = channel(clean(v.source, true, 'hyphen'), clean(v.medium, true, 'hyphen'), clean(v.campaign, true, 'hyphen')); var tip = cg === 'Unassigned' ? ' GA4 can’t place this medium in a default channel. Use one GA4 recognises, like cpc, paid_social, email, organic or referral, or set up a custom channel group.' : ''; chan.innerHTML = 'GA4 default channel: **' + esc(cg) + '**.' + esc(tip) + '

'; try { var c = qrCanvas(res.url, 320, '#0A0A0A'); c.setAttribute('role', 'img'); c.setAttribute('aria-label', 'QR code for your tagged link'); var box = $('#utm-qr'); box.innerHTML = ''; box.appendChild(c); } catch (e) { $('#utm-qr').innerHTML = 'This link is too long for a QR code.

'; } } function lines(t) { return String(t || '').split(/\n/).map(function (s) { return s.trim(); }).filter(Boolean); } var bulkRows = []; function renderBulk(v, o) { var camps = lines($('#utm-bulk-campaign').value), conts = lines($('#utm-bulk-content').value); if (!camps.length) camps = [v.campaign]; if (!conts.length) conts = [v.content]; bulkRows = []; var err = ''; camps.forEach(function (c) { conts.forEach(function (ct) { if (bulkRows.length >= 300) return; var vv = {}; KEYS.forEach(function (k) { vv[k] = v[k]; }); vv.campaign = c; vv.content = ct; var r = build(F.url.value, vv, o); if (r.error) err = r.error; else bulkRows.push([clean(c, o.lower, o.spaces), clean(ct, o.lower, o.spaces), r.url]); }); }); $('#utm-err').textContent = err && F.url.value.trim() ? err : ''; var t = $('#utm-bulk-table'); if (!bulkRows.length) { t.innerHTML = 'Add a website address and one campaign or content value per line.

'; return; } t.innerHTML = '' + bulkRows.length + ' link' + (bulkRows.length > 1 ? 's' : '') + (bulkRows.length >= 300 ? ' (capped at 300)' : '') + '

| Campaign | Content | Link | Copy |
| --- | --- | --- | --- |
| ' + esc(r[0] \|\| '-') + ' | ' + esc(r[1] \|\| '-') + ' | ' + esc(r[2]) + ' | Copy |

'; } /* history */ var HK = 'uprise-utm-history'; function hist() { try { return JSON.parse(localStorage.getItem(HK) || '[]'); } catch (e) { return []; } } function remember(u) { try { var h = hist().filter(function (x) { return x !== u; }); h.unshift(u); localStorage.setItem(HK, JSON.stringify(h.slice(0, 8))); } catch (e) {} showHist(); } function showHist() { var h = hist(), box = $('#utm-hist'); if (!h.length) { box.hidden = true; return; } box.hidden = false; $('#utm-hist-list').innerHTML = h.map(function (u, i) { return '' + esc(u) + 'Copy'; }).join(''); } /* share: page URL with b_ fields (never utm_ names, so our own analytics stay clean) */ function shareLink() { var p = new URLSearchParams(); p.set('b_url', F.url.value.trim()); KEYS.forEach(function (k) { if (F[k].value.trim()) p.set('b_' + k, F[k].value.trim()); }); if (!lower.checked) p.set('b_lower', '0'); if (spaces.value !== 'hyphen') p.set('b_spaces', spaces.value); return location.origin + location.pathname + '?' + p.toString() + '#ut-utm'; } function loadShared() { try { var p = new URLSearchParams(location.search), any = false; if (p.get('b_url')) { F.url.value = p.get('b_url'); any = true; } KEYS.forEach(function (k) { var v = p.get('b_' + k); if (v) { F[k].value = v; any = true; } }); if (p.get('b_lower') === '0') lower.checked = false; if (p.get('b_spaces')) spaces.value = p.get('b_spaces'); if (any && (F.source_platform.value || F.creative_format.value || F.marketing_tactic.value)) $('#utm-more').open = true; } catch (e) {} } function setPreset(name) { preset = name; $$('[data-preset]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-preset') === name ? 'true' : 'false'); }); var p = PRESETS[name]; if (p.v) KEYS.forEach(function (k) { if (k in p.v) F[k].value = p.v[k]; else if (['source_platform', 'creative_format', 'marketing_tactic'].indexOf(k) < 0) F[k].value = ''; }); var n = $('#utm-preset-note'); n.textContent = p.note; n.hidden = !p.note; render(); } function setMode(m) { mode = m; $$('[data-mode]').forEach(function (b) { b.setAttribute('aria-pressed', b.getAttribute('data-mode') === m ? 'true' : 'false'); }); $('#utm-bulk').hidden = m !== 'bulk'; $('#utm-single-out').hidden = m === 'bulk'; $('#utm-bulk-out').hidden = m !== 'bulk'; $('#utm-camp-wrap').hidden = m === 'bulk'; $('#utm-cont-wrap').hidden = m === 'bulk'; render(); } root.addEventListener('input', function (e) { if (e.target.matches('input,select,textarea')) render(); }); root.addEventListener('change', function (e) { if (e.target.matches('input,select')) render(); }); root.addEventListener('click', function (e) { var b = e.target.closest('button'); if (!b || !root.contains(b)) return; if (b.hasAttribute('data-preset')) return setPreset(b.getAttribute('data-preset')); if (b.hasAttribute('data-mode')) return setMode(b.getAttribute('data-mode')); if (b.hasAttribute('data-row')) return copy(bulkRows[+b.getAttribute('data-row')][2]); if (b.hasAttribute('data-hist')) return copy(hist()[+b.getAttribute('data-hist')]); switch (b.id) { case 'utm-copy': if (last) { copy(last, 'Link copied'); remember(last); } else say('Add a website address first'); break; case 'utm-copy-params': if (last) { var i = last.indexOf('?'); copy(i > -1 ? last.slice(i + 1).split('#')[0] : '', 'Parameters copied'); } break; case 'utm-open': if (last) window.open(last, '_blank', 'noopener'); break; case 'utm-png': if (last) qrCanvas(last, 1024, '#000').toBlob(function (bl) { download('utm-qr-code.png', bl); }); break; case 'utm-svg': if (last) download('utm-qr-code.svg', new Blob([qrSvg(last, '#000')], { type: 'image/svg+xml' })); break; case 'utm-share': copy(shareLink(), 'Link to these settings copied'); break; case 'utm-reset': KEYS.concat(['url']).forEach(function (k) { F[k].value = ''; }); $('#utm-bulk-campaign').value = ''; $('#utm-bulk-content').value = ''; lower.checked = true; spaces.value = 'hyphen'; setPreset('custom'); F.url.focus(); break; case 'utm-csv': if (!bulkRows.length) return say('Nothing to download yet'); var csv = 'campaign,content,url\n' + bulkRows.map(function (r) { return r.map(function (c) { return '"' + String(c).replace(/"/g, '""') + '"'; }).join(','); }).join('\n'); download('utm-links.csv', new Blob(['﻿' + csv], { type: 'text/csv' })); break; case 'utm-copy-all': if (bulkRows.length) copy(bulkRows.map(function (r) { return r[2]; }).join('\n'), bulkRows.length + ' links copied'); break; case 'utm-hist-clear': try { localStorage.removeItem(HK); } catch (e2) {} showHist(); break; } }); loadShared(); showHist(); render(); })();

## What Is a UTM Code?

[Use the UTM Builder](#ut-top)

A UTM code is a set of tags added to the end of a link, like `?utm_source=facebook&utm_medium=paid_social`. When someone clicks, Google Analytics reads the tags and records exactly where the visit came from.

Without them, a click from your newsletter, a QR code on a flyer or a Meta ad can show up as direct or referral traffic, and you can’t tell which campaign produced the lead.

UTM stands for Urchin Tracking Module, after the analytics company Google bought to build Google Analytics.

Also calledUTM parameters, UTM tags, campaign URLs

Core tagsutm_source, utm_medium, utm_campaign

Read byGA4, most CRMs and ad tools

Case sensitiveYes, so keep everything lowercase

## The UTM Parameters GA4 Reads

Google lists nine campaign parameters in its [Analytics help on URL builders](https://support.google.com/analytics/answer/10917952)
. Most links only need the first three, but Google recommends setting every relevant one, because any you leave out show as (not set) in reports.

| Parameter | What it records | Example |
| --- | --- | --- |
| utm_source | Where the click came from | facebook, google, newsletter |
| utm_medium | The type of channel | paid_social, cpc, email |
| utm_campaign | The campaign or offer | knockdown-rebuild-guide |
| utm_id | A campaign ID, useful for importing cost data | 2026-q4-kdr |
| utm_term | The keyword or audience | custom-home-builder |
| utm_content | Which ad, button or link was clicked | video-30s, cta-top |
| utm_source_platform | The platform that bought or managed the traffic | Search Ads 360 |
| utm_creative_format | The type of creative | video, display |
| utm_marketing_tactic | The targeting approach | remarketing, prospecting |

Google notes that utm_creative_format and utm_marketing_tactic aren’t reported in GA4 yet. They’re still worth adding if your CRM or a reporting tool reads them.

## How GA4 Sorts Your Links Into Channels

GA4 puts every visit into a default channel, like Paid Social or Email, using fixed rules about source and medium. If your medium doesn’t match a rule, the visit lands in Unassigned and drops out of your channel reports. The builder above checks this as you type, using the rules in Google’s [default channel group documentation](https://support.google.com/analytics/answer/9756891)
.

| To land in | Use a medium like | And a source like |
| --- | --- | --- |
| Paid Search | cpc, ppc or anything starting with paid | google, bing |
| Paid Social | paid_social, cpc | facebook, fb, instagram, ig, linkedin |
| Display | display, banner, cpm | any |
| Email | email | newsletter, or email as the source |
| Organic Social | social, social-media, sm | any |
| Organic Search | organic | google, bing |
| Referral | referral, link | the referring site |
| Affiliates | affiliate | the partner |

**Printed QR codes:** GA4 has no default channel for print, so a medium like qr_code shows as Unassigned. Set up a [custom channel group](https://support.google.com/analytics/answer/13051316)
 that groups medium qr_code as its own channel, and your flyers and signs get their own row.

## UTM Naming Rules That Keep Reports Clean

Most messy GA4 reports come from inconsistent tags, not missing ones. Google’s own best practices boil down to a few rules:

- **Use lowercase everywhere.** GA4 is case sensitive, so Facebook and facebook show as two separate sources.
- **Pick one value per platform and stick to it.** If you use fb for Facebook, use it on every link.
- **Use one medium per channel.** paid_social for all social ads, cpc for all search ads.
- **Match campaign names to the ad platform.** Then a report row lines up with a campaign you can find.
- **Use hyphens instead of spaces.** Spaces turn into %20 and are easy to break when a link is pasted.

https://example.com.au/free-quote/?utm_source=facebook&utm_medium=paid_social&utm_campaign=knockdown-rebuild-guide&utm_content=video-30s

## Meta and Google Ads: Let the Platform Fill In the Tags

### Meta ads

Meta can fill in UTM values for you at the moment of the click using dynamic parameters. Paste the parameter string into the URL parameters field of your ad, and Meta swaps `{{campaign.name}}` for the real campaign name. Google’s UTM guide uses the same example, and recommends dynamic parameters because they remove typing errors. Use the Meta ads preset above to get the full string.

### Google Ads

If your Google Ads account is linked to GA4 with auto-tagging on, you don’t need UTMs for GA4. Google says that in GA4, [auto-tagging is prioritised over manual tagging](https://support.google.com/google-ads/answer/3095550)
. Manual tags are still useful when a CRM or form tool needs to record the campaign on each lead.

## Mistakes That Break Campaign Tracking

1. **Tagging links between your own pages.** UTMs on internal links overwrite the campaign data GA4 uses to credit conversions, so the ad or email that brought the visitor loses the credit.
2. **Using a medium GA4 doesn’t recognise.** Values like facebook-ads or newsletter as a medium send traffic to Unassigned.
3. **Dropping the tags on redirects.** Some redirects strip query strings. Click your tagged link and check the tags are still in the address bar.
4. **Putting the tags after a #.** Anything after a hash isn’t sent to the server. This builder always places UTMs before the #.
5. **Tagging your Google Business Profile inconsistently.** Use one fixed link for the website button so Maps visits are easy to find.

## UTM Examples for Lawyers, Builders and Solar Companies

The same naming pattern works across every channel. Here’s how a consistent set of tags looks for three high-ticket service businesses:

| Business and channel | source | medium | campaign | content |
| --- | --- | --- | --- | --- |
| Family law firm, Meta lead ad | {{site_source_name}} | paid_social | {{campaign.name}} | {{ad.name}} |
| Family law firm, monthly newsletter | newsletter | email | 2026-11-update | cta-book-consult |
| Custom home builder, cost guide on Meta | facebook | paid_social | kdr-cost-guide | video-site-walk |
| Custom home builder, display home sign | print | qr_code | display-home | front-sign |
| Solar installer, Google Business Profile | google | organic | gbp-listing | website-button |
| Solar installer, LinkedIn ad to businesses | linkedin | paid_social | commercial-solar | carousel |

Notice the pattern: the source names the platform, the medium names the channel type, the campaign names the offer, and the content names the creative. Write your own version of this table once, share it with everyone who builds links, and your reports stay clean even when several people run campaigns.

### Keep a tagging sheet

Bulk mode in the builder exports a CSV of every link with its campaign and content values. Keep that file as your record, so anyone can check which link went on which ad, email or sign months later.

## From Tagged Clicks to Signed Contracts

UTMs tell you which campaign brought a visit. For high-ticket services like law firms, builders and solar companies, that’s only half the answer: the campaign that brings the most enquiries often isn’t the one that brings the most signed work. Pass your UTM values into your CRM with each enquiry, and you can report cost per consultation and cost per sale by campaign, not just clicks. We set this up on every [Google Ads](https://uprisedigital.com.au/google-ads/)
 and [Meta ads](https://uprisedigital.com.au/facebook-ads-australia/)
 campaign we run, and you can see the results in our [case studies](https://uprisedigital.com.au/case-studies/)
.

## How to Use the UTM Builder

Four steps, under a minute, nothing to sign up for.

45+ 5 Star Reviews

**5.0**★★★★★

1

### Pick a Preset

Choose where the link will run, like Meta ads, email or Google Business Profile, and we fill in the source and medium GA4 expects.

2

### Add Your Page and Campaign

Paste the page you want people to land on and name the campaign. Existing query strings and #anchors are kept.

3

### Check the Channel

The builder shows which GA4 channel the link will land in and flags anything that would send it to Unassigned.

4

### Copy, Test or Print

Copy the link or just the parameters, test it, download a QR code, or switch to bulk mode for a CSV of links.

## Get a Free Tracking Audit

- Where your marketing stands: ads, website, tracking and how AI assistants describe you.
- Where the money leaks: the spend, pages and steps that cost you enquiries.
- Your first three moves, in priority order.
- You’ll speak with a specialist who runs campaigns, not a salesperson.

★ ★ ★ ★ ★

5.0 Rating

45+ Reviews

### Find Out What Your Marketing Is Really Costing You

## UTM Builder Questions, Answered

What is a UTM builder?

A UTM builder adds campaign tags to a web address, so Google Analytics can record where each visit came from. This one also checks your values against GA4’s channel rules and can build links in bulk.

Which UTM parameters are required?

GA4 can read a link with any single tag, but Google recommends setting all relevant ones, especially utm_source, utm_medium, utm_campaign, utm_id and utm_source_platform. Any you leave out show as (not set) in reports.

Are UTM parameters case sensitive?

Yes. GA4 treats Facebook and facebook as different sources, which splits your data. Keep every value lowercase. The builder does this for you by default.

Do I need UTMs on Google Ads links?

Not for GA4, if auto-tagging is on and your accounts are linked. Google says GA4 prioritises auto-tagging over manual tags. Add UTMs only if another tool, like your CRM, needs them.

What should I use for Meta ads?

Use Meta’s dynamic parameters in the URL parameters field, such as utm_source={{site_source_name}} and utm_campaign={{campaign.name}}. Meta fills in the real values when someone clicks, so every ad is tagged without typing.

Why is my campaign showing as Unassigned in GA4?

Your medium doesn’t match any of GA4’s default channel rules. Use a recognised medium such as cpc, paid_social, email, organic or referral, or create a custom channel group in GA4 for your own values.

Should I add UTMs to links on my own website?

No. Tagging internal links overwrites the campaign data GA4 uses to credit conversions, so the real source loses the credit. Use UTMs only on links that point to your site from somewhere else.

How do I track a QR code with UTMs?

Build a tagged link with a source like print and a medium like qr_code, then download the QR code from the builder. GA4 shows that medium as Unassigned unless you set up a custom channel group for it.

## More Free Marketing Tools

[CPM CalculatorCost per 1,000 impressions, total cost or reach, plus CTR, CPC and cost per lead.Open the tool →](https://uprisedigital.com.au/tools/cpm-calculator/)
[ROAS CalculatorReturn on ad spend, break-even ROAS from your margin, and profit after fees.Open the tool →](https://uprisedigital.com.au/tools/roas-calculator/)
[Cost Per Sale CalculatorCompare lead sources on true cost per sale, including your sales team’s time.Open the tool →](https://uprisedigital.com.au/tools/cost-per-sale-calculator/)
[CTR CalculatorClick-through rate for ads, search and email, and what a better CTR is worth.Open the tool →](https://uprisedigital.com.au/tools/ctr-calculator/)
[Google Review Link GeneratorA direct review link, QR code and printable review card for your business.Open the tool →](https://uprisedigital.com.au/tools/google-review-link-generator/)
[Schema Markup GeneratorJSON-LD for local businesses, services, people, FAQs and articles.Open the tool →](https://uprisedigital.com.au/tools/schema-markup-generator/)
[PPC ROI CalculatorEstimate leads, sales and return from a Google Ads budget.Open the tool →](https://uprisedigital.com.au/ppc-roi-calculator/)
[AI Marketing StrategyA marketing strategy for your business, written by AI from your answers.Open the tool →](https://uprisedigital.com.au/ai-marketing-strategy/)
