Skip to main content

How to get better match rates for Creative Affinity LTV

Learn how to improve Creative Affinity LTV match rates

Written by Daniel Ortega

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

facebook

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}}


2. Verify GA4 Is Capturing UTM Data

Once the UTM parameters are set on the Meta ads:

  1. 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.

  2. 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

  3. 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)

Did this answer your question?