attributionUpdated 2025

GA4 Cost Data Import Requirements: Complete Checklist

Everything you need for successful GA4 cost data import: platform click IDs, utm_id setup, account links, and validation.

8 min readattribution

Jessica Murphy spent two weeks setting up GA4 cost import for $280,000 in annual ad spend. She followed online tutorials. Enabled auto-tagging. Added utm_id parameters.

Cost reports still showed $0.

She missed one requirement: Linking her ad platforms to GA4. All the click IDs in the world don't matter if GA4 can't access the cost data from the platforms.

This comprehensive checklist covers every requirement for successful cost data import.

🚨 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

Complete Requirements Checklist

Requirement 1: Platform Auto-Tagging Enabled

Every platform must append click IDs to destination URLs.

Check:

Code
Google Ads → Settings → Account settings → Auto-tagging

Must be: ✅ ON

Test:

  • Click test ad
  • URL should contain ?gclid=...

Facebook/Meta Ads: fbclid

Auto-enabled by default.

Test:

  • Click test ad
  • URL should contain ?fbclid=...

If missing: Check Facebook Pixel installation

Microsoft Ads: msclkid

Check:

Code
Microsoft Ads → Settings → Tracking → UET auto-tagging

Must be: ✅ Enabled

Test:

  • Click test ad
  • URL should contain ?msclkid=...

LinkedIn Ads: li_fat_id

Requires: LinkedIn Insight Tag installed

Check:

Code
Campaign Manager → Account Assets → Insight Tag

Test:

  • Install tag in site <head>
  • Click test ad
  • URL should contain ?li_fat_id=...

TikTok Ads: ttclid

Auto-enabled by default.

Test:

  • Click test ad
  • URL should contain ?ttclid=...

GA4 must be linked to each ad platform for cost import.

GA4 → Admin → Product Links → Google Ads links

Requirements:

  1. Click "Link"
  2. Select Google Ads account
  3. Enable ALL import options:
    • ✅ Import cost data
    • ✅ Import clicks and impressions
    • ✅ Enable personalized advertising
    • ✅ Auto-tagging override enabled
  4. Save

Verify:

  • Link status: Active ✅
  • Data import: Enabled ✅

GA4 → Admin → Product Links → Meta Ads links

Requirements:

  1. Click "Link"
  2. Authenticate with Facebook Business Manager
  3. Select Meta ad account
  4. Enable:
    • ✅ Import cost data
    • ✅ Import ad clicks and impressions
  5. Save

Verify:

  • Connection: Connected ✅
  • Import active: Yes ✅

Microsoft Ads (Manual Import)

GA4 doesn't auto-link Microsoft Ads.

Alternative: Manual cost data upload

  1. GA4 → Admin → Data Import
  2. Create data source: Cost data
  3. Upload CSV monthly with cost, clicks, impressions
  4. Match on: Campaign ID or utm_id

LinkedIn Ads (Manual Import)

GA4 doesn't auto-link LinkedIn.

Alternative: Manual cost data upload via 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

Requirement 3: Click IDs Captured in GA4

GA4 must receive and store click ID parameters.

Verify Click ID Capture

Method 1: Realtime Report

  1. Click test ad
  2. GA4 → Reports → Realtime (within 30 seconds)
  3. Check event parameters
  4. Verify click ID present

Method 2: DebugView

  1. Enable debug mode on site
  2. Click test ad
  3. GA4 → Configure → DebugView
  4. Check event parameters for gclid/fbclid

Method 3: User Explorer

  1. After 24 hours
  2. GA4 → Explore → User Explorer
  3. Find test user
  4. Check session parameters for click IDs

Common Capture Issues

IssueSymptomFix
Redirects strip parametersClick ID in landing URL but not GA4Fix redirects to preserve params
JavaScript redirectClick ID lost before GA4 loadsLoad GA4 before redirect
Cross-domain issueClick ID lost on subdomain switchConfigure cross-domain measurement
Cookie consentGA4 not loading until consentUse server-side tracking or consent mode

Requirement 4: No Parameter Stripping

