Skip to content

Free tool: Meta UTM builder

Facebook UTM builder that lets Meta fill in the campaign, ad set and ad

Meta replaces eight macros in your URL at click time, so nothing is named by hand. Insert any macro with one click.

Build a Meta campaign URL

The recommended setup is preloaded. Click a macro to insert it into the field you last edited.

What do you need

The landing page in the ad's Website URL field.

Meta dynamic parameters

Inserts into utm_campaign. Meta replaces every macro with the real value at click time.

fb, ig, msg or an, filled in by Meta per click.

paid-social, so GA4 files it under Paid Social rather than Paid Search.

The campaign name, filled in by Meta.

The ad set name, which is the audience.

The ad name, which is the creative.

Reset to the recommended setup

utm_source={{site_source_name}}, utm_medium=paid-social, utm_campaign={{campaign.name}}, utm_term={{adset.name}}, utm_content={{ad.name}}. Names are readable in reports; add the ids through the click-ID template when names change often.

Runs in your browser. Nothing you type is sent or stored.

Meta's eight dynamic URL parameters

Ads Manager substitutes eight placeholders in a destination URL at the moment of the click: {{campaign.name}}, {{campaign.id}}, {{adset.name}}, {{adset.id}}, {{ad.name}}, {{ad.id}}, {{placement}} and {{site_source_name}}. The last one resolves to fb, ig, msg or an, which is how you tell Facebook from Instagram from Messenger from Audience Network in a report. Names give readable reports; ids survive renames. Most teams use the names in the UTMs and, if they run LeadJourney or another attribution tool, add the ids through a separate template.

The recommended set is utm_source={{site_source_name}}, utm_medium=paid-social, utm_campaign={{campaign.name}}, utm_term={{adset.name}} and utm_content={{ad.name}}. Set once, it tags every ad with its own values and needs no per-ad work. The builder loads it by default.

Ad URL or URL parameters field

There are two places to put tracking on a Meta ad. The Website URL field holds the full destination, and appending parameters there works but has to be done per ad. The URL parameters field, under Tracking at the ad level, holds only the query string and is appended to whatever destination the ad uses, so one string serves every ad in the campaign, and campaign-level defaults apply it to new ads automatically. Use the second. The builder outputs either: switch to parameters only and it drops the destination and the leading question mark.

One thing the macros cannot fix: utm_medium. There is no macro for it, and the value decides where GA4 files the session. Use paid-social, hyphenated, for every Meta campaign, and never "Facebook Ads" or "social", which land in Unassigned and Organic Social respectively.

Why perfect UTMs still lose Meta conversions

The URL tells your analytics where the visitor came from. It does not tell Meta that the visitor converted. That message goes back through the pixel, and since iOS 14 the pixel fails to deliver it for 30 to 50 percent of real conversions: Safari cookie limits, the App Tracking Transparency prompt, declined consent banners and cross-device journeys all break the connection. Ads Manager under-reports, the cost per lead reads too high, and Advantage+ learns from the visible half.

The fix is server side. Capture the fbclid Meta appends to every click, store it first-party, match the lead to it when the form arrives (on any device), and send the conversion back through the Conversions API with the CRM stage attached. The UTMs you build here are the readable half of that record; the click-ID template the builder can append is the machine-readable half, and LeadJourney does the rest.

FAQ

Meta URL parameters, answered

The questions that come up when a team sets up Facebook and Instagram tracking.

What are Meta dynamic URL parameters?

Placeholders Meta replaces at click time: {{campaign.name}}, {{campaign.id}}, {{adset.name}}, {{adset.id}}, {{ad.name}}, {{ad.id}}, {{placement}} and {{site_source_name}}. Put them in a URL or the URL parameters field and every ad tags itself with its own values.

What is the recommended Facebook UTM setup?

utm_source={{site_source_name}}, utm_medium=paid-social, utm_campaign={{campaign.name}}, utm_term={{adset.name}}, utm_content={{ad.name}}. Set it in the URL parameters field at the campaign level and every ad inherits it. Add the numeric ids through a click-ID template if names change often.

Should utm_medium be cpc or paid-social for Facebook?

paid-social. GA4 files it under Paid Social, which is what it is. cpc is a legacy choice from before GA4 had a Paid Social channel; it still works but groups Meta with paid search in some reports.

Where is the URL parameters field?

Ads Manager, at the ad level, under Tracking, below the Website URL. Paste the query string without the leading question mark. Setting it once and using it as the campaign default applies it to every new ad.

What does {{site_source_name}} return?

fb for Facebook, ig for Instagram, msg for Messenger and an for Audience Network. It is the only way to tell the four surfaces apart in a third-party report, and it is why the recommended setup puts it in utm_source rather than a fixed "facebook".

Why do I lose Facebook conversions even with perfect UTMs?

UTMs report the visit to your analytics; they do not report the conversion back to Meta. That goes through the pixel, which since iOS 14 misses 30 to 50 percent of real conversions. The Conversions API fed from your CRM, matched on the fbclid, closes that gap.

fbclid to closed deal

Send Meta every lead your CRM receives, with the deal stage

LeadJourney captures the fbclid and these parameters server side, matches the lead in your CRM and sends it back through the Conversions API. Book a demo on your own account.

LeadJourney dashboard showing lead sources, campaign performance and attributed revenue side by side