Conversion tracking

How do I add UTM parameters to Meta ads and Instant Forms so my CRM knows which campaign each lead came from?

By The Tofu team ·

Add UTMs in the ad's URL parameters field, under Tracking, with dynamic values like {{campaign.name}}. Instant Forms need the form's own tracking parameters. Those leads never visit your site, so URL parameters don't reach them, but Meta attaches the campaign, ad set and ad name and ID to every lead. Map those fields to properties in HubSpot or Salesforce, then check a test lead from Meta's Lead Ads Testing Tool and your first real lead. Don't count on HubSpot's auto-tracking: it skips Leads campaigns.

Ask Tofu next

Pick a question and Tofu Ads Agent answers it in chat.

As of October 2026.

Where do I add UTM parameters in Meta Ads Manager?

At the ad level, in the Tracking section. Type them in the URL parameters field, or click Build a URL parameter, add each key and value, and click Apply. Meta appends them to your Website URL, and if a key is in both, the URL parameters field wins. Never leave a value empty. Meta says these override parameters set elsewhere, such as Instagram's default URL parameters.

Which dynamic parameters does Meta support?

Meta fills these in for you:

ValueWhat it fills in
{{campaign.name}}, {{campaign.id}}The campaign's name or ID
{{adset.name}}, {{adset.id}}The ad set's name or ID
{{ad.name}}, {{ad.id}}The ad's name or ID
{{placement}}Where the ad showed, such as facebook_feed, instagram_stories or threads_stream
{{site_source_name}}The app: fb, ig, msg, an (Audience Network) or th (Threads)

Name values are frozen at the name the campaign, ad set or ad had when the ad was first published, so renaming later doesn't change them. Spaces come through as %20. Dynamic values don't work in collection ads on Instagram placements.

What UTM template should I use for B2B lead campaigns?

One template on every ad, for example:

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

Google says to always use utm_source, utm_medium and utm_campaign, and that values are case sensitive, so "Facebook" and "facebook" are two sources. GA4 puts a visit in Paid Social when the source is a social site and the medium starts with "paid" (or matches its other paid patterns). GA4's Meta import also matches on your source and medium and asks for one medium for all paid Meta traffic. To capture the ad set in your CRM, add adset_name={{adset.name}}. GA4 won't report it, but a hidden form field can store it. Set all this before launch: Meta says changing URL parameters after you publish "may cause your ad set to re-enter the learning phase."

Doesn't Meta or HubSpot add UTMs automatically?

Sometimes, but not reliably. Meta says it "may" add a campaign source (Facebook or Instagram), a medium of "paid" and the ad, ad set and campaign IDs. HubSpot's auto-tracking adds utm_source=facebook, utm_medium=paid, a utm_campaign and its own hsa_ IDs, but HubSpot says campaigns with the Leads objective (OUTCOME_LEADS) aren't tracked. HubSpot doesn't overwrite UTMs you set in Meta, so set your own.

How do I know which campaign an Instant Form lead came from?

Meta records it on the lead. The file you download from Ads Manager or Meta Business Suite includes campaign_id, campaign_name, adset_id, adset_name, ad_id, ad_name, form_id, form_name, is_organic and platform for every lead. Whether those reach your CRM depends on your connector's field mapping, so check which fields it maps. To see all of them in the download, you need Page admin permissions and a role on the ad account.

How do I add tracking parameters to an Instant Form?

In the form's Settings, open Tracking parameters, type a Parameter name (such as utm_source) and a Parameter value (such as facebook), and click Add parameter for each one. People filling in the form don't see them. Meta passes them to your integrated CRM, webhook or API, and adds them to the lead download.

Limits to plan around:

  • Names and values can't be empty, must be unique, and can't match the names of your form's fields.
  • Meta's help shows fixed values only and doesn't describe dynamic ones. If one form runs in several campaigns, they all send the same values, so use a separate form per campaign or rely on campaign_name.
  • You can't edit a published form. Duplicate it, add the parameters, and use the copy.
  • Meta says your CRM partner "may need to make some changes to support tracking parameters."

How do I get the campaign into HubSpot?

For website forms, create a contact property for each UTM and add it to your HubSpot form as a hidden field. HubSpot fills form fields, hidden ones included, from URL parameters that match the property's internal name, so name the properties utm_campaign and so on. HubSpot also saves utm_campaign in its drill-down 2 traffic source properties for Paid social visits.

For Instant Form leads synced with HubSpot's lead syncing, HubSpot's help pages don't say whether Meta's tracking parameters come through. HubSpot can filter segments by Facebook campaign and ad name, but says "This information is not reflected in any contact properties," and the filters need auto-tracking on and HubSpot's tracking code on the ad's destination page. So check which fields arrive, on a test lead and on your first real lead. Setup details: send Meta lead ads to HubSpot or Salesforce.

How do I get the campaign into Salesforce?

Create custom fields for the values you want on Lead, Contact and, if you like, Opportunity, fill them from hidden fields on your website forms, and map them so they survive lead conversion. Why UTM fields are blank on Salesforce leads walks through each step. For Instant Form leads, map campaign_name, adset_name, ad_name and any tracking parameters to those fields in whatever brings leads in.

Why are my UTMs missing or wrong?

  • The visitor moved on. Meta says URL parameters apply only to the first page. If someone browses to another page, or comes back later on their own, they're gone unless a script saved them on the first page.
  • A redirect stripped them. HubSpot warns that redirects, including http to https, and link shorteners strip its tracking parameters.
  • It's an Instant Form lead. URL parameters never reach it. Use tracking parameters and the lead's campaign fields.

How do I test it?

Use Meta's Lead Ads Testing Tool: pick the Page and form, click Create Lead, then Track Status. Meta says test leads include your tracking parameters. Meta's developer docs say test leads are organic leads not associated with any ad, so don't expect campaign or ad names on them. You get one test lead per form, so delete it before you make another. Test leads show in the download but not in Ads Manager's Results, and HubSpot marks them "Facebook organic lead" in drill-down 2. For website ads, click a live ad, submit your form, and check the lead in your CRM.

Where Tofu fits

Tofu Ads Agent (our product) builds and launches Meta campaigns, staged in your own ad account and switched off until a person turns them on. Its pipeline view writes dynamic UTMs back to HubSpot or Salesforce and shows account journeys from first impression to closed-won. It doesn't set up Instant Form tracking parameters or your CRM's field mapping, so those steps are still yours. It costs a flat $2,500 a month.

Sources

Let an agent build your next campaign.

Tofu Ads Agent reads your CRM, plans the funnel, builds the audience and creative, and stages full campaigns across LinkedIn, Google and Meta for your approval.