utm.new
announcement ·

GA4 is quietly making utm_id the most important UTM

Campaign ID is how GA4 joins your ad-platform data to your site behavior. If you're leaving utm_id blank, you're leaving Google Ads ↔ GA4 reconciliation on the table.

For years, utm_id was the orphan UTM parameter. Nobody filled it in. Most builders didn’t even show it. It was optional, unused, and ignored.

GA4 changed that — quietly.

What changed

When GA4 rolled out its Google Ads linking, it started using utm_id as the primary key to reconcile campaigns between the two systems. If your ads send traffic with utm_id={campaignid} (the Google Ads ValueTrack macro that substitutes the real campaign ID), GA4 stitches together the ad-platform cost data and the site behavior data automatically. Campaign names match. Cost-per-conversion works. Custom attribution models actually have something to attribute to.

If utm_id is missing — which it will be for most hand-tagged links — GA4 falls back to joining by utm_source + utm_medium + utm_campaign. That works, until someone on your team types google somewhere they meant Google, and suddenly half your campaigns are unjoinable.

What this means for you

Three things, in order of how painful they are to skip:

  1. Fill in utm_id on every paid ad campaign. For Google Ads, use {campaignid}. For Meta, use {{campaign.id}}. Every major ad platform has an equivalent. The platform substitutes the real value at click time — you never have to touch the URL after you set it.

  2. If you already have live campaigns without utm_id, add it to the final URL suffix rather than rebuilding every URL. In Google Ads: Campaign settings → Additional URL options → Final URL suffix → utm_id={campaignid}. Done, retroactive.

  3. Stop hand-tagging ad URLs. If a human is typing utm_id= into a box and then typing the campaign ID after it, that’s a mistake waiting to happen. Templates with macros are the only scalable path.

Why we care

Every template on utm.new for a paid ad platform pre-fills utm_id with the platform’s native macro. You pick Google Ads, your utm_id is already set to {campaignid}. You pick Meta, it’s {{campaign.id}}. No typing, no lookups.

This is a small thing and a big thing at once. Small because it’s just one parameter. Big because it’s the single most important join key in your analytics stack right now — and most teams don’t know.


Reading: Google’s official GA4 campaign tracking docs call out utm_id as the recommended primary identifier. Worth a skim if you haven’t already.