Fix Missing utm_id in Paid Campaigns (5-Minute Guide)
Quick diagnosis: You're running paid ads on LinkedIn, TikTok, Pinterest, or other non-Google/Facebook platforms. You check GA4 for ROI data and see:
- Sessions: ✅ Tracked
- Conversions: ✅ Tracked
- Cost: ❌ $0.00
- ROAS: ❌ N/A
The problem: Missing utm_id parameter.
Without utm_id, GA4 can't import your cost data, which means no ROI metrics and no way to know which campaigns are profitable.
The fix: Add utm_id to your campaign URLs. Takes 5 minutes.
🚨 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
Do You Actually Need utm_id?
Before adding utm_id, check if your platform auto-tags:
Platforms That DON'T Need utm_id (Skip This Guide)
These automatically send cost data to GA4:
- ✅ Google Ads (uses
gclid) - ✅ Facebook/Instagram Ads (uses
fbclid) - ✅ Microsoft Ads (uses
msclkid)
For these platforms: Use auto-tagging only. Don't add manual UTMs or utm_id.
Platforms That NEED utm_id (This Guide Is For You)
These require manual cost import via utm_id:
- ❌ LinkedIn Ads
- ❌ TikTok Ads
- ❌ Pinterest Ads
- ❌ Twitter (X) Ads
- ❌ Reddit Ads
- ❌ Snapchat Ads
- ❌ Taboola/Outbrain
- ❌ Quora Ads
If you're running ads on any platform in the second list, continue with this guide.
The Fix: Add utm_id to Your Campaign URLs
Standard Format
Current URL (without utm_id):
https://yoursite.com/demo?utm_source=linkedin&utm_medium=cpc&utm_campaign=product-demo
Fixed URL (with utm_id):
https://yoursite.com/demo?utm_id=LI-2025-01-DEMO&utm_source=linkedin&utm_medium=cpc&utm_campaign=product-demo
The utm_id format:
utm_id=`{platform-code}`-`{"{"}{"{"}year{"}"}{"}"}}`-`{"{"}{"{"}month{"}"}{"}"}}`-`{campaign-type}`
Examples by platform:
LinkedIn:
utm_id=LI-2025-01-DEMO
TikTok:
utm_id=TT-2025-01-BRAND
Pinterest:
utm_id=PIN-2025-01-SHOP
Twitter/X:
utm_id=X-2025-01-PROMO
Reddit:
utm_id=RD-2025-01-COMM
Snapchat:
utm_id=SNAP-2025-01-VIDEO
Platform-Specific Instructions
LinkedIn Ads
Step 1: LinkedIn Campaign Manager → Your campaign
Step 2: Click campaign name → Edit
Step 3: Scroll to Campaign details → Website URL
Step 4: Update URL to include utm_id:
Before:
https://yoursite.com/demo?utm_source=linkedin&utm_medium=cpc&utm_campaign=product-demo-jan
After:
https://yoursite.com/demo?utm_id=LI-2025-01-DEMO&utm_source=linkedin&utm_medium=cpc&utm_campaign=product-demo-jan
Step 5: Save campaign
Step 6: Repeat for all active LinkedIn campaigns
Pro tip: LinkedIn allows URL parameter variables:
utm_id=LI-{campaign.id}
This auto-generates unique IDs per campaign using LinkedIn's campaign ID.
TikTok Ads
Step 1: TikTok Ads Manager → Your campaign
Step 2: Ad group → Ad creative
Step 3: Edit Destination URL
Step 4: Add utm_id:
Before:
https://yoursite.com/signup?utm_source=tiktok&utm_medium=cpc&utm_campaign=brand-awareness
After:
https://yoursite.com/signup?utm_id=TT-2025-01-BRAND&utm_source=tiktok&utm_medium=cpc&utm_campaign=brand-awareness
Step 5: Save and apply to all ad groups in campaign
Pro tip: TikTok supports dynamic parameters:
utm_id=TT-`{"{"}{"{"}campaign_id{"}"}{"}"}}`
Pinterest Ads
Step 1: Pinterest Ads Manager → Campaigns
Step 2: Select campaign → Ad group → Edit pins
Step 3: Update Destination URL
Step 4: Add utm_id:
Before:
https://yoursite.com/products?utm_source=pinterest&utm_medium=cpc&utm_campaign=shopping-jan
After:
https://yoursite.com/products?utm_id=PIN-2025-01-SHOP&utm_source=pinterest&utm_medium=cpc&utm_campaign=shopping-jan
Step 5: Save changes
Twitter (X) Ads
Step 1: Twitter Ads Manager → Your campaign
Step 2: Edit campaign → Website traffic
Step 3: Update Website URL
Step 4: Add utm_id:
Before:
https://yoursite.com/promo?utm_source=twitter&utm_medium=cpc&utm_campaign=flash-sale
After:
https://yoursite.com/promo?utm_id=X-2025-01-PROMO&utm_source=twitter&utm_medium=cpc&utm_campaign=flash-sale
Step 5: Save
Reddit Ads
Step 1: Reddit Ads Manager → Your campaign
Step 2: Ad group → Edit URL
Step 3: Add utm_id to destination URL:
Before:
https://yoursite.com/community?utm_source=reddit&utm_medium=cpc&utm_campaign=community-jan
After:
https://yoursite.com/community?utm_id=RD-2025-01-COMM&utm_source=reddit&utm_medium=cpc&utm_campaign=community-jan
Step 4: Save
Taboola / Outbrain (Native Ads)
Step 1: Campaign dashboard → Your campaign
Step 2: Edit campaign items
Step 3: Update URL for each ad:
Before:
https://yoursite.com/article?utm_source=taboola&utm_medium=native&utm_campaign=content-promo
After:
https://yoursite.com/article?utm_id=TAB-2025-01-CONTENT&utm_source=taboola&utm_medium=native&utm_campaign=content-promo
Step 4: Apply changes
😰 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
utm_id Naming Best Practices
Use a Consistent Format
Recommended format:
{"{"}{"{"}PLATFORM{"}"}{"}"}}-{"{"}{"{"}YEAR{"}"}{"}"}}-{"{"}{"{"}MONTH{"}"}{"}"}}-{"{"}{"{"}CAMPAIGN_TYPE{"}"}{"}"}}
Examples:
✅ Good:
LI-2025-01-DEMO (LinkedIn, Jan 2025, Demo campaign)
TT-2025-01-BRAND (TikTok, Jan 2025, Brand campaign)
PIN-2025-02-SHOP (Pinterest, Feb 2025, Shopping campaign)
❌ Bad:
linkedin-campaign-1 (too generic)
demo (not unique)
LI Jan Demo (spaces break URLs)
Requirements for utm_id
✅ DO:
- Make it unique per campaign
- Use alphanumeric + hyphens only
- Keep it under 50 characters
- Make it human-readable
- Include platform identifier
- Include date (year/month)
❌ DON'T:
- Use spaces
- Use special characters (&, =, ?, #, %)
- Reuse same ID for multiple campaigns
- Change ID mid-campaign
- Make it too cryptic
Alternative: Use Platform Campaign IDs
Option: Use your ad platform's campaign ID as utm_id:
LinkedIn Campaign ID: 123456789
utm_id:
utm_id=LI-123456789
Pros:
- Guaranteed unique
- Easy to trace back to platform
- Never conflicts
Cons:
- Less human-readable
- Longer IDs
Verification: Did It Work?
Test 1: Check the URL (30 seconds)
Step 1: Go to your ad platform
Step 2: Preview or click one of your ads
Step 3: Look at the destination URL in browser
Step 4: Verify you see utm_id=... in the URL
✅ Correct:
https://yoursite.com/demo?utm_id=LI-2025-01-DEMO&utm_source=linkedin&utm_medium=cpc
❌ Still broken:
https://yoursite.com/demo?utm_source=linkedin&utm_medium=cpc
(no utm_id)
Test 2: GA4 Real-Time Report (1 minute)
Step 1: Click your ad (or use preview mode) Step 2: Open GA4 → Reports → Real-time Step 3: Find your session Step 4: Verify Campaign ID dimension shows your utm_id
Expected:
- Campaign ID:
LI-2025-01-DEMO✅
If blank or missing:
- utm_id not in URL
- URL parameter name wrong (must be exactly
utm_id)
Test 3: After Cost Upload (Next Day)
After adding utm_id and uploading cost data (see guide):
Step 1: GA4 → Reports → Advertising → Campaign performance Step 2: Filter to your campaign Step 3: Check Cost column
Expected: Cost > $0.00 (shows imported cost data)
If still $0.00:
- Wait 24-48 hours (processing delay)
- Verify Campaign ID in CSV exactly matches utm_id in URL
- Check CSV upload status (Admin → Data import)
Bulk Update: Fix Multiple Campaigns at Once
If you have many campaigns to update:
Option 1: Export → Edit → Re-upload (Platform-Dependent)
Some platforms (LinkedIn, TikTok) allow bulk campaign editing:
Step 1: Export all campaigns to CSV/Excel Step 2: Add utm_id column Step 3: Fill with unique IDs:
Campaign Name → utm_id
Product Demo → LI-2025-01-DEMO
Lead Gen → LI-2025-01-LEADGEN
Brand Awareness → LI-2025-01-BRAND
Step 4: Re-upload to platform Step 5: Verify changes applied
Option 2: URL Builder + Find/Replace
Step 1: Export campaign URLs to spreadsheet Step 2: Use formula to add utm_id:
=CONCATENATE(A2, "&utm_id=", B2)
Where:
A2 = original URL
B2 = utm_id valueStep 3: Copy new URLs Step 4: Paste into ad platform (one by one or bulk if supported)
Option 3: Campaign Cloning (Fastest for Small Sets)
Step 1: Clone existing campaign Step 2: Pause original Step 3: Update clone with utm_id in URL Step 4: Launch clone
Pros: Preserves historical data separation Cons: Creates duplicate campaigns in ad platform
Common Mistakes When Adding utm_id
Mistake #1: Using Same utm_id for Multiple Campaigns
Wrong:
All LinkedIn campaigns: utm_id=linkedin-2025
All TikTok campaigns: utm_id=tiktok-2025
Why it's wrong: Cost data will be combined. You won't see per-campaign ROI.
Fix: Unique ID per campaign:
utm_id=LI-2025-01-DEMO
utm_id=LI-2025-01-LEADGEN (different campaign)
Mistake #2: Including Spaces
Wrong:
utm_id=LI 2025 01 DEMO
Why it's wrong: Spaces break URLs (get encoded as %20)
Fix:
utm_id=LI-2025-01-DEMO (use hyphens)
Mistake #3: Changing utm_id Mid-Campaign
Problem: Week 1 you used utm_id=linkedin-demo, Week 2 you changed to utm_id=LI-2025-01-DEMO
Result: Historical cost data won't match new sessions. Broken attribution.
Fix: Pick an ID at campaign start and never change it.
Mistake #4: Forgetting to Update CSV
Problem: You added utm_id to URLs but forgot to use same value in cost import CSV.
URL:
utm_id=LI-2025-01-DEMO
CSV:
Campaign ID: linkedin-demo (doesn't match!)Fix: Ensure exact match (case-sensitive):
Campaign ID: LI-2025-01-DEMOPrevention Checklist
✅ Add utm_id to ALL new paid campaigns (non-auto-tagged platforms) ✅ Use consistent naming format (platform-year-month-type) ✅ Update existing campaigns with utm_id ✅ Test one campaign before bulk updating ✅ Verify utm_id appears in GA4 real-time reports ✅ Prepare cost CSV with matching Campaign ID values ✅ Upload cost data to GA4 (setup guide) ✅ Verify cost appears in Advertising reports
✅ 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
Do I need utm_id for Google Ads or Facebook Ads?
No. These platforms use auto-tagging (gclid, fbclid) which automatically sends cost data to GA4. Don't add utm_id or manual UTMs to auto-tagged platforms.
Can I add utm_id to existing campaigns without breaking historical data?
Yes! Adding utm_id to existing campaigns is safe:
- Historical data (before utm_id): Tracked via utm_source/medium/campaign
- New data (after utm_id): Also tracked via utm_id
Both coexist in GA4. Cost import (via utm_id) only affects future data.
What if I have multiple ad groups in one campaign?
Option 1: Same utm_id for all ad groups (simpler)
Campaign: Product Demo
Ad Group 1: utm_id=LI-2025-01-DEMO
Ad Group 2: utm_id=LI-2025-01-DEMO (same)
Ad Group 3: utm_id=LI-2025-01-DEMO (same)
Cost aggregated at campaign level.
Option 2: Different utm_id per ad group (granular)
Ad Group 1: utm_id=LI-2025-01-DEMO-AG1
Ad Group 2: utm_id=LI-2025-01-DEMO-AG2
Ad Group 3: utm_id=LI-2025-01-DEMO-AG3
Requires separate cost data per ad group in CSV.
Can I use the same utm_id across different platforms?
No. Use platform-specific prefixes:
❌ Wrong:
LinkedIn campaign: utm_id=2025-01-DEMO
TikTok campaign: utm_id=2025-01-DEMO (duplicate!)
✅ Right:
LinkedIn: utm_id=LI-2025-01-DEMO
TikTok: utm_id=TT-2025-01-DEMO (unique)
What happens if I forget utm_id on some campaigns?
Those campaigns won't have cost data imported. You'll see:
- Sessions and conversions in GA4 ✅
- Cost = $0.00 ❌
- ROAS = N/A ❌
Fix: Add utm_id going forward. Historical sessions without utm_id can't retroactively get cost data.
Should I include utm_id in email campaigns?
No. utm_id is specifically for cost data import on paid campaigns. Email campaigns don't have "cost" in the same sense (no per-click cost).
Email: Use standard UTMs only:
?utm_source=newsletter&utm_medium=email&utm_campaign=weekly-jan
(no utm_id needed)
Conclusion
Fix missing utm_id in 3 steps:
-
Add utm_id to campaign URLs in your ad platform
- Format:
utm_id={"{"}{"{"}PLATFORM{"}"}{"}"}}-{"{"}{"{"}YEAR{"}"}{"}"}}-{"{"}{"{"}MONTH{"}"}{"}"}}-{"{"}{"{"}TYPE{"}"}{"}"}} - Example:
utm_id=LI-2025-01-DEMO
- Format:
-
Verify in GA4 real-time reports
- Campaign ID dimension should show your utm_id
-
Upload cost data with matching Campaign ID
- CSV format:
Date,Campaign ID,Cost - Full setup guide here
- CSV format:
Once complete, GA4 will show full ROI metrics (cost, ROAS, CPA) for all your paid campaigns, enabling data-driven budget allocation.