·Meta Ads / Facebook Ads / UTM / GA4 / Analytics

What goes into utm_medium for Meta Ads — explained by GA4's official regex

GA4 classifies Paid Social with the regex ^(.*cp.*|ppc|retargeting|paid.*)$ — `social` doesn't match, so paid ads get logged as organic. Here's why `cpc` is the safest value, with the official Meta Ads URL format.

What goes into utm_medium for Meta Ads — explained by GA4's official regex

Putting utm_medium=social on Meta Ads URLs causes GA4 (Google Analytics 4) to log paid clicks as "organic" traffic. This isn't a misconfiguration or a GA4 bug — it's the result of GA4's official classification regex ^(.*cp.*|ppc|retargeting|paid.*)$[1] OR-ing against the Organic Social rule.

This article works through what to put into utm_medium for Meta Ads, using the official regex GA4 actually evaluates.

Key takeaways#

  1. Use utm_medium=cpc. Shortest match for GA4's Paid Social regex
  2. Never use social. It collides with Organic Social and logs paid ads as organic
  3. paid_social and paid-social split your reports. Pick one and lock it across the org

1. The regex GA4 actually evaluates#

GA4's Default Channel Group auto-classifies each hit using utm_source and utm_medium[1]. A session lands in Paid Social when both conditions hold:

  • utm_source matches GA4's "social sites list"
  • utm_medium matches the regex ^(.*cp.*|ppc|retargeting|paid.*)$

The regex chains 4 alternatives with | (OR). Each pattern's meaning and matching values:

Breakdown of GA4's official utm_medium regex — 4 alternation in one chart

In short: values containing "cp" or starting with "paid" match. Values like social, display, meta, paid social (with a space), and blank do not match.

2. How utm_medium breaks#

Incident 1: utm_medium=social logs paid ads as organic#

GA4's Organic Social rule matches utm_medium against social / social-network / social-media / sm[1]. With utm_source=facebook + utm_medium=social, the Medium-only match is enough — the session is classified as Organic Social. Money spent on Meta paid ads gets logged as organic traffic, and reported ROAS is understated.

Incident 2: paid_social / paid-social split, and meta falls into (other)#

The regex paid.* matches both paid_social and paid-social. Paid Social classification works, but GA4 stores dimension values with the original punctuation intact. Mixing both in delivery causes Paid Social to show two separate rows that need manual merge in monthly reporting.

Separately, naming it utm_medium=meta ("because it's Meta Ads") matches none of the regex alternatives. The session fails the Paid Social condition and lands in Default Channel Group's (other), disappearing from the Paid Social report.

utm_source=facebook
utm_medium=cpc
utm_campaign={{campaign.name}}
utm_content={{ad.name}}
utm_term={{adset.name}}
utm_id={{campaign.id}}

Three reasons utm_medium=cpc is the safest choice:

  • Guaranteed regex match: shortest fit for .*cp.* — near-zero typo risk
  • Universally readable: short for "Cost Per Click" — anyone looking at the report instantly knows it's a paid-click channel
  • Aligned across channels: Google Ads / TikTok Ads / LinkedIn Ads also use cpc by convention — cross-channel reports stay consistent

Here's what happens with values other than cpc:

Recommended vs NG — GA4 classification by utm_medium value

Two checks before and after launch:

  1. Pre-launch URL preview: open the URL parameter field in Meta Ads Manager's ad-editing screen, click "URL preview", confirm utm_medium=cpc shows up as expected
  2. Post-launch GA4 realtime: within 30 minutes, open GA4 → Realtime → Source/Medium and confirm facebook / cpc is showing. If you see facebook / social or (direct) / (none), the parameter isn't reaching GA4

Summary — the "right answer" is in the regex#

There's an ongoing debate online: social vs paid_social vs cpc. But what GA4 actually evaluates is one regex: ^(.*cp.*|ppc|retargeting|paid.*)$[1]. social doesn't match. cpc does. That's the entire story.

RevenueScope auto-merges utm value drift — cpc / paid_social / paid-social collapse into a single channel — so you can read paid-channel revenue, RPS, and AOV with the spelling noise removed.


Related on /news:

References#

  1. Google Analytics Help, "[GA4] Default channel group" (Apr 2026)
  2. Meta Business Help Center, "URL dynamic parameter spec" (Apr 2026)

See which ads actually drive revenue, at a glance

14-day free trial. No credit card required. Up and running in 5 minutes.

Start 14-day free trial

RevenueScope

EC revenue strategy, grounded in data and practice

What goes into utm_medium for Meta Ads — explained by GA4's official regex