Skip to main content

Paid social

UTM builder for Facebook and Instagram ads.

Meta appends fbclid to every click, but fbclid tells your analytics nothing about which campaign or ad drove the visit. UTMs do. This builder starts from the facebook / paid-social convention and uses Meta's dynamic parameters, so one URL parameters string reports every campaign, ad set, and ad by name.

Quick start:
Custom parameters (optional)Any key=value pair beyond utm_ — promo codes, partner IDs, experiment flags.
Common:

Your campaign URL

Enter a destination URL.

How EndFrame parses this

utm_source
facebook
utm_medium
paid-social
utm_campaign
{{campaign.name}}
utm_term
{{adset.name}}
utm_content
{{ad.name}}
utm_source_platform
meta-ads

The Meta ads convention

What each parameter should say for Facebook & Instagram Ads.

ParameterValueWhy
utm_sourcefacebookUse {{site_source_name}} instead if you want fb, ig, msg, and an (Audience Network) reported separately.
utm_mediumpaid-socialGA4 groups paid-social with a facebook or instagram source into Paid Social. Plain social would land in Organic Social.
utm_campaign{{campaign.name}}Meta expands this to the campaign name at click time, so renaming a campaign changes the UTM automatically.
utm_term{{adset.name}}The ad set name usually encodes the audience, which is what you want to compare at this level.
utm_content{{ad.name}}Distinguishes creatives that point at the same landing page.

Example tagged link

https://www.example.com/landing-page?utm_source=facebook&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_term={{adset.name}}&utm_content={{ad.name}}&utm_source_platform=meta-ads

What to know before you paste it into Ads Manager

Use the URL parameters field, not the website URL

Ads Manager has a dedicated URL parameters box under the ad's destination. Paste only the part after the question mark there. Meta appends it to the website URL and keeps your landing page clean in the ad preview.

Name campaigns for the UTM, not just the dashboard

Because {{campaign.name}} lands in your reports verbatim, spaces and capitals in Meta names become spaces and capitals in utm_campaign. Adopt lowercase-hyphen names inside Ads Manager, or normalize them on arrival.

Double braces are required

Meta's macros use {{two braces}}, unlike Google's single-brace ValueTrack. The builder leaves both forms unencoded and the linter ignores them, so you can copy the URL straight across.

Frequently asked

What dynamic parameters does Meta support in URLs?

Meta expands {{campaign.id}}, {{campaign.name}}, {{adset.id}}, {{adset.name}}, {{ad.id}}, {{ad.name}}, {{placement}}, and {{site_source_name}} at click time. They work in the URL parameters field for any ad objective that has a website destination.

Should utm_source be facebook, instagram, or meta?

Pick one and keep it. facebook with medium paid-social is the most common and lands in GA4's Paid Social channel. If you want per-placement reporting, set utm_source={{site_source_name}} and Meta fills in fb, ig, msg, or an.

Does fbclid replace UTM parameters?

No. fbclid is an opaque click identifier Meta uses for its own attribution and Conversions API matching. It does not carry campaign, ad set, or ad information your analytics can read, so UTMs are still needed for reporting outside Meta.

Build UTMs for another channel

The full parameter reference, naming-convention table, and custom parameter guide live on the main UTM builder page, and our UTM naming convention template covers how to roll one out across a team.

Free tools, free trial

UTMs are step one. Attribution is the payoff.

EndFrame reads these exact parameters and credits each server-side conversion to its campaign and source — so the campaigns you tag here report conversions, even when iOS and ad blockers hide the click.

No credit card required