← All posts
Marketing Ops Sep 10, 2026

Your Channel Report Is Downstream of a Text Box Nobody Validates

Your Channel Report Is Downstream of a Text Box Nobody Validates

Somewhere in your company there is a file called something like “UTM Naming Conventions v3 FINAL.” It lives in a Drive folder nobody has opened since the last reorg. It was written by a contractor. It has been read end to end by exactly two people, one of whom wrote it.

That file is the load-bearing foundation of every channel report your CEO has ever seen.

Not the analytics platform. Not the BI tool. Not the attribution model you paid a consultant to configure. The doc. Because everything downstream of it is just counting strings that humans typed by hand into a text box at 4:40 on a Friday, on the way out the door.

The most important field in your stack has no validation

Think about what a UTM actually is. It is a free text parameter stapled to the end of a URL. There is no dropdown. There is no autocomplete. There is no schema, no required format, no warning. Nothing anywhere in the chain checks whether the value you just typed matches the value you typed last time.

So over three years and eleven people you quietly accumulate:

  • utm_source=facebook
  • utm_source=Facebook
  • utm_source=FB
  • utm_source=fb
  • utm_source=fb-ads
  • utm_source=meta
  • utm_source=%7B%7Bplacement%7D%7D, from the week somebody tested a dynamic parameter and never checked whether it rendered

Seven sources. One channel. And Meta is not even the automated case, because those parameters get configured by hand at the ad level by whoever built the campaign.

Now here is the part that should actually bother you. The natural assumption is that mistagged traffic falls into some junk bucket where you would eventually notice it. That is not what happens.

GA4 sorts sessions into channels with an ordered set of rules, and the rules are not symmetrical. Paid Search requires two things at once: the source has to be on a list of search sites Google maintains, and the medium has to match a paid pattern. Organic Search is looser. It accepts either a source on that search list or a medium of organic. Just one.

So take utm_source=google with utm_medium=ppc-brand, which somebody typed because it seemed more descriptive. The medium fails the paid pattern, so Paid Search is out. But the source is still google, and that alone satisfies Organic Search. Your paid spend gets filed as free traffic, and SEO gets a nice quarter it did not earn.

Break it the other way, source wrong but medium cpc, and you drop into Paid Other, which is where paid traffic goes to become anonymous.

Unassigned, the bucket everyone actually watches, only catches sessions where no rule matched at all. It is the least of your problems. The expensive errors do not look like errors. They look like a channel.

Even a disciplined team gets polluted from outside

Say your team is genuinely rigorous. Say you actually follow the doc. You are still not in control of your own tagging, because most of the links pointing at your site were not built by you.

Your email platform appends its own parameters, in its own format, and it does not ask. Your ad platforms auto-tag with click IDs that follow different rules than your manual UTMs and sometimes override them. Your agency tags campaigns in whatever house convention they used at their last client. Your partner sends you traffic with their conventions. Your sales reps copy a link out of the CRM and paste it into LinkedIn with nothing on it at all, which is somehow the cleanest option available.

Then someone shares a tagged link in a Slack channel, forty people click it, and you have forty paid social sessions from your own employees.

You do not have a channel mix. You have a spelling test, and you have been grading it on a curve.

“Just enforce the convention” is not a plan

This is the part where a normal marketing blog tells you to hold a training and republish the doc. That has been tried at every company on earth and it works for about one quarter.

It fails for a structural reason, not a motivational one. Enforcement requires a gate, and there is no gate. The people minting links are the people least invested in your reporting: the rep in a hurry, the exec posting from their phone, the agency contractor who started Tuesday, the intern building the newsletter. A document is not a control. A control is something that physically prevents the wrong value from being saved, and a URL bar prevents nothing.

So the convention decays, and the decay is invisible, and the report keeps rendering a confident pie chart on top of it. The chart never says “low confidence.” Charts do not have a face for that.

What actually helps

Not much of this is glamorous. All of it is cheaper than another attribution project.

  • Stop trying to fix history. You are not going to clean three years of campaign names. Pick a date, normalize forward, and stop apologizing for the before times.
  • Normalize on read, not on write. You cannot make people type correctly. What you can do, in whatever layer you already report from, is keep a boring lookup table that folds FB, fb, Facebook, fb-ads and meta into one bucket at query time. Nobody will ever compliment you for it. It fixes most of the pain anyway.
  • Do not use Unassigned as your quality score. Put it on the report, sure. Just understand it is a floor on your error rate, not a measure of it. The mistags that cost you money already got sorted into a real channel and are sitting inside Organic Search and Paid Other looking perfectly normal. Go audit the mediums inside your good channels. That is where the money is hiding.
  • Reduce the number of humans who can mint a link. One form, four dropdowns, no free text. Fewer link authors beats better link authors every time.
  • Audit the traffic you send yourself. Internal clicks on tagged links are the easiest fake channel volume in your whole report.

The uncomfortable part

None of this is a tooling problem, which is a strange thing for a company that sells a tool to write down. No dashboard can recover a value that was never typed. THE DASHBOARD cannot. Nothing can. That traffic showed up unlabeled and it will stay unlabeled, and any vendor who tells you they can resolve it is selling you a model that guesses and then calls the guess data.

What we would actually claim is smaller and more boring than that. Right now this mess is spread across your ad platforms, your CRM, your web analytics and your billing system, and each one shows you its own slice inside its own tab with its own vocabulary. So the argument in the room is never about the mess itself. It is about whose tab is right, which is not a question anybody can win.

Fewer places to look does not clean the data. It just means when you finally go looking for why the channel numbers feel wrong, you are reading one thing instead of opening six tabs and doing the reconciliation in your head at 6pm.

If seeing your mess in one place instead of six sounds useful, that is roughly what we built THE DASHBOARD for. It is at ihatemarketing.ai.

Or, cheaper: go open the UTM doc. Somebody should.

Prefer to listen? This post is an episode of THE DASHBOARD Confessional.

Listen on Apple Podcasts  ·  Play the episode

One dashboard. No bullshit.

See your entire stack in one place.

$1,800 a month, flat. No AI tokens, no seats, no bullshit. Onboarding in days, not quarters.

Get THE DASHBOARD