Why utm_medium=CPC Breaks GA4 Channel Grouping (Case Matters!)
Using uppercase in utm_medium (CPC instead of cpc) causes all your paid traffic to show as Unassigned in GA4. Here's why case sensitivity matters and how to fix it.
You're running a $30,000/month Google Ads campaign. You check GA4 to see performance.
Your paid search traffic shows up as "Unassigned."
Not "Paid Search." Not even "Other." Just Unassigned. 87% of your Google Ads traffic$26,100 worthis invisible in your channel reports.
You check your tracking URLs. Everything looks perfect:
utm_source=google&utm_medium=CPC&utm_campaign=spring_sale
Except... it's not perfect. That capital "CPC" instead of lowercase "cpc"? That's why your entire paid search campaign is invisible in GA4.
GA4's channel grouping is case-sensitive. And uppercase utm_medium values break everything.
Table of contents
- Why Case Matters in utmmedium
- Real Example: $142k Budget Misallocated
- How Uppercase Breaks Each Channel
- Paid Search: CPC vs cpc
- Email: EMAIL vs email
- Social: SOCIAL vs social
- Display: DISPLAY vs display
- Common Sources of Uppercase UTM Parameters
- 1. Manual URL Building
- 2. Email Platform Auto-Capitalization
- 3. CRM/Marketing Automation Presets
- 4. Google Sheets Formulas
- 5. Developer Hard-Coded Values
- The 2-Minute Fix
- Step 1: Find All Uppercase utmmedium Values (1 min)
- Step 2: Update Active Campaigns (30 seconds per platform)
- Step 3: Fix URL Builder Templates (30 seconds)
- Prevention: Never Uppercase Again
- Rule 1: Always Lowercase for utmmedium
- Rule 2: Use Validation Before Launch
- Rule 3: Lock URL Builder to Lowercase
- Rule 4: Quarterly Case Audit
- FAQ
- Does case matter for utmsource and utmcampaign too?
- Will fixing case affect historical data?
- Can I create custom channel groups to fix this?
- What if my ad platform automatically capitalizes?
- Does this apply to utmterm and utmcontent?
- How do I bulk-fix existing campaigns?
🚨 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 Case Matters in utm_medium
GA4's Default Channel Grouping uses regex pattern matching to assign traffic to channels.
For "Paid Search" channel, GA4 looks for these exact patterns:
cpc(lowercase)ppc(lowercase)paidsearch(lowercase)
It does NOT match:
CPC(uppercase)Cpc(title case)PPC(uppercase)PAIDSEARCH(all caps)
Why? Regex patterns in GA4 are case-sensitive by default. cpc CPC`.
Real Example: $142k Budget Misallocated
Company: B2B SaaS, $600k annual marketing budget
Problem discovered:
GA4 Traffic Acquisition report showed:
- Paid Search: 1,240 sessions (2.3% of traffic)
- Unassigned: 28,900 sessions (54% of traffic)
Leadership's interpretation: "Paid search is failing. Let's cut the budget by 70% and reallocate to content marketing."
Investigation revealed:
All paid campaigns used uppercase CPC:
Google Ads: utm_medium=CPC
Microsoft Ads: utm_medium=PPC
LinkedIn Ads: utm_medium=CPC
None matched GA4's case-sensitive regex patterns.
After fixing to lowercase:
| Channel | Sessions (Before) | Sessions (After) | Budget Impact |
|---|---|---|---|
| Paid Search | 1,240 | 29,800 | $142k/year |
| Unassigned | 28,900 | 340 | - |
Reality: Paid search was actually the #1 traffic driver at 55% of all sessions, with a 3.4% conversion ratebetter than any other channel.
Decision change: Instead of cutting paid search budget by 70% ($100k reduction), they increased it by 40% ($57k increase).
12-month result: Additional $340k in revenue from paid search optimization.
If they'd made the original decision: Would have killed their best-performing channel based on broken data.
😰 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
How Uppercase Breaks Each Channel
Paid Search: CPC vs cpc
Broken:
utm_medium=CPC � Unassigned
utm_medium=PPC � Unassigned
utm_medium=Cpc � Unassigned
utm_medium=PAIDSEARCH � Unassigned
Fixed:
utm_medium=cpc � Paid Search
utm_medium=ppc � Paid Search
utm_medium=paidsearch � Paid Search
Email: EMAIL vs email
Broken:
utm_medium=EMAIL � Unassigned
utm_medium=Email � Unassigned
utm_medium=E-MAIL � Unassigned
Fixed:
utm_medium=email � Email
utm_medium=e-mail � Email
Social: SOCIAL vs social
Broken:
utm_medium=SOCIAL � Unassigned
utm_medium=Social � Unassigned
Fixed:
utm_medium=social � Organic Social
utm_medium=paidsocial � Paid Social
Display: DISPLAY vs display
Broken:
utm_medium=DISPLAY � Unassigned
utm_medium=Display � Unassigned
utm_medium=BANNER � Unassigned
Fixed:
utm_medium=display � Display
utm_medium=banner � Display
utm_medium=cpm � Display
Common Sources of Uppercase UTM Parameters
1. Manual URL Building
How it happens:
- Marketer types:
?utm_source=Google&utm_medium=CPC - Looks professional with capitals
- Doesn't realize GA4 is case-sensitive
Prevention:
- Document: "ALWAYS lowercase for utm_medium"
- Use URL builder with lowercase enforcement
- Add validation before campaign launch
2. Email Platform Auto-Capitalization
How it happens:
- Some email platforms (Mailchimp, HubSpot) auto-capitalize first letter
- Default template:
utm_medium=Email - Every email campaign launches with title case
Prevention:
- Override platform defaults
- Set custom UTM template with lowercase values
- Test before sending to full list
3. CRM/Marketing Automation Presets
How it happens:
- Salesforce template:
utm_medium=CPC - Marketo preset:
utm_medium=Email - Someone created template months/years ago, everyone uses it
Prevention:
- Audit all CRM/automation templates
- Update to lowercase
- Lock templates to prevent editing
4. Google Sheets Formulas
How it happens:
=UPPER(B2) // Converts "cpc" to "CPC"
- Formula applied to utm_medium column
- Uppercase values copied into campaigns
Prevention:
=LOWER(B2) // Ensures lowercase
5. Developer Hard-Coded Values
How it happens:
// Developer hard-codes in all caps
const utmMedium = "CPC";Prevention:
const utmMedium = "cpc"; // Always lowercase
// Or force lowercase:
const utmMedium = "CPC".toLowerCase();The 2-Minute Fix
Step 1: Find All Uppercase utm_medium Values (1 min)
GA4 � Explore � Free Form
- Dimension: Session medium
- Metrics: Sessions
- Filter: Session default channel group = "Unassigned"
Look for uppercase values:
- CPC, PPC, EMAIL, SOCIAL, DISPLAY, REFERRAL
Step 2: Update Active Campaigns (30 seconds per platform)
Google Ads:
- Campaigns � Settings � Campaign URL options
- Update:
utm_medium=CPC�utm_medium=cpc - Save (ads may require re-approval)
Facebook Ads:
- Ad Manager � URL Parameters
- Change template to lowercase
- Apply to all active campaigns
Email Platform:
- Templates � Edit master template
- Find:
utm_medium=Email - Replace:
utm_medium=email
Step 3: Fix URL Builder Templates (30 seconds)
Update your team's UTM builder to auto-lowercase:
Google Sheets formula:
=LOWER(B2) // Apply to utm_medium column
Or use dropdown with lowercase options only:
- cpc
- social
- display
- affiliate
- referral
Prevention: Never Uppercase Again
Rule 1: Always Lowercase for utm_medium
Correct:
utm_medium=cpc
utm_medium=email
utm_medium=social
utm_medium=display
Wrong:
utm_medium=CPC
utm_medium=Email
utm_medium=SOCIAL
Rule 2: Use Validation Before Launch
Pre-launch checklist:
// Validate utm_medium is lowercase
function validateUTM(url) {
const medium = new URLSearchParams(url).get('utm_medium');
if (medium && medium !== medium.toLowerCase()) {
alert('Error: utm_medium must be lowercase');
return false;
}
return true;
}Rule 3: Lock URL Builder to Lowercase
Google Sheets data validation:
- Select utm_medium column
- Data � Data validation
- List of items:
cpc,email,social,display,affiliate,referral - Reject input if not in list
Rule 4: Quarterly Case Audit
Every 3 months:
- Export GA4 session medium values
- Check for uppercase/mixed case
- Fix active campaigns
- Update team docs
✅ 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
Join 2,847 marketers fixing their tracking daily
FAQ
Does case matter for utm_source and utm_campaign too?
Technically, yesbut with different impact:
- utm_medium: Case breaks channel grouping (critical problem)
- utm_source: Case creates duplicate rows (google vs Google appear as 2 separate sources)
- utm_campaign: Case creates duplicate rows (spring_sale vs Spring_Sale appear as 2 campaigns)
Best practice: Lowercase ALL UTM parameters for consistency.
Will fixing case affect historical data?
No. Historical data remains labeled "Unassigned." The fix only applies to new traffic. This is why catching case issues early is critical.
Can I create custom channel groups to fix this?
Yes, but it's a workaround, not a solution:
- GA4 � Admin � Data display � Channel groups
- Create custom group that matches uppercase patterns
- BUT: Only applies to your view, doesn't help team members, and doesn't sync across properties
Better: Just use lowercase from the start.
What if my ad platform automatically capitalizes?
Override platform defaults:
- Google Ads: Use tracking template with lowercase values
- Facebook: Edit URL parameters template
- LinkedIn: Manual URL with lowercase
Most platforms respect whatever you inputdouble-check campaign settings.
Does this apply to utm_term and utm_content?
No. utm_term and utm_content don't affect channel grouping, so case doesn't break attribution.
However: Inconsistent case creates data fragmentation (Spring vs spring appear as different values).
Best practice: Still use lowercase for clean reporting.
How do I bulk-fix existing campaigns?
Platform-specific:
Google Ads:
- Google Ads Editor � Download campaigns
- Find/Replace:
utm_medium=CPC�utm_medium=cpc - Upload changes
Facebook Ads:
- Ads Manager � Bulk edit
- Select all active campaigns
- Edit URL parameters
- Save
Email Platform:
- Update master templates
- Clone existing campaigns with new templates
- Deprecate old campaigns
Warning: Pause/edit active campaigns carefullymay affect ad approval/delivery.