Published by Terminus, the marketing taxonomy governance platform.
Free UTM Naming Convention Template (Google Sheets, 2026)
Last updated
Published by Terminus, the marketing taxonomy governance platform.
A good UTM naming convention is not a five-column spreadsheet. It is a controlled vocabulary, a casing rule, a set of validation patterns, and an audit row that makes drift visible the moment it happens. This article walks through the shape of a free Google Sheets starter pack built around those pieces, plus the 12 starter values for utm_source and the 7 starter values for utm_medium that most teams should begin from. The actual sheet is delivered through an email opt-in further down the page. Use this article to decide whether the structure fits your team before you grab it, or to rebuild it from scratch in your own workbook.
TL;DR
- Most free UTM templates are concat formulas. A real convention also needs picklists, casing rules, prohibited characters, and an audit row.
- The starter pack gives you 12 sources, 7 mediums, a campaign-name regex, and validation rules that catch the common drift bugs.
- Lock the columns down with data validation. Free typing into UTM cells is where conventions die.
- The campaign field is where you encode hierarchy. Pick a delimited pattern and enforce it with a regex.
- Spreadsheets are fine for a single team up to maybe 200 active campaigns. Beyond that you outgrow them.
- The download is delivered through an email form near the end of the article. The full structure is described in this page if you would rather build it yourself.
Why most “free UTM templates” fail
Search “free UTM template” and you get the same artifact ten different ways: five columns labelled utm_source through utm_content, a sixth column with a CONCATENATE formula, and a built URL at the end. Sometimes a tab labelled “example” with three rows of made-up data.
That is a URL builder, not a naming convention. A URL builder produces tagged links. A naming convention prevents the slow rot that turns six months of campaign data into an (other) channel pile in GA4. Both matter, but the second is the one that protects your reporting.
Here is what the typical “free template” misses:
No controlled vocabulary. The utm_source column is a free-text field. The first person types Facebook. The second types facebook. The third types FB. Three months later the source breakdown in GA4 has all three, plus fb-paid and Facebook Ads, and somebody asks why traffic from Meta is split across five rows.
No casing rule. UTM values are case-sensitive in GA4 and Adobe Analytics. Email and email and EMAIL are three different sources. Most templates do not say a word about this.
No prohibited characters. Spaces, ampersands, equals signs, hashes, plus signs, and uppercase letters all cause specific failures (broken URLs, channel grouping misses, encoding artefacts). A real convention names the allowed character set.
No validation across fields. Some combinations are meaningful and some are noise. utm_source=google with utm_medium=email is almost certainly a tagging mistake. A useful template can flag that combination at the row level before the link goes out.
No audit row. Six months in, nobody can tell which campaigns followed the convention and which did not. The template needs a way to mark each row with the date it was added, who added it, and what convention version was in force at the time.
The starter pack described below covers all five. It is still a Google Sheet, so it has the usual spreadsheet limits, but it is built around the governance problem rather than a fancier CONCATENATE.
The structure of the template
The template is a Google Sheets workbook organised around the elements of a real convention. The structure described here is what the rebuild looks like even if you ignore the gated download and put it together yourself.
Convention summary. A read-only summary of the rules. Allowed characters, the casing rule (lower-kebab-case by default), prohibited values, and the campaign naming pattern. New team members read this first. It is also the page you screenshot when somebody asks “what’s our UTM convention” in Slack.
Sources list. A two-column list. The first column is the canonical utm_source value (google, linkedin, newsletter, etc.). The second column is the description and any synonyms that should map to it. The 12 starter values are listed later in this article. This list is the source of truth for picklist validation on the builder page.
Mediums list. Same structure as Sources. The 7 starter values are listed later in this article. Mediums are where teams overspend on creativity. Keep the list short.
Campaigns list. Active and archived campaign names with their start date, owner, and channel mix. Campaign names follow the regex described in a later section. New campaigns get added here first, then referenced from the builder.
Link builder. Where links get tagged. Each row is one tagged URL. Source, medium, and campaign columns are data-validated against the lists above (free typing throws a flag). Casing is enforced through a helper column that compares the input against LOWER(input). The built URL is in the final column. Audit columns capture the date, owner, and convention version.
Validation rules. Cross-field rules expressed as conditional formatting. source=google with medium=email flags red. source=newsletter with medium=cpc flags red. A “looks suspicious” rule covers any value containing a space, an uppercase letter, or a non-kebab character. The list is short on purpose: enforcing every possible combination in a spreadsheet is a losing fight.
Audit pivot. A pivot of the builder rows grouped by source, medium, and quarter. Screenshot this for a monthly governance review, or export it to a BI tool if you want trend lines.
That combination is what we mean by “governance starter pack” rather than “URL builder.” A URL builder is just the link builder page. The rest is the convention.
How to adapt it to your team
The template is a starting point. Three adaptations are almost always needed.
Add or remove sources. The 12 starter sources cover the most common B2B and B2C channels. If you run heavy on podcast, partner co-marketing, or community channels, add them. If you do not run paid social on Twitter, remove it. The rule is: every source you actually use, exactly once, with a canonical name. Aliases and synonyms go in the description column, not as separate sources.
Pick a casing rule and apply it everywhere. The default is lowercase kebab (paid-social, not Paid_Social or paidsocial). Some teams prefer lowercase snake (paid_social). Both are fine. What is not fine is mixing them. Pick one, document it on the convention summary page, and update the helper column on the link builder to enforce it.
Decide on the campaign field structure. The default regex (below) assumes a delimited campaign name with year, channel, audience, and offer slugs. If your team thinks in quarters rather than months, change the date slug. If you do not segment by audience, drop that slug. The regex is the encoding of your decision. If you do not write it down, the convention drifts within a quarter.
A note on rollout: do not retroactively rename existing campaigns. GA4 holds historical session-source data and renaming will break trend reports. Apply the new convention from a fixed start date and let the old values age out. Record the cutover date on the convention summary page so future readers know where the convention began.
The 12 starter values for utm_source
The starter list. Each value is the canonical source, lowercase, kebab-case, and platform-anchored rather than campaign-anchored.
| Value | What it means |
|---|---|
google | Google Search Ads, Performance Max, Display, YouTube auctions sold by Google Ads |
bing | Microsoft Advertising (Bing, Yahoo, AOL syndicated) |
facebook | Facebook ads in Meta Ads Manager. Use instagram for Instagram-specific placements when you split reporting. |
instagram | Instagram ads in Meta Ads Manager (when split from Facebook) |
linkedin | LinkedIn Campaign Manager |
twitter | X Ads (kept as twitter for historical continuity in most teams) |
tiktok | TikTok Ads Manager |
youtube | YouTube ads bought outside Google Ads (rare) and organic YouTube descriptions |
newsletter | Owned email lists sent through your ESP (Mailchimp, HubSpot, Customer.io, etc.) |
partner | Co-marketing partner placements (specific partner goes in the campaign field) |
podcast | Sponsored podcast reads and host-read promo codes (specific show goes in campaign) |
github | GitHub README links, GitHub Sponsors placements, GitHub Discussions |
Twelve is opinionated. Some teams want fewer (smaller paid mix), some want more (multiple ESPs, partner programs, organic search broken out by engine). The principle: a source is a platform, not a campaign or a creative. The campaign field is where you encode the specific show, partner, or send.
A few common mistakes to avoid:
emailis a medium, not a source. Use the specific ESP ornewsletteras the source andemailas the medium.directshould not appear as a source. Direct traffic in GA4 is the absence of a source. If you tag a link withutm_source=directyou are lying to your own reporting.referralis a medium, not a source. Referral sources are the specific referring site (producthunt,hackernews,reddit) orpartnerwhen it is a co-marketing placement.- Brand-specific aliases (
fb,ig,li) belong in the description column on the Sources tab. The canonical value is the full platform name.
The 7 starter values for utm_medium
The medium tells GA4 (and every other analytics tool) which channel group a session belongs to. GA4’s default channel grouping pattern-matches against medium values, so getting these right is what keeps your channels from collapsing into (other).
| Value | What it means |
|---|---|
cpc | Paid search and any cost-per-click auction (Google Search, Bing, Apple Search Ads) |
paid-social | Paid placements on Meta, LinkedIn, TikTok, X, Pinterest, Reddit |
organic-social | Owned social posts that link out (LinkedIn company page, X handle, organic Instagram bio links) |
email | Any email send, whether from your ESP or a CRM workflow |
display | Programmatic display, retargeting networks, traditional banner buys |
referral | Tagged links from partner sites or integrations |
affiliate | Affiliate program placements (kept separate from referral so commission reporting matches) |
Seven is also opinionated. Some teams split paid-social into prospecting and retargeting variants. Some add affiliate separately from referral. Some add audio for podcast and streaming radio. All reasonable, and the template makes them easy to add. But start with seven. Every additional medium is a row in your channel grouping that has to be maintained.
GA4 channel grouping notes worth knowing:
cpcandppcare both matched by GA4 as Paid Search. Pick one. The starter pack usescpc.paid_social(snake case) andpaid-social(kebab case) are different strings. GA4 channel grouping rules match against the exact string. Pick one casing across your whole convention and stick to it.social(without a paid/organic prefix) lands in Organic Social by default in GA4. If you usesocialfor paid placements, it is going to be miscategorised. Use the prefix.
The campaign naming convention (the regex)
The campaign field is where teams either get governance right or watch it collapse. The other parameters are picklists. The campaign value is generative. Without a pattern, every marketer invents their own.
The starter pack uses a delimited slug with four parts:
{yyyymm}_{channel}_{audience}_{offer}
Example: 202608_paidsocial_smb_freetemplate
The validation regex on tab 6 is:
^[0-9]{6}_[a-z]+_[a-z0-9]+_[a-z0-9-]+$
That regex enforces:
- A six-digit year-month prefix (so campaigns sort lexically by date)
- Three underscore-delimited slugs after the date
- Lowercase letters and digits only in the slugs (with hyphens allowed in the offer slug for multi-word offers like
q3-launch-webinar) - No spaces, no uppercase, no special characters
Four slugs is a deliberate ceiling. Five or six gets unreadable. Three is usually too few to express a real campaign. If your team needs more dimensions, encode them in utm_content (creative variant, placement) and utm_term (keyword or audience targeting), which is what those parameters exist for.
A couple of judgement calls baked into the default pattern:
Year-month prefix. Sorting campaigns by date is more valuable than sorting them by channel or product. The prefix puts time first so that any alphabetical sort on the campaign list groups campaigns by the month they ran. Quarterly teams can use 2026q3 instead. Annual teams can drop to 2026 but lose monthly resolution.
Channel slug separate from utm_medium. This is intentional duplication. utm_medium tells GA4 the channel for reporting. The channel slug in the campaign name lets you read the campaign value at a glance in dashboards that show the campaign field without the medium. It also lets you filter campaign names by channel inside a spreadsheet without joining tables. The channel slug in the campaign name drops the hyphen (paidsocial) where the utm_medium value keeps it (paid-social). That is because the regex enforces single-word slugs except in the offer position; if you would rather match casing exactly across both, change the regex to allow hyphens in the channel slug too.
Audience slug. This is where most teams add the most value to their reporting. Splitting smb from enterprise or existing from new in the campaign name makes downstream analysis straightforward. If your team does not segment, drop this slug and use a three-part pattern.
Offer slug. The thing the campaign is actually pushing. freetemplate, webinar-mmm, casestudy-canon. Multi-word offers use hyphens, which is the one place the convention allows hyphens inside a slug.
When you outgrow the spreadsheet
A spreadsheet works for governance up to a point. The honest ceiling depends on your team size and campaign volume, but the signals that you are past it are consistent.
You have outgrown the spreadsheet when:
- More than two or three people tag links at the same time and you start seeing merge conflicts or overwritten rows.
- The validation tab catches errors after the link has already been shared, not before.
- The audit tab does not match the actual UTMs hitting GA4 (people are building links outside the sheet).
- Your sources or campaigns list is long enough that picklist dropdowns get slow or unwieldy.
- You need approval workflows. Spreadsheets do not have them. Comments are not approvals.
- You need to enforce the convention across multiple regions or business units with slightly different rules. One sheet cannot hold conditional rules per team without becoming unreadable.
Here is a worked example of the upgrade path.
A B2B SaaS team starts with the template. Three marketers, one ops lead, roughly 30 active campaigns. Everything fits in the sheet. Picklist validation catches typos before links ship. The audit tab matches GA4 within a percent.
A year later they have grown to nine marketers across three regions, plus a partner program. About 180 active campaigns, the sheet has 4,000 rows. Picklist dropdowns are slow enough that marketers stop using them and type values directly, breaking the validation chain. The partner team needs its own picklist of partner names, and bolting that onto Sources without breaking the patterns is fiddly. Drift starts showing up in the GA4 source report.
That is the moment a governance platform earns its keep. Terminus holds the convention as a structured set of fields, picklists, casing rules, and validation patterns that scale past the spreadsheet limit. Picklists are first-class objects you can version. Validation runs at link creation, not after the fact. Approvals are tracked. Region-specific rules are supported without duplicating the whole convention. Builders are role-scoped so marketers see only the values they are allowed to choose. The audit history is queryable.
The transition is straightforward when the convention is already documented in the sheet. The Sources tab, the Mediums tab, the campaign regex, and the validation rules become structured config in the platform. Nothing in the convention itself changes. What changes is where it lives and how it is enforced. The spreadsheet is a fine place to start. It is not the place to end up past 150 to 200 active campaigns or more than five active link-builders.
The download
The full template is delivered through a short email form. The form sits below this paragraph in the published version of the page. Submit it and you will receive the Google Sheets link by email. You can then File > Make a Copy to drop the workbook into your own Drive and start editing.
A few notes before you download:
- The template is a Google Sheets file. There is no Excel version. The conditional formatting and data validation patterns rely on Sheets-specific features that do not survive an
.xlsxexport cleanly. - The convention assumes lowercase kebab case. If your team has standardised on a different casing, change the helper column on the link builder page before you start using it.
- The starter sources and mediums lists are opinionated. Edit them to match your actual channel mix before you roll the template out. Editing later is harder because GA4 will hold the older values.
- The campaign regex is the most important rule in the workbook. Adapt the regex before anything else.
You can also skip the form and rebuild the workbook from the structure described earlier in this article. Everything you need is in the page. The opt-in exists so we can email occasional updates when the convention evolves (for example, when a major platform changes how it handles UTMs and a default value needs to change). You can unsubscribe at any time.
FAQ
Is this template really free?
Yes. There is an email opt-in to download the Google Sheet, no paid tier, no upsell hidden inside the workbook, no usage limit. The opt-in lets us notify template users when the convention needs to change (a platform changes the behaviour of a click identifier, GA4 changes a channel grouping rule).
Can I use this template with Excel instead of Google Sheets?
Not cleanly. The conditional formatting on the validation tab and the data validation on the builder tab rely on Google Sheets-specific functions. An Excel export will lose most of the enforcement. If your team is on Microsoft 365, you can rebuild the structure described in section 2 inside an Excel workbook, translating the validation rules to Excel’s syntax.
What is the difference between this and a regular UTM builder?
A UTM builder produces tagged links. This template does that too (on tab 5), but it also encodes the controlled vocabulary, casing rules, prohibited characters, cross-field validation, and audit row that prevent the convention from drifting. Most “free UTM builder” downloads are concat formulas. This is a governance starter pack.
Why kebab case instead of snake case?
Either works. The default is kebab (paid-social) because it reads well in URLs and most modern teams have standardised on it for source code, CSS classes, and config, so muscle memory matches. Snake (paid_social) is also widely used. Pick one and apply it everywhere. Mixing kebab and snake in the same convention is the most common drift bug.
Should I tag organic search traffic?
Almost never. Search engines append their own information through referrer headers and (for Google Ads) the gclid click identifier. Adding manual UTMs to organic search links breaks the natural channel attribution. The exception is attributing traffic from AI search engines (ChatGPT, Perplexity, Claude) that do not pass referrer information cleanly, where some teams add a tagged anchor parameter to identify those visits. Niche pattern, not a default.
How often should I review and update the convention?
Once a quarter for the picklists. Once a year for the casing rules and campaign regex. The audit tab is the artefact you review. If more than five percent of UTMs in the last 90 days do not match the convention, either the convention is too strict, or the team needs a refresher.
What do I do about historical UTMs that do not match the convention?
Leave them alone. GA4 holds historical session-source data and renaming campaigns will break trend reports. Apply the convention from a fixed start date going forward. Document the cutover date on tab 1 so future readers know where the new convention begins. Old data ages out within a year for most reporting purposes.
Can I add custom fields beyond the five UTM parameters?
The five standard parameters are what every analytics tool reads. Adding a custom utm_audience or utm_region is technically possible (GA4 will record it as a custom query parameter), but only with extra configuration to pull it into reports. For most teams it is better to encode that information inside the existing campaign or content slug. The campaign regex in section 6 shows how to encode audience as a slug.
Is this template GDPR or CCPA friendly?
UTMs themselves are not personal data. The email opt-in is governed by the privacy policy on the form. The template does not collect any data from your end users; it only structures the links you send. Where privacy regulation interacts with UTMs is in how you store click data on landing, which is a separate topic.
Last updated: 2026-08-06.
- 3 Users
- 5 Projects
- 2 Custom Domains
- Simple Taxonomy
- UTM Rules
- Presets
- Labels
- Notes
- Custom Parameters
- Multi-tag UTM Builder
- Auto-shortening
- Click Reports
- Fine-grained User Permissions
- Auditing Tools
- Chrome Extension
- Custom Domain SSL
- URL Monitoring
- Redirect Codes / Link Retargeting
- Bulk Operations
- 5 Users
- 10 Projects
- 3 Custom Domains
- All Taxonomy Types
- Bulk URL Cloning
- QR Codes
- Conventions
- Grid Mode URL Builder
- Email Builder
- Auto-generated Tracking IDs
- Automated Exports
- API Access
- Custom Users
- Custom Projects
- Custom Domains
- Single Sign-On (SSO)
- Invoice Billing
- Signed Agreement
- SOC 2 Type 2