How Meta dynamic URL parameters work
A UTM tag is a label on the end of your link that tells your analytics where a visit came from. Typing those labels by hand for every ad is slow and goes wrong fast. Meta solves this with dynamic parameters: placeholders in double curly brackets that Meta swaps for the real campaign, ad set and ad details at the moment someone clicks.
So instead of writing utm_content=serum_video_v3 on one ad and remembering a different value for the next, you paste the same line on every ad. {{ad.name}} becomes each ad's actual name. One setup, every ad tracked.
All 8 Meta dynamic parameters
| Parameter | What Meta fills in | Best used for |
|---|---|---|
{{campaign.name}} | The campaign name as typed in Ads Manager | utm_campaign, readable reports |
{{campaign.id}} | The campaign's numeric ID | utm_campaign or utm_id, rename-proof |
{{adset.name}} | The ad set name | utm_term, to compare audiences |
{{adset.id}} | The ad set's numeric ID | utm_term, rename-proof |
{{ad.name}} | The ad name | utm_content, to compare creatives |
{{ad.id}} | The ad's numeric ID | utm_content, rename-proof |
{{placement}} | Where the ad was shown, such as a feed, Stories or Reels placement | utm_term or an extra parameter |
{{site_source_name}} | The app: fb, ig, msg (Messenger) or an (Audience Network) | utm_source, with a GA4 caveat below |
There is no dynamic parameter for utm_medium. You set it by hand, and the value matters more than most people think.
The setup we recommend, and why
The Recommended preset in the builder above uses utm_source=facebook, utm_medium=paid_social, campaign and ad names for utm_campaign and utm_content, the ad set name for utm_term, plus utm_id={{campaign.id}}. Three reasons:
- GA4 files it correctly. GA4 puts a visit in its Paid Social channel only when the source is a known social site and the medium looks paid. "facebook" plus "paid_social" ticks both boxes.
- Creative is readable. With
{{ad.name}}in utm_content, your GA4 and Shopify reports show which creative drove sales, by name, without opening Ads Manager. - You keep an ID as a backup. Names are easy to read but can change. The campaign ID never changes, so
utm_idkeeps reports joinable even if someone renames a campaign.
Names or IDs?
Name parameters pass through exactly what was typed in Ads Manager, spaces and capitals included. If you rename a campaign halfway through a month, your reports split it into two rows. IDs never change, but nobody can read 120212345678900001 in a report. Our rule: use names if your team follows a naming convention and does not rename live campaigns. Use the Rename-proof preset if several people touch the account or you send data into a warehouse that joins on IDs.
Why not {{site_source_name}} as the source?
It looks smart because it splits Facebook and Instagram clicks automatically. The catch: it can also return msg and an, and GA4's list of social sources does not include those two. Clicks from Messenger and Audience Network then land outside Paid Social. If you choose Split by platform, check your channel reports or add those values to a custom channel group in GA4.
Where to paste it in Ads Manager
- Open the ad (not the campaign or ad set) in Ads Manager.
- In the Destination section, find the Website URL field.
- Expand URL parameters below it and paste the line from the builder, without a leading question mark.
- Publish, then click through one live ad and check the parameters appear on your landing page link.
Mistakes that quietly break tracking
- A medium GA4 does not read as paid. Values like "social", "facebook" or "meta" make paid clicks look organic. Start the medium with "paid" or use "cpc".
- Spaces and random capitals in names. "Q4 Serum" and "q4_serum" become two campaigns in GA4. Pick lowercase or a fixed case and use underscores.
- UTMs already in the Website URL. If the link already carries utm tags and you add URL parameters, you get duplicates and messy reports. Keep the Website URL clean.
- A # in the landing page link. Anything after a # is not sent to your server, so parameters placed after it can be lost. Use a link without a fragment where you can.
- Renaming live ads. New name, new row. Rename before launch, or rely on IDs.
Tracking only pays off if your ad names mean something. A name like Serum_Problem_Hook03_4x5 tells you the product, the angle, the hook and the size at a glance in GA4. If you are new to terms like these, the Meta ads glossary covers them in plain English.
Frequently asked questions
Where do I put UTM parameters in Meta Ads Manager?
At the ad level. Open the ad, go to Destination, expand URL parameters under the Website URL and paste the parameters without a leading question mark.
What is the difference between {{campaign.name}} and {{campaign.id}}?
The name parameter passes the campaign name as typed, which is easy to read but changes if anyone renames it. The ID parameter passes a number that never changes, which is reliable but hard to read. Many teams use the name for utm_campaign and the ID for utm_id.
Should utm_source be facebook or {{site_source_name}}?
Use "facebook" if you want every Meta click in GA4's Paid Social channel with no extra setup. Use {{site_source_name}} if you need Facebook and Instagram split, and be aware that Messenger (msg) and Audience Network (an) clicks may fall outside Paid Social in GA4.
Why does my Meta traffic show as Organic Social or Unassigned in GA4?
Usually the medium. GA4 only counts a visit as Paid Social when the medium looks paid, for example a value starting with "paid" or containing "cp" like "cpc". A medium such as "social" or "facebook" sends paid clicks to the wrong channel.
Do I need to add URL parameters to every ad?
Yes. They are stored on each ad and are not inherited from the campaign or ad set. Add them while building each ad, or select several ads and edit them together.
Do dynamic parameters work with Advantage+ creative?
They work, but they describe the ad as a whole. If one ad shows several creative variations, every variation carries the same utm_content, so you cannot tell the variations apart from UTMs alone.