Click IDs must survive redirects, page loads, and navigation.

Test Redirect Preservation

Manual test:

Code
1. Landing URL: https://site.com?gclid=test123
2. After page load: Check URL still contains gclid=test123
3. After any redirects: Check URL still contains gclid=test123

Common stripping causes:

  • Server-side redirects without parameter passthrough
  • JavaScript redirects that don't preserve params
  • URL rewriting that removes query strings
  • Mobile app deep linking
  • Payment gateway redirects

Fix Redirect Stripping

Apache .htaccess:

Apache
# Preserve all query parameters
RewriteCond %{"{"}{"{"}QUERY_STRING{"}"}{"}"}} .
RewriteRule ^old-page$ /new-page?%{"{"}{"{"}QUERY_STRING{"}"}{"}"}} [R=301,L]

JavaScript redirect:

Javascript
// Preserve parameters in redirect
function redirectWithParams(targetURL) {
  const currentParams = new URLSearchParams(window.location.search);
  const newURL = targetURL + '?' + currentParams.toString();
  window.location.href = newURL;
}

Nginx:

Nginx
# Preserve query string in redirect
rewrite ^/old-page$ /new-page permanent;

While not strictly required, utm_id enhances cost reporting.

Configure utm_id

Google Ads Final URL suffix:

Code
utm_id=`{"{"}{"{"}campaignid{"}"}{"}"}}`&utm_campaign=`{"{"}{"{"}campaign{"}"}{"}"}}`&utm_content=`{"{"}{"{"}adgroupid{"}"}{"}"}}`

Facebook URL parameters:

Code
utm_id={"{"}{"{"}campaign.id{"}"}{"}"}}&utm_source=facebook&utm_medium=cpc&utm_campaign={"{"}{"{"}campaign.name{"}"}{"}"}}

LinkedIn URL parameters:

Code
utm_id={"{"}{"{"}campaign.id{"}"}{"}"}}&utm_source=linkedin&utm_medium=cpc

Requirement 6: Data Import Configured

For platforms without auto-link (Microsoft, LinkedIn, others).

Set Up Manual Cost Import

GA4 → Admin → Data Import → Create data source

Steps:

  1. Data source type: Cost data
  2. Download CSV template
  3. Fill required fields:
    • Date
    • Campaign
    • Source
    • Medium
    • Cost
    • Clicks
    • Impressions
  4. Upload CSV

Schedule:

  • Upload weekly or monthly
  • Automate if possible via GA4 API

Requirement 7: Sufficient Permissions

You need proper access levels in both platforms.

Required level: Administrator or above

Check:

Code
Google Ads → Tools → Setup → Account access

Your account must have: Administrator ✅

Meta Business Manager Permissions

Required level: Admin access to ad account

Check:

Code
Business Manager → Business Settings → Accounts → Ad accounts

Your role: Admin ✅

GA4 Permissions

Required level: Editor or above

Check:

Code
GA4 → Admin → Property → Property Access Management

Your role: Editor or Administrator ✅

Requirement 8: Data Sharing Enabled

GA4 and ad platforms must allow data sharing.

Check:

Code
Google Ads → Tools → Setup → Data Manager → Google signals

Must be: ✅ Activated

GA4 Data Sharing

Check:

Code
GA4 → Admin → Property → Data Settings → Data Sharing Settings

Enable:

  • ✅ Google products & services
  • ✅ Benchmarking (optional)
  • ✅ Account specialists (optional)

Requirement 9: Consistent Time Zones

GA4 and ad platforms should use same time zone for accurate matching.

Verify Time Zones

GA4 timezone:

Code
GA4 → Admin → Property → Property Settings → Reporting time zone

Google Ads timezone:

Code
Google Ads → Settings → Account settings → Time zone

If different: Cost data may be off by one day during midnight hours.

Best practice: Align all platforms to same timezone.

Requirement 10: Data Retention Settings

GA4 must retain data long enough for cost import.

Configure Retention

GA4 → Admin → Data Settings → Data Retention

