Tracking and reporting 4 min read

UTM Parameters for Meta Ads at Scale

Which UTM parameters to use on Meta Ads, how to fill them with dynamic tokens instead of by hand, and what breaks when you do not.

Mathieu Malige Founder, Apogee Updated
Contents
  1. Which UTM tokens does Meta give you?
  2. Which UTM template holds up at scale?
  3. What breaks without proper UTMs?
  4. Which dependency does nobody mention?
  5. Where should you set UTMs, and why does it matter?
  6. Which parameters are worth carrying?
  7. How do you decide source and medium once?
  8. How do you check that it works?
  9. What do UTMs not solve?

UTM parameters on Meta Ads fail for a boring reason: they are typed by hand, once per ad, by people in a hurry. The fix is not discipline. It is tokens.

Which UTM tokens does Meta give you?

TokenReplaced by
campaign.namethe campaign name at delivery
adset.namethe ad set name
ad.namethe ad name
placementfeed, story, reels and the rest
site_source_nameFacebook, Instagram, Messenger, Audience Network

They are substituted when the ad serves, so the value always matches the entity that produced the click. No copy and paste, no drift.

Which UTM template holds up at scale?

utm_source=meta
utm_medium=paid_social
utm_campaign={{campaign.name}}
utm_content={{ad.name}}
utm_term={{placement}}

Source and medium are constants, because they describe the channel and never change. Everything else is generated.

Put placement in utm_term and you can finally answer whether stories convert differently from feed, which Meta’s own reporting will tell you but your site side analytics will not, unless you pass it.

Anatomy of a Meta Ads landing page URL: UTM parameters after the question mark and the dynamic tokens Meta fills at delivery
Source and medium stay constant; the other values are written by Meta when the ad serves.

What breaks without proper UTMs?

One person writes fb, another facebook, a third Facebook. Analytics treats them as three sources and every channel report is wrong by a third.

The same happens at campaign level whenever a campaign is renamed after launch: the UTM keeps the old string, the interface shows the new one, and reconciling the two becomes an afternoon.

Which dependency does nobody mention?

UTM values inherit your naming convention. If ad names are inconsistent, utm_content is inconsistent, and the analytics report is as unreadable as the export it came from. The fix sits upstream, in the naming convention and in campaign names that do not change after launch.

Tokens do not clean names. They propagate them faithfully, including the mess.

Where should you set UTMs, and why does it matter?

Meta gives you two places to put URL parameters, and they behave differently.

Apogee ad Tracking section: URL parameters with Meta dynamic tokens such as campaign.name and ad.name
Tracking has its own field next to the ad settings, with Meta's dynamic tokens, and the template applies it to the whole batch.

The URL parameters field at ad level (which Apogee’s bulk configuration also fills for a whole batch) holds the query string on its own, separate from the destination URL. It is the right place: the link stays readable, and editing tracking never risks breaking the landing page.

Appending the query string directly to the destination URL works and ages badly. Someone eventually edits the URL to fix a path, deletes half the parameters by accident, and nothing warns you because a URL with broken tracking still loads fine.

Which parameters are worth carrying?

ParameterValueWhy
utm_sourcea constant, metaNames the platform, never varies
utm_mediuma constant, paid_socialGroups with your other paid social
utm_campaign{{campaign.name}}Ties the click to the campaign that served it
utm_content{{ad.name}}The only way to see per creative performance site side
utm_term{{placement}}Separates feed, story and reels

The split matters because these five values fail differently. The constants fail once, at setup, and stay wrong until someone notices. The generated ones cannot fail that way, since they are read from the entity that served the click.

How do you decide source and medium once?

This sounds trivial and it is the most common failure in the whole exercise.

Pick meta or facebook and write the choice down somewhere the whole team sees. Pick paid_social or cpc and do the same. The values do not matter much in themselves. What matters is that six months of data carries one value rather than four.

An analytics report split across fb, facebook, Facebook and meta is not a reporting problem you can fix later. Historical rows keep the value they were given.

How do you check that it works?

Launch one ad, click it yourself, and look at the landing URL in the address bar.

The tokens should be replaced with real values. If you see the literal string {{ad.name}} in the URL, the parameter was written somewhere that does not support substitution, and every click from that ad is being recorded against a placeholder.

This takes ninety seconds and it is the only verification that actually proves the chain works end to end.

What do UTMs not solve?

UTMs describe where a click came from. They say nothing about what happened after, and they do not reconcile Meta’s attributed conversions with your site side numbers. Those two will not match, and chasing agreement between them is time you will not get back.

The feature Bulk configuration One configuration set once, propagated across the batch. See the feature

Frequently asked questions

Which UTM parameters should Meta Ads carry?

Source, medium and campaign at minimum, plus content and term if you want ad level and placement level detail. Source and medium should be constants, the rest should come from dynamic tokens.

What are the dynamic tokens Meta supports?

campaign.name, adset.name, ad.name, placement and site_source_name. They are replaced at delivery, so the value always matches the entity that served the click.

Why does my Meta traffic look inconsistent in analytics?

Almost always because UTM values were typed rather than generated. One person writes fb, another facebook, a third Facebook, and the analytics tool treats them as three sources.

Launch your creatives in 47 seconds.

Try the plan of your choice for 7 days for €1. Cancel anytime from the app.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder