River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

UTM Naming Convention Template

Four documents and five sheets that check every tag you already use against Google's published channel rules, then repair what landed in the wrong channel.

Free download  ·  No account needed

Migration Note

What changed when the rules were read

Fourteen months of tagged traffic for a fictional outdoor gear brand, Ferngate.

ChannelBeforeAfterWhy it moved
Email74,200221,20044 sends carried a medium of newsletter
Organic Social96,3000Never posted organically. All paid
Paid Social214,800311,100$214,000 of Meta spend, recovered
Organic Video21,7000The same trap, on a medium of video
Paid Video6,40028,100$38,600 of YouTube spend
Unassigned166,0400Four mediums matching no rule at all
Affiliates034,900A medium of partner, split by source
Cross-network4,2000The campaign name decided it

Organic Social was the third largest channel at a company that has never published an organic Facebook post. It read that way for fourteen months, and every budget argument built on it was wrong in the same direction.

306,840 of 1,204,000 tagged sessions, just over a quarter, sat in a channel nobody intended. Every misrouted medium was already lowercase.

Ferngate Outdoor spent fourteen months reporting Organic Social as its third largest channel. Nobody at Ferngate has ever posted organically on Facebook. Every one of those 96,300 sessions was a paid ad tagged utm_medium=social, and $214,000 of Meta spend sat in a row labelled organic, in the report the next quarter's budget was argued from. Across the whole account, 306,840 tagged sessions, just over a quarter of them, were filed in a channel nobody intended.

None of that is a tracking bug. Google's default channel group definitions require the medium to match a specific expression before Paid Social will claim a session, and social matches none of it, while Organic Social accepts social outright. The same trap runs on video, through a wider pattern. A medium of newsletter matches no rule at all and lands in Unassigned. And a campaign name carrying shop after a hyphen is Shopping, whatever the source and medium say.

So the pack reads the values already in your data before it writes a single line of standard, and every approved value it does write carries the published rule that makes it safe. Then it repairs the history, against a documented ceiling of fifty custom channel group rules. It installs into the marketing workspace, beside the multi-channel paid report, the Google Ads account audit and the rest of the template library. Send River your values, or take the files blank.

The channel it landed in, beside the channel you meant

The Existing Value Audit, the retroactive Rule Budget with its positions, and the Correction Queue sorted by whether the link can still be changed.

Existing Value Audit

One row per distinct combination. Campaigns collapsed where they share a defect.

MediumSourceSessionsLandedIntendedMechanism
newsletterferngate-email128,400UnassignedEmailMatches none of the nineteen rules
newsletterferngate-email18,600Organic ShoppingEmailCampaign name held shop after a hyphen
socialfacebook96,300Organic SocialPaid SocialMedium fails the paid expression
videoyoutube21,700Organic VideoPaid VideoMedium matches the video substring
partner14 sources34,900UnassignedAffiliatesMatches none of the nineteen rules
displaytradedesk4,200Cross-networkDisplayCampaign name held cross-network
paid-socialfacebook, Facebook, fb, facebook-ads214,800Paid SocialPaid SocialRight channel, four source rows
emailferngate-email74,200EmailEmailMedium is on the documented list

Two defect families, and page one treats them as one. Six rows above are in the wrong channel. One row is in the right channel and split four ways. The first is expensive, the second is cheap, and they have different fixes.

Every misrouted medium here is already lowercase, so forcing lowercase across the property moves none of the 306,840. It merges Facebook into facebook and leaves fb and facebook-ads, turning four source rows into three.

Rule Budget

One custom channel group, applied retroactively. Fifty channels available.

#ChannelOriginRecovers fromMovedCost
1Wholesalenewthe paid channels62,4001
2Emailedited copyUnassigned, Organic Shopping147,0000
3Paid Socialedited copyOrganic Social96,3000
4Paid Videoedited copyOrganic Video21,7000
5Displayedited copyCross-network4,2000
6Affiliate ContentnewUnassigned21,3001
7Affiliate CouponnewUnassigned13,6001
9Referraledited copyUnassigned2,7400
n/aKeyword recoverynot builtneeds the term parameter43,100impossible
n/aCreative splitrejectedneeds manual ad content61,000loses spend

Five of the six repairs cost nothing. A group is made by copying an existing one, so copying the default arrives with its nineteen channels and those are editable. Built as one new channel per defect, the same repairs would spend six for an identical result. The group finished at 22 of 50.

Order is the mechanism. Traffic lands in the first channel whose definition it matches, so positions 3, 4 and 5 do nothing unless they sit above the channel they are recovering from.

Correction Queue

