best-practicesUpdated 2025

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.

8 min readbest-practices

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.

🚨 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:

Code
?utm_id=123456&utm_source=linkedin&utm_medium=cpc&utm_campaign=spring-sale

What it does:

  1. You add utm_id to your campaign URLs
  2. GA4 captures it with every session
  3. You upload a CSV with cost data tied to each utm_id
  4. GA4 matches the utm_id values and imports the cost
  5. 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:

PlatformAuto-Tag ParameterCost Data Import
Google AdsgclidAutomatic (no setup needed)
Facebook AdsfbclidVia Meta integration
Microsoft AdsmsclkidVia 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:

PlatformRequires utm_id?Why
LinkedIn Ads✅ YesNo auto-tagging, manual cost import only
TikTok Ads✅ YesNo official GA4 cost integration
Pinterest Ads✅ YesNo auto-cost import
Twitter (X) Ads✅ YesNo GA4 integration
Reddit Ads✅ YesNo cost data sharing
Taboola✅ YesNative ad network, manual import
Outbrain✅ YesNative ad network, manual import
Snapchat Ads✅ YesNo GA4 cost integration
Quora Ads✅ YesNo 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

Get Your Free Audit Report

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:

CampaignSessionsConversionsRevenue
LinkedIn - Product Demo3,500105$52,500
TikTok - Brand Awareness8,000160$48,000
Reddit - Community2,00040$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:

CampaignSessionsConversionsRevenueCostROASCPA
LinkedIn3,500105$52,500$30,0001.75x$286
TikTok8,000160$48,000$15,0003.2x$94
Reddit2,00040$12,000$5,0002.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

Code
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

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.75

Step 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

Code
`{platform-code}`-`{"{"}{"{"}year{"}"}{"}"}}`-`{"{"}{"{"}month{"}"}{"}"}}`-`{campaign-type}`

Examples:

Code
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

Code
utm_id=linkedin-20250109-campaign001
utm_id=tiktok-20250109-campaign002

Approach 2: Use Campaign Name Abbreviation

Code
utm_id=li-prod-demo-q1-2025
utm_id=tt-brand-aware-q1-2025

Approach 3: Use Ad Platform's Campaign ID

Code
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:

Code
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:

Code
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:

Code
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:

Code
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:

Code
utm_id=LI-2025-01-DEMO

CSV Campaign ID:

Code
linkedin-demo-jan-2025

Result: No match. Cost data not imported.

Fix: Ensure exact match (case-sensitive):

Code
URL: utm_id=LI-2025-01-DEMO
CSV: Campaign ID = LI-2025-01-DEMO

Mistake #4: Changing utm_id Mid-Campaign

Week 1 URL:

Code
utm_id=linkedin-jan-demo

Week 2 URL (changed):

Code
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:

Code
https://yoursite.com/sale?gclid=abc123xyz

Cost data: Automatically imported from Google Ads (no CSV needed)

Don't add:

Code
❌ ?gclid=abc123&utm_id=google-jan-2025
(unnecessary, gclid handles everything)

Scenario 2: Facebook Ads (Uses fbclid)

Facebook auto-tagging:

Code
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:

Code
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.

Code
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:

  1. Is this a paid campaign? (If no → skip utm_id)
  2. Does the platform have auto-tagging? (If yes → skip utm_id, use auto-tag)
  3. 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

Run Complete UTM Audit (Free Forever)

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:

Code
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:

Code
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:

  1. Add utm_id to campaign URLs
  2. Create cost data CSV with matching Campaign ID
  3. Upload to GA4 → Data Import
  4. GA4 matches utm_id to cost
  5. 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

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.