The Complete Guide to UTM Parameters for SaaS

Five fields, infinite ways to ruin them. Here's how to use UTMs so the data is still useful in six months.

8 min read

UTM parameters are the simplest piece of marketing infrastructure on the web. They're also the most consistently misused. Five fields, a few naming conventions, and most teams end up with reports that lump "Twitter," "twitter," "Twitter.com," and twitter_launch_q3 into four different rows.

This guide covers what each parameter is for, the naming rules that keep your data sane, and how to actually connect UTMs to revenue — which is the only point of using them.

The five UTM parameters in one table

UTMs are query-string parameters appended to a URL. Analytics tools read them on landing and tag the visitor session.

parameterwhat it answersexample
utm_sourceWhich website / platform?twitter, hackernews, newsletter
utm_mediumWhat kind of traffic?social, email, cpc, referral
utm_campaignWhich campaign?launch_v2, black_friday_2026
utm_contentWhich creative variant?hero_button, footer_link
utm_termWhich paid keyword?saas+analytics (paid only)

Only the first three matter for most SaaS. source, medium, campaign answer 95% of the questions you'll have. Use utm_content only when you're running creative A/B tests; ignore utm_term unless you're running paid search ads.

The example URL

https://yourdomain.com/?
  utm_source=twitter&
  utm_medium=social&
  utm_campaign=launch_2026_05

That URL says: a visitor came from Twitter (source), via the social channel (medium), as part of the May 2026 launch campaign. Six months from now, that's still legible.

The naming rules that make data sane

UTMs are case-sensitive and free-text. Most analytics tools treat twitter, Twitter, and TWITTER as three different sources. Establish conventions on day one and don't deviate:

  • Always lowercase
  • Use underscores, never spaces or hyphens (mixing both creates more buckets)
  • No emoji, no punctuation, no special characters
  • Standardise mediums: social, email, cpc, referral, organic_search, organic_social
  • Keep source short and recognisable: twitter, x, hackernews, reddit, producthunt
  • Date-stamp campaigns: launch_2026_05 not launch (so May 2026's launch is distinguishable from May 2027's)

The standard medium values

Stick to a small enumerated list of mediums. Almost every SaaS team converges on roughly the same set:

  • social — organic posts on Twitter/X, LinkedIn, Mastodon, Bluesky
  • email — newsletter, transactional, outreach
  • cpc — paid search (Google Ads, Bing)
  • display — paid display / retargeting
  • referral — partner links, affiliate, integrations
  • community — Hacker News, Reddit, Indie Hackers, Slack groups
  • podcast — sponsorships and guest appearances

What you do NOT use UTMs for

  • Internal links inside your own site: Tagging a /pricing → /signup link with UTMs overwrites the original campaign attribution. The visitor came from Twitter; clicking 'Sign up' shouldn't suddenly make them an internal-source visitor.
  • Customer-specific tracking: Don't put user IDs, email addresses, or anything PII in UTMs. Aggregations are computed across these values — high cardinality blows up your reports and may leak identifiers.
  • Long-term attribution: UTMs are great at first-touch. They are not a substitute for cookieless or session-based attribution that already runs on your analytics tool. Don't try to build a multi-touch attribution model out of UTMs alone.

Connecting UTMs to revenue

UTMs that don't connect to revenue are vanity data. The point isn't to know that 1,200 people clicked from a Twitter campaign — it's to know which campaign produced paying customers.

The mechanism is the same as any conversion attribution:

  • 1. Visitor lands with UTMs: Analytics records source/medium/campaign on the pageview.
  • 2. Visitor signs up: Fire datibase('event', 'signup', { plan }) — the original UTM source is automatically attached.
  • 3. Visitor pays via Stripe / Polar: datibase.identify({ customerId }) once after signup ties the Stripe customer to the original visitor session — and through it, to the original UTM source.
  • 4. Revenue shows up by source: The dashboard now shows: Twitter campaign drove 1,200 visits, 18 signups, $174 MRR. That's the data point worth the effort.

The end-to-end pattern is the same one we covered in the cookieless conversion tracking guide — UTMs are just the source-tagging input layer.

Limits to know about

  • UTMs only survive the landing page: Once the visitor navigates internally, the URL no longer has the parameters. Analytics tools handle this — they capture the UTMs once on landing and remember them for the session — but it means your own internal links should not contain UTMs.
  • Cross-session attribution is approximate: If a visitor lands from Twitter on Monday, leaves, returns direct on Friday, and converts, cookie-free analytics attributes the conversion to direct, not Twitter. This is the deliberate trade-off of cookie-free tracking — see Cookieless Tracking Explained for the why.
  • UTM stripping by some apps: Some link-shorteners and apps strip query parameters when sharing. Use a redirect that you control if attribution is critical — your own link stripper preserves UTMs through trusted intermediaries.

A starter UTM convention you can copy

# canonical sources (lowercase, no punctuation)
twitter, hackernews, reddit, producthunt, indiehackers, linkedin,
youtube, podcast, newsletter, organic_search

# canonical mediums
social, community, email, cpc, display, referral, organic_search, podcast

# campaign pattern: <topic>_<yyyy>_<mm>
launch_2026_05, blackfriday_2026_11, ltd_2026_q3

The bottom line

UTMs are five plain text fields in a query string. The technical part is trivial; the discipline part is the whole game. A team with a one-page convention doc and a habit of copying canonical names will out-attribute a team with a fancy tool and ad-hoc tags every time.

Set up the convention now, hardcode it in your link-builder, and spend the saved time looking at the actual numbers.

ready when you are

See UTM-tagged traffic by revenue, not just clicks

Datibase reads UTMs automatically and shows revenue by source — connect Stripe or Polar and the loop closes itself.

Try Datibase free