Sorted by whether the link can still be changed. Three answers, not two.

SurfaceWrong valueControlHistoricPer month
Meta account templatesocialcorrectable now96,3006,900
Email campaign templatesnewslettercorrectable now128,4009,200
YouTube campaign templatevideocorrectable now21,7001,550
Partner links on partner sitespartnerby request23,4001,670
Packaging insert QRqrat the redirect2,100150
Spring out-of-home posterprintnever64046
Sends already deliverednewsletternever147,0000
Performance Max termemptynever43,1003,080

The middle answer is the one people write off. The packaging prints a short URL Ferngate owns. The characters on the box are fixed forever and the destination is not, so changing the redirect target corrects every future scan of every unit already shipped.

Per month is what orders the work, not the historic figure. History is what the rule repairs; the accrual is what the correction stops, and it keeps running while anyone debates the convention.

What's in the pack

01

Existing Value Audit

One row per distinct source, medium and campaign combination that actually occurred, carrying the channel it landed in beside the channel it was tagged for, the rule that decided, and the sessions behind it.

02

Channel Rule Reference

All nineteen rules for manually tagged traffic, restated as a lookup you can read a value against, with the four traps that fall out of reading them properly.

03

Convention by Channel

The approved source and medium for every channel, each one carrying the published rule that puts it there, plus the wrong value people reach for and what that wrong value actually does.

04

Rule Budget

The retroactive repair, allocated and ordered against a documented ceiling of fifty channels per group, with the cost of each rule in channels and the sessions it moves.

05

Correction Queue

Every live surface still producing a wrong value, sorted by whether you can change it now, only at the redirect, or never, with the monthly accrual that decides the order.

06

Builder Reference

The exact parameter set per surface, including which values the platform sets dynamically. Google's keyword insertion parameter returns blank on Performance Max, so the term column is empty for that spend and the sheet says so. The search term review picks up from there.

07

Repair Mechanics and Migration Note

What each of the five fix mechanisms reaches and what it leaves broken, then a full worked account: the audit, the repair, and the four things the repair did not touch.

How to use it

  1. 1

    Open in River, or take it blank

    Open the pack in River and send the values you already have, or download the Word documents and CSV sheets and fill them in yourself.

  2. 2

    Send the values, not the convention

    Source, medium and campaign with sessions behind them, over the widest window you can pull, plus the tracking templates from the ad platforms and the email tool.

  3. 3

    Read the misrouted share first

    The tagged sessions sitting in a channel nobody intended, split into Unassigned, paid filed as organic, and campaign name override, with the spend behind the paid rows.

  4. 4

    Correct, then repair, then publish

    Fix the live templates so the defect stops accruing. Allocate the retroactive rules against the ceiling. Publish the standard last, with the rule beside every approved value.

Frequently asked questions

Is this template free?

Yes. The download is Word documents and CSV sheets, with no account and no card. Edit with AI is the optional half: the agent runs your own values against the rules and fills the audit. Every pack sits in the template library.

Will lowercasing all our UTMs fix this?

No, and this is the important answer. Google states that channel definitions are not case sensitive, so case has never been able to move a session between channels. Lowercase merges duplicate report rows inside a channel, which is real and much cheaper. In the worked account it moves zero misrouted sessions.

Can historic reporting actually be fixed, or only future tagging?

Both, by different mechanisms. Custom channel groups apply to reports retroactively, which is what makes the history salvageable. That is the only retroactive lever, it reads seven fields, and it has a hard ceiling. The primary channel group looks identical and populates forward only.

What actually lands in Unassigned?

Any value matching none of the rules. In practice that means a medium naming a surface rather than a channel type: newsletter, partner, qr, print, event and webinar all land there. It is the commonest reason a large email programme reports almost no Email sessions.

Our reporting runs on the BigQuery export. Does the repair reach it?

No, and knowing that before you build the repair rather than after is the point of asking. Custom channel groups are absent from the export schema, so anything built on it keeps the original classification. The pack writes the equivalent logic for the query instead, with an owner named.

Which parameters are worth setting at all?

Source, medium, campaign, id, term and content. Two of the documented ones are not worth writing: Google's own URL builder reference notes that marketing tactic and creative format are not currently reported in Analytics properties, so they lengthen the link and produce no column.

What does Edit with AI actually do?

It signs you up, installs this pack as a private workspace, and puts the agent in front of an empty audit. Then you send what you have: a channel export, a screenshot of an acquisition report, the tracking template somebody pasted into a document two years ago.

Find out which channel your tags actually reach

Take the Word documents and CSV sheets blank, or open this exact pack in River and send it the source, medium and campaign values you already have.

Edit with AI