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.
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.
Table of contents
- Complete Requirements Checklist
- Requirement 1: Platform Auto-Tagging Enabled
- Requirement 2: Platform-GA4 Links Active
- Requirement 3: Click IDs Captured in GA4
- Requirement 4: No Parameter Stripping
- Requirement 5: utmid Configured (Recommended)
- Requirement 6: Data Import Configured
- Requirement 7: Sufficient Permissions
- Requirement 8: Data Sharing Enabled
- Requirement 9: Consistent Time Zones
- Requirement 10: Data Retention Settings
- Complete Platform Checklist
- Google Ads Checklist
- Meta Ads Checklist
- Microsoft Ads Checklist
- FAQ
- Can I import costs without click IDs?
- How long does initial cost import take?
- What if I have multiple Google Ads accounts?
- Do I need utmid if I have gclid?
- Can I test cost import without spending money?
- What permissions do teammates need?
🚨 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.
Google Ads: gclid
Check:
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:
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:
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=...
Requirement 2: Platform-GA4 Links Active
GA4 must be linked to each ad platform for cost import.
Link Google Ads
GA4 → Admin → Product Links → Google Ads links
Requirements:
- Click "Link"
- Select Google Ads account
- Enable ALL import options:
- ✅ Import cost data
- ✅ Import clicks and impressions
- ✅ Enable personalized advertising
- ✅ Auto-tagging override enabled
- Save
Verify:
- Link status: Active ✅
- Data import: Enabled ✅
Link Meta Ads
GA4 → Admin → Product Links → Meta Ads links
Requirements:
- Click "Link"
- Authenticate with Facebook Business Manager
- Select Meta ad account
- Enable:
- ✅ Import cost data
- ✅ Import ad clicks and impressions
- Save
Verify:
- Connection: Connected ✅
- Import active: Yes ✅
Microsoft Ads (Manual Import)
GA4 doesn't auto-link Microsoft Ads.
Alternative: Manual cost data upload
- GA4 → Admin → Data Import
- Create data source: Cost data
- Upload CSV monthly with cost, clicks, impressions
- 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
Requirement 3: Click IDs Captured in GA4
GA4 must receive and store click ID parameters.
Verify Click ID Capture
Method 1: Realtime Report
- Click test ad
- GA4 → Reports → Realtime (within 30 seconds)
- Check event parameters
- Verify click ID present
Method 2: DebugView
- Enable debug mode on site
- Click test ad
- GA4 → Configure → DebugView
- Check event parameters for gclid/fbclid
Method 3: User Explorer
- After 24 hours
- GA4 → Explore → User Explorer
- Find test user
- Check session parameters for click IDs
Common Capture Issues
| Issue | Symptom | Fix |
|---|---|---|
| Redirects strip parameters | Click ID in landing URL but not GA4 | Fix redirects to preserve params |
| JavaScript redirect | Click ID lost before GA4 loads | Load GA4 before redirect |
| Cross-domain issue | Click ID lost on subdomain switch | Configure cross-domain measurement |
| Cookie consent | GA4 not loading until consent | Use 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:
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:
# Preserve all query parameters
RewriteCond %{"{"}{"{"}QUERY_STRING{"}"}{"}"}} .
RewriteRule ^old-page$ /new-page?%{"{"}{"{"}QUERY_STRING{"}"}{"}"}} [R=301,L]JavaScript redirect:
// Preserve parameters in redirect
function redirectWithParams(targetURL) {
const currentParams = new URLSearchParams(window.location.search);
const newURL = targetURL + '?' + currentParams.toString();
window.location.href = newURL;
}Nginx:
# Preserve query string in redirect
rewrite ^/old-page$ /new-page permanent;Requirement 5: utm_id Configured (Recommended)
While not strictly required, utm_id enhances cost reporting.
Configure utm_id
Google Ads Final URL suffix:
utm_id=`{"{"}{"{"}campaignid{"}"}{"}"}}`&utm_campaign=`{"{"}{"{"}campaign{"}"}{"}"}}`&utm_content=`{"{"}{"{"}adgroupid{"}"}{"}"}}`
Facebook URL parameters:
utm_id={"{"}{"{"}campaign.id{"}"}{"}"}}&utm_source=facebook&utm_medium=cpc&utm_campaign={"{"}{"{"}campaign.name{"}"}{"}"}}
LinkedIn URL parameters:
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:
- Data source type: Cost data
- Download CSV template
- Fill required fields:
- Date
- Campaign
- Source
- Medium
- Cost
- Clicks
- Impressions
- 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.
Google Ads Permissions
Required level: Administrator or above
Check:
Google Ads → Tools → Setup → Account access
Your account must have: Administrator ✅
Meta Business Manager Permissions
Required level: Admin access to ad account
Check:
Business Manager → Business Settings → Accounts → Ad accounts
Your role: Admin ✅
GA4 Permissions
Required level: Editor or above
Check:
GA4 → Admin → Property → Property Access Management
Your role: Editor or Administrator ✅
Requirement 8: Data Sharing Enabled
GA4 and ad platforms must allow data sharing.
Google Ads Data Sharing
Check:
Google Ads → Tools → Setup → Data Manager → Google signals
Must be: ✅ Activated
GA4 Data Sharing
Check:
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:
GA4 → Admin → Property → Property Settings → Reporting time zone
Google Ads timezone:
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
Google Ads Checklist
# 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
# 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
# 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
Join 2,847 marketers fixing their tracking daily
FAQ
Can I import costs without click IDs?
Yes, via manual CSV upload:
- GA4 → Admin → Data Import
- Create cost data source
- Match on campaign name or utm_id
- 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:
- GA4 → Product Links → Google Ads links
- Click "Link" for each account
- Enable cost import for each
- 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:
- Create test campaign with $1 daily budget
- Let it run for 24 hours
- Check if cost appears in GA4
- 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