Event data retention:

  • Minimum: 2 months
  • Recommended: 14 months

Reset user data on new activity: ✅ On (recommended)

Why: Cost import happens with delay (24-48 hours). Longer retention prevents data loss.

Complete Platform Checklist

Markdown
# Google Ads Cost Import Requirements
 
## Platform Configuration
- [ ] Auto-tagging: ON
- [ ] Google signals: Activated
- [ ] Admin permissions: Verified
 
## GA4 Configuration
- [ ] Google Ads linked to GA4
- [ ] Cost data import: Enabled
- [ ] Click import: Enabled
- [ ] Impression import: Enabled
 
## Testing
- [ ] Test ad clicked
- [ ] Landing URL contains gclid
- [ ] GA4 Realtime shows gclid
- [ ] Wait 48 hours
- [ ] Cost data appears in reports
 
## Validation
- [ ] Cost matches Google Ads spend
- [ ] CPC calculated correctly
- [ ] ROAS reports working
- [ ] All campaigns showing cost
 
Status: [ ] COMPLETE [ ] INCOMPLETE
Date verified: __________

Meta Ads Checklist

Markdown
# Meta Ads Cost Import Requirements
 
## Platform Configuration
- [ ] Facebook Pixel: Installed
- [ ] fbclid auto-append: Verified
- [ ] Admin permissions: Verified
 
## GA4 Configuration
- [ ] Meta Ads connected to GA4
- [ ] Cost data import: Enabled
- [ ] Ad account selected correctly
 
## Testing
- [ ] Test ad clicked
- [ ] Landing URL contains fbclid
- [ ] GA4 Realtime shows fbclid
- [ ] Wait 48 hours
- [ ] Cost data appears
 
## Validation
- [ ] Cost matches Meta spend
- [ ] All campaigns showing cost
- [ ] Facebook + Instagram separate (if needed)
 
Status: [ ] COMPLETE [ ] INCOMPLETE
Date verified: __________

Microsoft Ads Checklist

Markdown
# Microsoft Ads Cost Import Requirements
 
## Platform Configuration
- [ ] UET tag: Installed
- [ ] Auto-tagging: Enabled (msclkid)
- [ ] Admin permissions: Verified
 
## GA4 Configuration
- [ ] Manual data import configured
- [ ] CSV template downloaded
- [ ] Upload schedule set (weekly/monthly)
 
## Testing
- [ ] Test ad clicked
- [ ] Landing URL contains msclkid
- [ ] GA4 Realtime shows msclkid
- [ ] First CSV uploaded
- [ ] Cost data appears
 
Status: [ ] COMPLETE [ ] INCOMPLETE
Date verified: __________

✅ 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

Can I import costs without click IDs?

Yes, via manual CSV upload:

  1. GA4 → Admin → Data Import
  2. Create cost data source
  3. Match on campaign name or utm_id
  4. Upload monthly costs

Downside: Manual process, not automatic.

How long does initial cost import take?

Timeline:

  • Platform linked: Immediate
  • First click ID captured: Immediate
  • Cost data import: 24-48 hours
  • Appears in reports: 48-72 hours total

Patience required: Don't panic if cost doesn't show day 1.

What if I have multiple Google Ads accounts?

Link each account separately:

  1. GA4 → Product Links → Google Ads links
  2. Click "Link" for each account
  3. Enable cost import for each
  4. All accounts will import to same GA4 property

Do I need utm_id if I have gclid?

For basic cost import: No.

For advanced reporting: Yes.

  • Campaign grouping across platforms
  • Custom cost analysis
  • Better campaign organization

Can I test cost import without spending money?

Yes:

  1. Create test campaign with $1 daily budget
  2. Let it run for 24 hours
  3. Check if cost appears in GA4
  4. Pause campaign

Cost: $1-2 for validation

What permissions do teammates need?

For cost import setup:

  • GA4: Editor role minimum
  • Google Ads: Admin minimum
  • Meta Ads: Ad account admin

For viewing cost reports:

  • GA4: Viewer role sufficient

Related: UTM ID Without Platform Rule

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.