HelpfulAnalytics
utm tracking for client reports

UTM Tracking for Cleaner Client Reports (Agency Playbook)

An agency UTM playbook tied to reporting quality — naming conventions, channel patterns, a pre-report QA check, and how to roll standards across clients.

Most messy client reports aren't a reporting problem. They're a tagging problem that only becomes visible at reporting time.

You open the acquisition table to write the monthly narrative and find facebook, Facebook, fb, and facebook.com as four separate sources. The client's email platform is showing up under Referral. Half the paid social traffic is sitting in Organic Social because someone shared a link without tags. Now the channel story you're about to tell the client is wrong, and you have twenty minutes before the call to decide how wrong you're willing to be.

Clean UTMs fix this upstream. Here's the agency playbook.

Dirty UTMs Produce Dirty Reports

Four failures that show up in client meetings, all caused upstream:

Channel fragmentation. source=facebook and source=Facebook are different values — GA4 is case-sensitive. Your paid social number is split across four rows and each one looks small. The client concludes social isn't working.

Traffic in the wrong channel. GA4 assigns channels based on source/medium patterns. medium=email-blast doesn't match the expected email, so your email campaign lands in Referral or Unassigned. The client's email agency gets no credit, and they'll notice.

Unassigned traffic. Tags that don't match any channel rule dump into "Unassigned," which is unexplainable in a client meeting. "We're not sure where those 4,000 sessions came from" is not a sentence you want to say.

Self-referrals and lost attribution. Untagged links between a client's own properties create referral traffic from themselves, inflating Referral and stealing credit from whatever actually drove the visit.

Campaign names nobody can decode. campaign=test2_final_NEW in a report six months later means nothing to anyone, including the person who made it.

Every one of these is cheap to prevent and expensive to fix after the fact — historical data can't be re-tagged.

The Agency UTM Playbook

Naming Conventions

Five parameters. Rules for each.

utm_source — where the traffic comes from. The specific platform or publisher.

  • Always lowercase, no spaces: facebook, google, linkedin, mailchimp
  • The platform, not the campaign type: facebook, not paid_social
  • Consistent forever. Pick facebook or meta and never mix.

utm_medium — the marketing channel. The highest-stakes parameter, because GA4's channel groupings key off it.

Use these exact values so GA4 classifies correctly:

ChannelUse exactly
Paid searchcpc
Paid socialpaid_social
Emailemail
Organic socialsocial
Displaydisplay
Affiliateaffiliate
Referral partnersreferral

Inventing values here is the single most common cause of Unassigned traffic. medium=ppc-google or medium=newsletter will not be classified the way you expect.

utm_campaign — the initiative. Use a readable, consistent pattern:

[year][quarter]-[client-or-brand]-[initiative]

2026q3-northlake-fall-tuneup
2026q3-northlake-emergency-hvac

Dates in the name make historical reports readable. Without them, "spring promo" is ambiguous by the second year.

utm_content — which creative or placement. Use it to distinguish variants:

video-15s / static-carousel / header-cta / footer-cta

utm_term — keyword, for manually tagged paid search. Usually unnecessary with auto-tagging.

Channel-Specific Patterns

Paid search (Google Ads): use auto-tagging, not manual UTMs. Auto-tagging passes far more detail than UTMs can carry. Manually tagging Google Ads and leaving auto-tagging on can produce conflicts — pick one.

Paid social:

utm_source=facebook&utm_medium=paid_social
&utm_campaign=2026q3-northlake-fall-tuneup
&utm_content=video-15s

Email:

utm_source=mailchimp&utm_medium=email
&utm_campaign=2026q3-northlake-september-newsletter
&utm_content=header-cta

Tag links within the email differently via utm_content — it's the only way to know whether the header or the footer CTA did the work.

Partner and referral placements:

utm_source=chamber-of-commerce&utm_medium=referral
&utm_campaign=2026-partner-listings

Offline and QR codes: use a short redirect URL carrying UTMs. utm_medium=offline or print keeps it out of your digital channel numbers.

What Never Goes in a UTM

  • Personal data. Names, email addresses, phone numbers, user IDs. This violates Google's terms and creates real liability. The most common leak is an email platform's merge tag accidentally landing in a URL parameter.
  • Internal links. Never tag links between pages of the same site. It restarts the session and destroys the original attribution.
  • Spaces or special characters. Use hyphens. Spaces become %20 and fragment your data.
  • Mixed case. Everything lowercase, always. Facebook and facebook are two rows.
  • Anything secret. UTMs are visible in the URL bar, in analytics, and in referrer headers.

Governance

The playbook only works if one person owns it.

A shared tracking sheet — every campaign, its full tagged URL, who built it, when. Takes seconds per campaign and saves the archaeology later.

One owner per client. Usually the account manager. They approve new source and campaign values so nobody invents a fifth spelling of Facebook.

A locked reference of approved values. Sources and mediums are a fixed list, not free text. Campaign names follow the pattern. If someone needs a new source value, it goes through the owner.

Onboard new team members to it. Most tagging drift comes from someone new doing something reasonable that doesn't match your convention.

QA Before the Monthly Report

Five minutes, before you write the narrative. Catches most of it.

PRE-REPORT UTM QA — [Client] — [Month]

[ ] GA4 → Acquisition → Traffic acquisition
    Any "Unassigned" sessions? If yes, find the cause.
[ ] Switch to Session source / medium
    Any case duplicates? (facebook vs Facebook)
    Any near-duplicates? (fb, facebook.com)
