utm_id: The Missing Link for Cost Data Import in GA4
GA4 can't import ad spend without utm_id. Here's why this parameter is critical for ROI tracking.
You're running paid campaigns on LinkedIn, TikTok, Pinterest, Twitter, and Reddit. You've carefully tagged everything with UTM parameters. GA4 is tracking sessions and conversions perfectly.
But when you try to calculate ROI, you hit a wall.
The problem: GA4 shows you conversions but has no idea how much you spent to get them.
You open the Advertising workspace in GA4:
- Sessions: 15,000 ✅
- Conversions: 450 ✅
- Revenue: $67,500 ✅
- Cost: $0.00 ❌
- ROAS: N/A ❌
Without cost data, GA4 can't calculate:
- Cost per acquisition (CPA)
- Return on ad spend (ROAS)
- Campaign profitability
- Which campaigns to scale vs pause
The solution: utm_id parameter. This lesser-known UTM parameter is the key to unlocking cost data import in GA4.
Table of contents
- What is utmid?
- Why Auto-Tagged Platforms Don't Need utmid
- Platforms with Auto-Tagging (Don't Need utmid)
- Platforms WITHOUT Auto-Tagging (Need utmid)
- Real Example: $50,000 Ad Spend with No ROI Visibility
- What They Could See in GA4:
- After Adding utmid and Cost Import:
- How utmid Enables Cost Import
- The Cost Import Process
- utmid Naming Best Practices
- Recommended Format
- utmid Requirements
- Alternative Naming Approaches
- Common utmid Mistakes
- Mistake #1: Using Same utmid for Multiple Campaigns
- Mistake #2: Not Including utmid in URLs
- Mistake #3: Mismatched utmid Between URL and CSV
- Mistake #4: Changing utmid Mid-Campaign
- When You DON'T Need utmid
- Scenario 1: Google Ads (Uses gclid)
- Scenario 2: Facebook Ads (Uses fbclid)
- Scenario 3: Microsoft Ads (Uses msclkid)
- Scenario 4: Non-Paid Traffic
- How to Decide: Do I Need utmid?
- Prevention Checklist
- FAQ
- Is utmid required for all UTM campaigns?
- What's the difference between utmid and campaign ID?
- Can I use the platform's campaign ID as my utmid?
- What if I forget to add utmid to some campaigns?
- How often should I upload cost data CSVs?
- Can I use utmid with Google Ads for extra tracking?
- Conclusion
🚨 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
What is utm_id?
utm_id is a UTM parameter that acts as a unique identifier linking your GA4 traffic to external cost data.
Format:
?utm_id=123456&utm_source=linkedin&utm_medium=cpc&utm_campaign=spring-sale
What it does:
- You add
utm_idto your campaign URLs - GA4 captures it with every session
- You upload a CSV with cost data tied to each
utm_id - GA4 matches the
utm_idvalues and imports the cost - Now GA4 can calculate ROI metrics
Without utm_id:
- GA4 tries to match cost data using
utm_source,utm_medium,utm_campaign - Matching often fails (naming inconsistencies, special characters, case sensitivity)
- Cost import breaks
- ROI metrics unavailable
With utm_id:
- GA4 matches on a simple unique ID
- 100% reliable matching
- Cost import works consistently
- Full ROI visibility
Why Auto-Tagged Platforms Don't Need utm_id
Before we dive deeper, understand that utm_id is only needed for manually tagged campaigns.
Platforms with Auto-Tagging (Don't Need utm_id)
These platforms automatically send cost data to GA4:
| Platform | Auto-Tag Parameter | Cost Data Import |
|---|---|---|
| Google Ads | gclid | Automatic (no setup needed) |
| Facebook Ads | fbclid | Via Meta integration |
| Microsoft Ads | msclkid | Via Microsoft Ads integration |
For these platforms: Don't add manual UTMs. Use their auto-tagging. Cost data flows automatically.
Platforms WITHOUT Auto-Tagging (Need utm_id)
These require manual UTMs + cost data import:
| Platform | Requires utm_id? | Why |
|---|---|---|
| LinkedIn Ads | ✅ Yes | No auto-tagging, manual cost import only |
| TikTok Ads | ✅ Yes | No official GA4 cost integration |
| Pinterest Ads | ✅ Yes | No auto-cost import |
| Twitter (X) Ads | ✅ Yes | No GA4 integration |
| Reddit Ads | ✅ Yes | No cost data sharing |
| Taboola | ✅ Yes | Native ad network, manual import |
| Outbrain | ✅ Yes | Native ad network, manual import |
| Snapchat Ads | ✅ Yes | No GA4 cost integration |
| Quora Ads | ✅ Yes | No cost data export |
For these platforms: Add utm_id to enable cost data import.
😰 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
Real Example: $50,000 Ad Spend with No ROI Visibility
Client: B2B SaaS company
Channels: LinkedIn Ads ($30k/month), TikTok Ads ($15k/month), Reddit Ads ($5k/month)
Problem: No utm_id in campaign URLs
What They Could See in GA4:
| Campaign | Sessions | Conversions | Revenue |
|---|---|---|---|
| LinkedIn - Product Demo | 3,500 | 105 | $52,500 |
| TikTok - Brand Awareness | 8,000 | 160 | $48,000 |
| Reddit - Community | 2,000 | 40 | $12,000 |
Total: 13,500 sessions, 305 conversions, $112,500 revenue
Questions they couldn't answer:
- Which campaign is profitable?
- What's the actual ROAS for each channel?
- Should we increase LinkedIn or TikTok budget?
- Is Reddit worth the $5k/month spend?
After Adding utm_id and Cost Import:
| Campaign | Sessions | Conversions | Revenue | Cost | ROAS | CPA |
|---|---|---|---|---|---|---|
| 3,500 | 105 | $52,500 | $30,000 | 1.75x | $286 | |
| TikTok | 8,000 | 160 | $48,000 | $15,000 | 3.2x | $94 |
| 2,000 | 40 | $12,000 | $5,000 | 2.4x | $125 |
Insights revealed:
- TikTok had 3.2x ROAS (best performer, should scale)
- LinkedIn had 1.75x ROAS (worst performer, need optimization)
- Reddit at 2.4x ROAS (solid performer, maintain budget)
Actions taken:
- Increased TikTok budget from $15k to $25k (+67%)
- Decreased LinkedIn budget from $30k to $20k (-33%)
- Maintained Reddit at $5k
Result: 40% increase in total conversions with same $50k/month budget.
This was only possible because utm_id enabled cost data import.
How utm_id Enables Cost Import
The Cost Import Process
Step 1: Add utm_id to campaign URLs
LinkedIn ad:
https://yoursite.com/demo?utm_id=LI-2025-01-DEMO&utm_source=linkedin&utm_medium=cpc&utm_campaign=product-demo-jan
TikTok ad:
https://yoursite.com/signup?utm_id=TT-2025-01-BRAND&utm_source=tiktok&utm_medium=cpc&utm_campaign=brand-awareness-jan
Reddit ad:
https://yoursite.com/community?utm_id=RD-2025-01-COMM&utm_source=reddit&utm_medium=cpc&utm_campaign=community-jan
Step 2: GA4 captures utm_id with every session
When users click, GA4 stores:
- Session source:
linkedin - Session medium:
cpc - Session campaign:
product-demo-jan - Campaign ID:
LI-2025-01-DEMO← This is the utm_id
Step 3: Create cost data CSV
Date,Campaign ID,Cost
2025-01-01,LI-2025-01-DEMO,987.50
2025-01-02,LI-2025-01-DEMO,1024.80
2025-01-01,TT-2025-01-BRAND,456.30
2025-01-02,TT-2025-01-BRAND,492.15
2025-01-01,RD-2025-01-COMM,156.20
2025-01-02,RD-2025-01-COMM,163.75Step 4: Upload CSV to GA4
GA4 → Admin → Data Import → Create data source → Cost data
Step 5: GA4 matches utm_id to cost
GA4 takes the utm_id value from each session and matches it to the Campaign ID in your CSV.
Result: Cost data now appears in GA4 alongside traffic and conversion data.
utm_id Naming Best Practices
Recommended Format
`{platform-code}`-`{"{"}{"{"}year{"}"}{"}"}}`-`{"{"}{"{"}month{"}"}{"}"}}`-`{campaign-type}`
Examples:
LinkedIn:
utm_id=LI-2025-01-DEMO (product demo campaign)
utm_id=LI-2025-01-LEADGEN (lead generation)
utm_id=LI-2025-02-BRAND (brand awareness)
TikTok:
utm_id=TT-2025-01-BRAND
utm_id=TT-2025-01-PRODUCT
utm_id=TT-2025-02-SALE
Reddit:
utm_id=RD-2025-01-COMM
utm_id=RD-2025-01-AMA
Pinterest:
utm_id=PIN-2025-01-VISUAL
utm_id=PIN-2025-01-SHOPPING
utm_id Requirements
✅ DO:
- Keep it unique (no duplicates across campaigns)
- Use alphanumeric characters only (letters, numbers, hyphens)
- Keep it short (under 50 characters)
- Make it human-readable (you'll see this in reports)
- Be consistent with format
❌ DON'T:
- Use spaces (causes CSV import errors)
- Use special characters (
&,=,?,#,%) - Use the same ID for multiple campaigns
- Change the ID mid-campaign (breaks historical matching)
- Make it too cryptic (
utm_id=xyz123- what is this?)
Alternative Naming Approaches
Approach 1: Platform + Date + ID
utm_id=linkedin-20250109-campaign001
utm_id=tiktok-20250109-campaign002
Approach 2: Use Campaign Name Abbreviation
utm_id=li-prod-demo-q1-2025
utm_id=tt-brand-aware-q1-2025
Approach 3: Use Ad Platform's Campaign ID
LinkedIn Campaign ID: 123456789
utm_id=li-123456789
TikTok Campaign ID: 987654321
utm_id=tt-987654321
Our recommendation: Approach 1 or 3 (easy to track back to platform).
Common utm_id Mistakes
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: GA4 will combine cost data for ALL campaigns under that ID. You won't see per-campaign ROI.
Fix: Unique ID per campaign:
utm_id=linkedin-demo-jan-2025
utm_id=linkedin-leadgen-jan-2025
utm_id=tiktok-brand-jan-2025
utm_id=tiktok-product-jan-2025
Mistake #2: Not Including utm_id in URLs
Wrong:
https://yoursite.com/demo?utm_source=linkedin&utm_medium=cpc&utm_campaign=demo
(no utm_id)
Result: Can't import cost data reliably. GA4 will try to match on campaign name, often fails.
Fix:
https://yoursite.com/demo?utm_id=li-demo-jan&utm_source=linkedin&utm_medium=cpc&utm_campaign=demo
Mistake #3: Mismatched utm_id Between URL and CSV
URL utm_id:
utm_id=LI-2025-01-DEMO
CSV Campaign ID:
linkedin-demo-jan-2025
Result: No match. Cost data not imported.
Fix: Ensure exact match (case-sensitive):
URL: utm_id=LI-2025-01-DEMO
CSV: Campaign ID = LI-2025-01-DEMO
Mistake #4: Changing utm_id Mid-Campaign
Week 1 URL:
utm_id=linkedin-jan-demo
Week 2 URL (changed):
utm_id=linkedin-demo-2025-01
Result: Historical cost data for Week 1 won't match new sessions in Week 2. Broken attribution.
Fix: Pick an ID and stick with it for the entire campaign duration.
When You DON'T Need utm_id
Scenario 1: Google Ads (Uses gclid)
Google Ads auto-tagging:
https://yoursite.com/sale?gclid=abc123xyz
Cost data: Automatically imported from Google Ads (no CSV needed)
Don't add:
❌ ?gclid=abc123&utm_id=google-jan-2025
(unnecessary, gclid handles everything)
Scenario 2: Facebook Ads (Uses fbclid)
Facebook auto-tagging:
https://yoursite.com/sale?fbclid=IwAR123xyz
Cost data: Automatically imported via Meta Ads integration
Don't add utm_id (fbclid is sufficient)
Scenario 3: Microsoft Ads (Uses msclkid)
Microsoft auto-tagging:
https://yoursite.com/sale?msclkid=abc123xyz
Cost data: Automatically imported via Microsoft Ads integration
Don't add utm_id
Scenario 4: Non-Paid Traffic
Email, organic social, referrals, etc.:
These don't have "cost" in the traditional sense. No need for utm_id.
Email: ?utm_source=newsletter&utm_medium=email&utm_campaign=weekly
(no utm_id needed)
Organic social: ?utm_source=linkedin&utm_medium=social&utm_campaign=post-123
(no utm_id needed)
How to Decide: Do I Need utm_id?
Ask yourself:
- Is this a paid campaign? (If no → skip utm_id)
- Does the platform have auto-tagging? (If yes → skip utm_id, use auto-tag)
- Do I want to import cost data to GA4? (If no → skip utm_id)
If all three are:
- ✅ Paid campaign
- ❌ No auto-tagging
- ✅ Want cost data in GA4
Then use utm_id.
Prevention Checklist
✅ Identify which platforms require utm_id (LinkedIn, TikTok, Pinterest, etc.) ✅ Create utm_id naming standard for your team ✅ Add utm_id to URL builder templates ✅ Verify utm_id appears in GA4 real-time reports ✅ Set up cost data import (CSV or API) ✅ Test with small budget before scaling ✅ Monitor cost import monthly for errors
✅ 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
Is utm_id required for all UTM campaigns?
No. Only for campaigns where you want to import cost data from non-auto-tagged platforms (LinkedIn, TikTok, Pinterest, etc.). Email, organic, and auto-tagged platforms (Google Ads, Facebook) don't need it.
What's the difference between utm_id and campaign ID?
utm_id: The parameter you add to your campaign URLs Campaign ID: The column name in your cost data CSV that matches utm_id
They should have the same value for matching to work:
URL: ?utm_id=LI-2025-01
CSV Column: Campaign ID = LI-2025-01
Can I use the platform's campaign ID as my utm_id?
Yes! This is actually a great approach:
LinkedIn campaign ID: 123456789
URL: ?utm_id=li-123456789
TikTok campaign ID: 987654321
URL: ?utm_id=tt-987654321
Easy to track back to the platform and ensures uniqueness.
What if I forget to add utm_id to some campaigns?
Those campaigns won't have cost data imported. You'll see sessions and conversions in GA4 but cost will be $0.00, so ROI metrics will be unavailable.
Fix: Add utm_id to URLs going forward. Historical data without utm_id can't be retroactively matched.
How often should I upload cost data CSVs?
Manual upload:
- Daily for active campaigns (most accurate)
- Weekly for lower-spend campaigns
- Monthly for minimal maintenance
Automated:
- Use GA4 Data Import API for automatic daily uploads
- Some platforms (Supermetrics, Windsor.ai) offer automated cost import
Can I use utm_id with Google Ads for extra tracking?
You can, but it's unnecessary. Google Ads' gclid already provides:
- Automatic cost import
- Campaign, ad group, keyword data
- More granular data than utm_id can provide
Recommendation: Don't mix gclid + utm_id. Use one or the other.
Conclusion
utm_id is the missing link for cost data import in GA4.
When to use it:
- Paid campaigns on platforms WITHOUT auto-tagging
- When you want to calculate ROI, ROAS, CPA in GA4
- LinkedIn, TikTok, Pinterest, Twitter, Reddit, native ads
When to skip it:
- Auto-tagged platforms (Google Ads, Facebook, Microsoft)
- Non-paid traffic (email, organic, referrals)
- When you track ROI outside GA4
The process:
- Add utm_id to campaign URLs
- Create cost data CSV with matching Campaign ID
- Upload to GA4 → Data Import
- GA4 matches utm_id to cost
- Full ROI visibility in GA4 reports
Without utm_id, you're flying blind on ROI for non-auto-tagged platforms. With it, you get complete visibility into campaign profitability.
Related: GA4 Cost Import Setup Guide