technical-guidesUpdated 2025

UTM Medium Case Sensitivity: Why cpc ≠ CPC in GA4

GA4 treats cpc and CPC as completely different values. Learn why case sensitivity matters for utm_medium and how it affects channel grouping.

6 min readtechnical-guides

cpc is not the same as CPC.

In GA4, they're two completely different values. One gets assigned to "Paid Search." The other becomes "Unassigned."

This isn't a bug. It's how GA4's channel grouping regex works—and understanding it is critical to avoiding broken attribution.

🚨 Not sure what's breaking your tracking?

Run a free 60-second audit to check all 40+ ways UTM tracking can fail.

Scan Your Campaigns Free

✓ No credit card ✓ See results instantly

Why GA4 is Case-Sensitive

GA4 uses regex (regular expressions) to match utm_medium values to channels.

The regex pattern for Paid Search is:

Regex
^(cpc|ppc|paidsearch).*$

Translation: Must start with exactly "cpc" OR "ppc" OR "paidsearch" (all lowercase).

Matches:

  • cpc → Paid Search ✅
  • cpcgoogle → Paid Search ✅ (starts with cpc)
  • ppc → Paid Search ✅

Does NOT match:

  • CPC → Unassigned ❌ (uppercase C, P, C)
  • Cpc → Unassigned ❌ (uppercase C)
  • cPc → Unassigned ❌ (uppercase P)

Why? Regex is case-sensitive by default. cpcCPCCpc.

Real-World Impact

Campaign: Google Ads with $15,000/month budget

URLs used:

Code
Ads set 1: ?utm_medium=cpc    (lowercase)
Ads set 2: ?utm_medium=CPC    (uppercase)

GA4 shows:

  • Paid Search: 4,200 sessions (ads set 1 only)
  • Unassigned: 8,900 sessions (ads set 2)

Analysis problem:

  • Can't see total Google Ads performance (split across two "channels")
  • ROI calculation impossible (half the data invisible)
  • Budget decisions based on incomplete data

Solution: Change all to lowercase cpc.

Result: All 13,100 sessions correctly assigned to Paid Search.

Case Sensitivity Across All Mediums

Email

Pattern: ^(email|e-mail|e_mail|e mail)$

Matches:

  • email
  • e-mail

Does NOT match:

  • EMAIL
  • Email
  • E-Mail

Social

Pattern: Contains social|social-network|social-media|sm

Matches:

  • social
  • paidsocial
  • social-network

Does NOT match:

  • SOCIAL
  • Social
  • PaidSocial

Display

Pattern: ^(display|cpm|banner).*$

Matches:

  • display
  • cpm
  • banner

Does NOT match:

  • DISPLAY
  • Display
  • CPM

Why This Matters More Than Source/Campaign

utm_medium affects channel grouping.

If medium is wrong:

  • Traffic goes to "Unassigned" (invisible in standard reports)
  • Channel-level analysis broken
  • ROI calculations impossible
  • Budget allocation decisions based on bad data

utm_source and utm_campaign don't affect channel grouping.

If source/campaign have case issues:

  • Data fragmented (google vs Google appear as 2 rows)
  • Annoying, but traffic still assigned to correct channel
  • Can filter/aggregate in reports

Priority for case sensitivity:

  1. utm_medium (critical—affects channel assignment)
  2. utm_source (important—affects data consolidation)
  3. utm_campaign (good practice—avoids fragmentation)

😰 Is this your only tracking issue?

This is just 1 of 40+ ways UTM tracking breaks. Most marketing teams have 8-12 critical issues they don't know about.

• 94% of sites have UTM errors

• Average: $8,400/month in wasted ad spend

• Fix time: 15 minutes with our report

✓ Connects directly to GA4 (read-only, secure)

✓ Scans 90 days of data in 2 minutes

✓ Prioritizes issues by revenue impact

✓ Shows exact sessions affected

Get Your Free Audit Report

How to Check for Case Issues

GA4 Method

Explore → Free Form:

  • Dimension: Session medium
  • Dimension: Session default channel group
  • Filter: Channel = "Unassigned"

Look for uppercase or mixed-case values:

  • CPC, Cpc
  • EMAIL, Email
  • SOCIAL, Social
  • DISPLAY, Display

RegEx Test

Test your utm_medium value:

Javascript
const medium = "CPC"; // Your utm_medium value
const pattern = /^(cpc|ppc|paidsearch).*$/;
 
if (pattern.test(medium)) {
  console.log("✅ Matches Paid Search");
} else {
  console.log("❌ Will be Unassigned");
}

Result for "CPC": ❌ Will be Unassigned Result for "cpc": ✅ Matches Paid Search

Prevention Strategies

1. Force Lowercase in URL Builder

Google Sheets:

Code
=LOWER(B2)  // Converts any input to lowercase

2. Dropdown Validation

Only allow lowercase options:

Code
cpc
email
social
display
affiliate
referral

3. JavaScript Validation

Javascript
function validateMedium(medium) {
  if (medium !== medium.toLowerCase()) {
    alert("utm_medium must be lowercase");
    return false;
  }
  return true;
}

4. Pre-Launch Checklist

  • utm_medium is all lowercase
  • Tested in GA4 Realtime
  • Traffic assigned to correct channel

✅ Fixed this issue? Great! Now check the other 39...

You just fixed one tracking issue. But are your Google Ads doubling sessions? Is Facebook attribution broken? Are internal links overwriting campaigns?

Connects to GA4 (read-only, OAuth secured)

Scans 90 days of traffic in 2 minutes

Prioritizes by revenue impact

Free forever for monthly audits

Run Complete UTM Audit (Free Forever)

Join 2,847 marketers fixing their tracking daily

FAQ

Why doesn't GA4 just ignore case?

GA4 could use case-insensitive regex, but doesn't for consistency and standardization across properties. Google expects marketers to follow documented conventions.

Do other analytics tools have the same issue?

Most analytics platforms are case-sensitive for UTM parameters. Adobe Analytics, Matomo, and others typically treat "cpc" and "CPC" as different values.

What about utm_source and utm_campaign—are they case-sensitive?

Yes, but impact is different:

  • utm_medium: Case affects channel grouping (critical)
  • utm_source/campaign: Case creates duplicate rows (annoying but not critical)

Best practice: Lowercase everything.

Can I fix this with a custom channel group?

Yes, you can create a custom channel group with case-insensitive patterns like [Cc][Pp][Cc] to match both cpc and CPC. But it's simpler to just use lowercase.

Does this apply to utm_content and utm_term?

No. utm_content and utm_term don't affect channel grouping, so case doesn't break attribution. However, inconsistent case still creates data fragmentation.

How do I train my team on case sensitivity?

Create a one-page UTM guide showing:

  • ✅ Correct: cpc, email, social (lowercase)
  • ❌ Wrong: CPC, Email, Social (uppercase)
  • Share with everyone who creates campaign links
UTM

Get Your Free Audit in 60 Seconds

Connect GA4, run the scan, and see exactly where tracking is leaking budget. No credit card required.

Trusted by growth teams and agencies to keep attribution clean.