UTM Generator for Facebook & Meta Ads
Build a Meta-native URL parameters string with dynamic macros that auto-fill the campaign, ad set, and ad name for every Facebook and Instagram ad. A UTM builder made for Meta, not a generic link tagger. Free, no signup, no email gate.
UTM parameters
Meta "URL parameters" string (recommended)
Paste this into the URL parameters field at the ad level in Meta Ads Manager (no leading ?). Set it once on a template and every ad inherits it.
utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}Full tagged URL
The complete link, for places that take a full URL (organic posts, email, or the website URL field).
https://example.com/landing?utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}This string uses Meta dynamic parameters. Meta replaces {{...}} with the live campaign, ad set, and ad names at delivery, so one template tags every ad correctly - no per-link editing.
How to use it
How to use this Facebook Ads UTM builder
Set the values that stay fixed once, let macros carry the rest.
- 1
Enter the destination URL
Your landing page - the builder keeps it clean and appends the tags separately.
- 2
Set the static values
For values that never change, like
utm_source=facebookandutm_medium=paid_social, choose Static text. - 3
Switch the per-ad values to dynamic
For the parts that change per ad, pick Meta dynamic and a macro like
{{campaign.name}}or{{ad.name}}. - 4
Copy the URL parameters string
Paste it into the URL parameters field in Ads Manager, or copy the full tagged URL for organic posts and email.
What are UTM parameters for Facebook ads?
Five tags appended to a destination URL so GA4 can attribute the click. Without them, Meta traffic collapses into a generic paid or unassigned bucket.
utm_source
The platform - facebook.
utm_medium
The channel - paid_social.
utm_campaign
The campaign the ad belongs to.
utm_content
The specific ad or creative.
utm_term
Usually the ad set or audience.
Static vs Meta dynamic URL parameters
This is what separates a Meta UTM builder from a generic one. A generic builder freezes the campaign name into one static link, so a new campaign means a new link and 50 ads mean 50 hand-built URLs. Meta dynamic parameters resolve per ad at delivery instead, so a single string is correct for every ad in the account - each one reports its own real campaign, ad set, and ad name in GA4 with zero per-link editing.
Meta dynamic URL parameters (with a copy-paste template)
Meta exposes a small set of macros that resolve to live entity values at delivery, so one string tags an entire account.
| Macro | Resolves to |
|---|---|
{{campaign.name}} | The campaign name |
{{adset.name}} | The ad set name |
{{ad.name}} | The ad name |
{{placement}} | Where it served (e.g. an_classic, fb_story) |
{{site_source_name}} | The network: fb, ig, an or msg |
Each name macro has an ID twin - {{campaign.id}}, {{adset.id}}, {{ad.id}} - for when you need the numeric ID instead.
Map the parts that change per ad to macros and hard-code the rest. Paste this once into the ad-level URL parameters field:
utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_term={{adset.name}}The macro output is only as clean as your entity names, which is why a consistent naming convention is what makes dynamic UTMs readable instead of a wall of raw IDs. For the full GA4 setup and why paid traffic collapses into “unassigned,” see the deep dive on UTM parameters for Meta ads.
TikTok uses different tokens
Same idea, different macros: __CAMPAIGN_NAME__, __AID_NAME__ (the ad group name), __CID_NAME__ (the ad / creative name) and __PLACEMENT__.
The ID-macro trap
__AID__ is the ad group ID, not the ad ID, and __CID__ is the creative ID, not the campaign ID - reach for the _NAME_ variants for anything a human reads.
The URL parameters field, not the destination URL
📍Paste raw macros into the URL parameters field
Meta gives every ad a dedicated URL parameters field for exactly this. Putting tags there instead of in the destination URL keeps the landing page clean and survives creative edits. Paste a key=value&key=value string with no leading question mark.
Never URL-encode the braces: Meta reads the raw {{...}} tokens itself, so an encoded %7B%7B silently breaks the substitution and your rows land in GA4 as literal placeholder text.
UTM naming rules that protect your GA4 data
The same discipline that keeps names clean keeps tracking clean - generated, never typed.
Lowercase everything
GA4 treats Facebook and facebook as two different sources, so casing fragments your reports.
Underscores, not spaces
A space in a value breaks the query string - replace it with an underscore.
Fix source & medium
Keep utm_source and utm_medium constant and let macros carry the per-ad detail, the same way a token-based naming convention does.
Why UTM tagging falls apart at scale
One link is easy; a creative test that ships 30-50 ads a week is where hand-tagging gets skipped and attribution rots. Meta dynamic parameters fix the data side - the launch is the remaining bottleneck. uplads applies one destination URL and one URL Tags (UTM) string to every creative in a bulk launch, mapped to Meta’s native url_tags field and passed through unchanged so macros keep working. See the guide on Facebook Ads creative testing, and pair this with the ROAS calculator to tie tagged traffic back to return on ad spend.
Keep names and tracking generated, not typed
Frequently asked questions
How do you create UTM parameters for Facebook ads?
Is there a free UTM builder for Facebook ads?
What is a UTM parameter, and what does UTM stand for?
What are Meta dynamic URL parameters?
Should UTMs go in the destination URL or the URL parameters field?
How do I apply one UTM template across 50 ads at once?
Why is my Facebook ad traffic showing as direct or unassigned?
Tag 100+ ads from one UTM string
A clean template only helps if it reaches every ad. uplads applies one destination URL and one URL Tags (UTM) string to every creative in a bulk launch - 100 ads ship correctly tagged in one pass instead of 100 manual edits.