Free tool

Meta UTM Builder

Build UTM parameters with Meta’s dynamic values like {{campaign.name}} and {{ad.name}}, so every ad is tracked in GA4 and your store automatically. Free, no sign-up.

Build your URL parameters

Pick a setup, adjust any field, then copy the result into Ads Manager.

The landing page your ad sends people to. Optional, used for the test link and checks.

Extras

Paste into Ads Manager › URL parameters

utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}&utm_id={{campaign.id}}

What GA4 will show for a sample ad

Session sourcefacebook
Session mediumpaid_social
Session campaignQ4_Prospecting_Serum
Manual ad contentSerum_Problem_Hook03_4x5
Manual termBroad_US_25-44
Campaign ID120212345678900001

Sample: campaign "Q4_Prospecting_Serum", ad set "Broad_US_25-44", ad "Serum_Problem_Hook03_4x5", shown in Instagram Reels.

Checks

  • Ready to paste. GA4 will file these clicks under Paid Social.
  • Add your website URL to get a full test link and link checks.
  • Name parameters copy names exactly as typed. Use underscores, avoid spaces, and do not rename live ads or reports will split.

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

ParameterWhat Meta fills inBest used for
{{campaign.name}}The campaign name as typed in Ads Managerutm_campaign, readable reports
{{campaign.id}}The campaign's numeric IDutm_campaign or utm_id, rename-proof
{{adset.name}}The ad set nameutm_term, to compare audiences
{{adset.id}}The ad set's numeric IDutm_term, rename-proof
{{ad.name}}The ad nameutm_content, to compare creatives
{{ad.id}}The ad's numeric IDutm_content, rename-proof
{{placement}}Where the ad was shown, such as a feed, Stories or Reels placementutm_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:

  1. 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.
  2. 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.
  3. You keep an ID as a backup. Names are easy to read but can change. The campaign ID never changes, so utm_id keeps 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

  1. Open the ad (not the campaign or ad set) in Ads Manager.
  2. In the Destination section, find the Website URL field.
  3. Expand URL parameters below it and paste the line from the builder, without a leading question mark.
  4. Publish, then click through one live ad and check the parameters appear on your landing page link.
Settings do not carry over. URL parameters live on each ad. A campaign-level setting does not fill them in for you, so add them when you create each ad, or select several ads and edit them together.

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.

Tracking tells you which ad won. The next job is making more like it.

Winning Ads gives you 150 editable Meta ad templates for Figma in all four sizes, mapped to cold, warm and hot audiences. Or hand the work off and get custom ads designed for your brand.