To get better match rates for Creative Affinity LTV, the client needs to configure two things: UTM parameters on their Meta ads, and verify their GA4 property is capturing that data correctly.
1. Set URL Parameters in Meta Ads Manager
In Meta Ads Manager, go to each ad → Tracking section → URL Parameters field, and paste this exact string:
utm_source=facebook&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{ad.id}}&utm_term={{adset.name}}&utm_id={{campaign.id}}
Important: This must be set at the Ad level, not at the Campaign or Ad Set level. Meta does not have a global account-level setting for UTMs — it must be applied to every ad.
What Each Parameter Does
Parameter | Value | Why It's Required |
utm_source | Identifies the traffic as coming from Facebook. Must be lowercase. | |
utm_medium | paid-social | Must be exactly paid-social with a hyphen. Using cpc or paidsocial will cause missed matches. |
utm_content | {{ad.id}} | Most critical parameter. This is the primary field used for ad-level attribution. The ad ID is immutable — renaming an ad later won't break historical attribution. |
utm_campaign | {{campaign.name}} | Used for campaign-level matching and reporting. |
utm_term | {{adset.name}} | Captures the ad set name for additional context. |
utm_id | {{campaign.id}} | Stable campaign identifier. Also enables GA4 cost data import from non-Google platforms. |
Why {{ad.id}} Instead of {{ad.name}}
IDs are immutable — if you rename an ad in Meta, the ID stays the same. With {{ad.name}}, renaming an ad breaks the link to all historical data.
IDs are unique — no risk of two different ads sharing the same name and causing attribution conflicts.
This is a confirmed best practice per Meta's own documentation and multiple attribution guides (AdManage.ai | #1 Ad Launching Platform - Launch Meta & TikTok Ads 10x Faster - 1M+ Ads Monthly , Easily Get Marketing Attribution Data Into Your CRM | Attributer , AnyTrack).
2. Verify GA4 Is Capturing UTM Data
Once the UTM parameters are set on the Meta ads:
Test a live ad click — Click on one of the updated ads and check that the landing page URL in your browser still shows the full query string (?utm_source=facebook&utm_medium=paid-social&utm_content=...). If the parameters disappear, the website or a redirect is stripping them.
Check GA4 Realtime report — After clicking the ad, go to GA4 → Reports → Realtime. Verify the session shows:
Source: facebook
Medium: paid-social
Campaign: the campaign name from Meta
Ensure cross-domain tracking is enabled — If the website uses a different domain for checkout (e.g., a main site on one domain and Shopify checkout on another), GA4 cross-domain tracking must be enabled so UTM parameters persist through the domain transition. Set this in GA4 → Admin → Data Streams → select stream → Configure tag settings → Configure your domains.
3. Common Issues That Reduce Match Rates
Problem | What Happens | How to Fix |
No UTM parameters on Meta ads | GA4 has no ad-level data to match on | Add the URL parameters template above to every ad |
utm_medium is cpc instead of paid-social | A portion of orders won't be matched | Change to exactly paid-social (with hyphen) |
utm_source is fb instead of facebook | Traffic may not be recognized as Meta | Use the full word facebook (lowercase) |
Landing page redirects strip UTMs | Parameters disappear before GA4 captures them | Fix all redirects (301/302) to preserve query strings |
Parameters set at Campaign level only | All ads share the same UTM values, losing ad-level granularity | Move parameters to the Ad level with dynamic tokens |
Using {{ad.name}} then renaming ads | Historical UTMs no longer match current ad names | Switch to {{ad.id}} |
Mixed casing (Facebook vs facebook) | Can cause inconsistent grouping in GA4 | Always use lowercase in UTM values |
4. For Instagram Placements
If running ads on Instagram through the same Meta Ads Manager, you can either:
Option A (simplest): Use utm_source=facebook for all placements. Meta treats Facebook and Instagram under one platform, and this keeps source tagging consistent.
Option B: Use utm_source={{site_source_name}} which dynamically resolves to fb or ig. However, fb is shorter than facebook, so Option A is generally safer for consistency.
Quick Checklist
URL Parameters template added at the Ad level on all active Meta ads
utm_source=facebook (lowercase, full word)
utm_medium=paid-social (hyphenated, lowercase)
utm_content={{ad.id}} (dynamic token, uses the immutable ad ID)
utm_campaign={{campaign.name}} (dynamic token)
utm_id={{campaign.id}} (dynamic token)
Landing page preserves query parameters through redirects
GA4 Realtime report confirms correct source/medium after clicking an ad
Cross-domain tracking enabled (if checkout is on a different domain)
