Google Analytics Offline Conversions: Importing CRM Data into GA4
Google Analytics 4 (GA4) can incorporate offline conversion data through two mechanisms: Data Import and the Measurement Protocol. However, it’s critical to understand the distinction between GA4 and Google Ads for offline conversion tracking — they serve fundamentally different purposes.
This guide from The Upload Offline Conversions App (TUOCA) explains how offline data flows into GA4, when to use GA4 vs. Google Ads for offline tracking, and how to set up both for a complete picture.
GA4 vs. Google Ads: Different Purposes
| Feature | Google Ads Offline Conversions | GA4 Offline Data |
|---|---|---|
| Primary purpose | Smart Bidding optimization | Analytics & reporting |
| Influences bidding | ✅ Yes (directly) | ❌ No |
| Matching method | GCLID, MSCLKID, hashed PII | client_id, user_id |
| Upload method | CSV, or the Data Manager API | Data Import, Measurement Protocol |
| Value-Based Bidding | ✅ Supported | ❌ Not applicable |
| Attribution | Click-level (GCLID) | User-level (client_id) |
| TUOCA support | ✅ Primary destination | ❌ Not directly (different purpose) |
The Key Distinction
Google Ads offline conversions feed directly into Smart Bidding, influencing how Google bids on your ads. This is where TUOCA focuses.
GA4 offline data enriches your analytics reports, giving you a fuller picture of the customer journey across channels. It does not influence Google Ads bidding.
If you have to choose one, choose Google Ads. It directly impacts campaign performance and revenue.
Method 1: GA4 Data Import
Data Import lets you upload CSV files that are joined to existing GA4 data.
Setting Up Data Import
- Go to GA4 Admin → Data collection and modification → Data import
- Click Create data source
- Select Event data as the import type
- Configure the data set:
| Setting | Description |
|---|---|
| Name | “CRM Offline Conversions” |
| Import type | Event data |
| Key | client_id or user_id |
| Imported fields | Custom dimensions/metrics you want to add |
CSV Format for Data Import
client_id,event_name,event_timestamp,value,currency,conversion_type
GA1.1.123456789.1714502400,offline_booked_job,1714502400,4500,USD,hvac_install
GA1.1.987654321.1714502400,offline_booked_job,1714588800,1200,USD,drain_clearing
Capturing client_id
The GA4 client_id is stored in the _ga cookie. To join offline data, you need to capture this ID alongside lead information:
// Read GA4 client_id from _ga cookie
function getGA4ClientId() {
const cookie = document.cookie.split(';').find(c => c.trim().startsWith('_ga='));
if (cookie) {
const parts = cookie.split('.');
return parts.slice(2).join('.');
}
return null;
}
// Store in hidden form field
const clientId = getGA4ClientId();
if (clientId) {
document.getElementById('ga_client_id').value = clientId;
}
Limitations of Data Import
- Not real-time — CSV uploads are batch-processed
- Requires client_id matching — Must capture GA4 client_id at lead time
- Doesn’t influence bidding — GA4 data doesn’t flow to Google Ads Smart Bidding
- Upload limits — 120 uploads per data source per day
Method 2: GA4 Measurement Protocol
The Measurement Protocol sends events directly to GA4 via server-side API calls.
Endpoint
POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXX&api_secret=YOUR_API_SECRET
Event Payload
{
"client_id": "123456789.1714502400",
"events": [{
"name": "offline_booked_job",
"params": {
"value": 4500.00,
"currency": "USD",
"conversion_type": "hvac_install",
"source_system": "servicetitan"
}
}]
}
Setting Up Measurement Protocol
- Go to GA4 Admin → Data streams → your stream → Measurement Protocol API secrets
- Click Create to generate an API secret
- Use the secret in your API requests
Advantages of Measurement Protocol
- Near real-time — Events appear quickly in GA4 reports
- Server-side — No browser dependency
- Flexible — Send any custom event with any parameters
- Programmatic — Can be integrated into CRM workflows
Limitations
- Still requires client_id — Without it, events are orphaned
- Doesn’t influence Google Ads bidding — Same limitation as Data Import
- No retroactive attribution — Can’t attribute to past sessions without client_id
When GA4 Offline Data Is Valuable
Cross-Channel Analysis
GA4 shows the complete customer journey across channels:
Session 1: Google Ads click (captured online)
Session 2: Direct visit (captured online)
Session 3: Phone call → Booked job (captured via Measurement Protocol)
Custom Reports
Build reports that combine online and offline data:
- Online leads vs. offline conversions by channel
- Customer journey length (first touch to conversion)
- Cross-device paths
Audience Building
Import offline conversion data to build GA4 audiences:
- “Customers who booked a job” → Target with remarketing
- “High-value customers ($5,000+ jobs)” → Build lookalike audiences
Recommended Setup
For most service businesses, the optimal setup is:
1. Upload to Google Ads (Via TUOCA)
GCLID/MSCLKID-based uploads that feed Smart Bidding. This is the high-impact action.
2. Send to GA4 (Via Measurement Protocol — Optional)
If you want richer analytics, also send events to GA4. This supplements your reporting but doesn’t replace Google Ads uploads.
3. Don’t Choose GA4 Over Google Ads
Some marketers try to use GA4 as a middleman: upload to GA4, then import GA4 goals into Google Ads. This is less reliable than uploading directly to Google Ads via API and adds unnecessary complexity.
How TUOCA Relates to GA4
TUOCA focuses on Google Ads, Meta, Microsoft Ads, and TikTok as destinations because these are the platforms where offline conversion data directly influences bidding and campaign performance.
GA4 is an analytics tool, not an advertising platform. While GA4 offline data enriches your understanding of the customer journey, it doesn’t optimize your ad spend. TUOCA prioritizes the highest-impact path: getting revenue data into the platforms that bid on your behalf.
Next Steps
- Set up Google Ads offline conversions first — This is the high-impact action
- Consider GA4 Measurement Protocol if you need cross-channel analytics
- Capture GA4 client_id in your forms if you plan to use Data Import
- Read the Google Ads guide — Google Ads Offline Conversions: Complete Guide