[ ] Any medium values outside your approved list?
[ ] Self-referrals — is the client's own domain in Referral?
[ ] Campaign report — any undecodable campaign names?
[ ] Do channel totals roughly match platform-reported clicks?
    (Expect 10-20% gaps; investigate anything larger.)

Common failures and causes:

What you seeUsual cause
Unassigned trafficutm_medium not matching a channel rule
Email traffic in ReferralMedium is newsletter or email-blast, not email
Split social numbersCase or spelling inconsistency in source
Self-referralsUntagged cross-domain links, or missing cross-domain config
Paid social in Organic SocialLinks shared without tags
Big platform-vs-GA4 gapsLanding page redirect stripping parameters

That last one is worth checking directly. If a landing page redirects — http to https, or a trailing-slash rule — and the redirect drops query parameters, your UTMs never arrive. The campaign looks broken in GA4 while the ad platform reports clicks normally.

How UTM Hygiene Changes the Narrative

Same month, same spend, same actual performance.

Before — untagged and inconsistent

Session source / medium          Sessions   Conversions
  (direct) / (none)                 4,210         88
  facebook / referral               1,890         31
  Facebook / cpc                      740         12
  fb / paid_social                    420          9
  m.facebook.com / referral           310          5
  mailchimp / newsletter            1,120         42
  google / organic                  3,890         51
  (not set)                           680         14

The story you can tell: "Direct is our biggest channel, social is scattered, and we're not sure about 680 sessions."

After — clean tagging

Session default channel group    Sessions   Conversions   Conv rate
  Organic Search                    3,890          51       1.31%
  Paid Social                       3,360          57       1.70%
  Email                             1,120          42       3.75%
  Direct                            2,890          62       2.15%
  Referral                            310           5       1.61%

Now the story is real: email converts at nearly triple the site average and paid social outperforms organic search on conversion rate despite lower volume. Both facts were present in the first table and invisible.

That's the argument for tagging discipline in one image. It isn't about tidiness — it's that the recommendation you make to the client is different. The first table leads to "let's look into social." The second leads to "let's put more into email, here's the number."

For the broader reporting structure this feeds, see GA4 client reporting made simple and the digital marketing report template.

Tooling

URL builders. Google's Campaign URL Builder is free and fine. Any builder works — what matters is that everyone uses the same conventions, not which tool generates the string.

Spreadsheet with formulas. Most agencies end up here: dropdowns for approved source and medium values, a formula assembling the URL. Enforces the convention at the point of creation, which is where enforcement belongs.

Validators. Useful for catching malformed URLs before launch, less useful for convention adherence — that's a governance problem, not a tooling one.

Don't over-invest here. The playbook is the asset; the generator is a text concatenator.

Rolling It Out Across Clients

You can't retroactively fix historical data, which shapes the whole approach.

1. Document the standard first. One page. Approved sources, the medium list, the campaign pattern, examples.

2. Start with new campaigns only. Every campaign from today forward uses the standard. Don't try to fix the past.

3. Set a clean start date, and note it in reports. "Campaign tagging was standardized as of Sept 1" explains why channel numbers shift. Without that note, the client sees a discontinuity and asks what broke.

4. Fix the highest-volume offenders next. Recurring email templates and evergreen ads carry ongoing traffic — retagging those improves data going forward.

5. Add it to onboarding. New clients get the standard from day one, which is the only way this stays clean at scale.

6. Expect a reporting gap. For a month or two you'll have mixed clean and dirty data. Say so in the report rather than letting the client discover the seam.

The whole reason presentation matters so much in this work is that the data is usually there and usually fine. Bad tagging is one of the few cases where the underlying data is genuinely wrong — and it's the kind of wrong that looks perfectly normal in a report right up until someone acts on it.

— Brooks Conkle, founder of Helpful Analytics

Frequently Asked Questions

What are UTM parameters? Tags added to a URL that tell analytics where a visit came from. Five exist: source, medium, campaign, content, and term. GA4 uses them to assign traffic to channels.

Which UTM parameter matters most for reporting? utm_medium. GA4's channel groupings key off it, so a non-standard value sends traffic to Unassigned or the wrong channel. Use the exact expected values: cpc, paid_social, email, social, display, affiliate, referral.

Should I use UTMs on Google Ads? No — use auto-tagging, which passes more detail than UTMs can. Running both manual UTMs and auto-tagging can conflict.

Why is traffic showing as Unassigned in GA4? Almost always a utm_medium value that doesn't match any channel rule. Check your medium values against GA4's expected list.

Can I fix UTM mistakes after a campaign has run? Not for data already collected — historical attribution can't be re-tagged. You can fix links still in circulation so future traffic is tagged correctly.

Should UTMs be lowercase? Yes. GA4 treats Facebook and facebook as different values, which splits your numbers across rows and makes every channel look smaller than it is.

Do UTMs work for offline campaigns? Indirectly. Use a short redirect URL that carries UTMs, with a medium like offline or print to keep it separate from digital channels.


Clean tagging makes the dashboard trustworthy; a trustworthy dashboard makes the monthly call shorter. If you want the GA4 side of that assembled automatically once your tagging is in order, Helpful Analytics handles it per property — multi-client, white-label, 14-day free trial.


Related Articles

Stop wrestling with GA4

Helpful Analytics gives your agency a clean, simple view of all your client analytics — no GA4 headaches, no hours wasted on reports.

Try Helpful Analytics free →