GA4 Offline Conversions for B2B: Tracking CRM Pipeline to the Click

Every B2B marketer has faced this problem: Google Ads reports 200 leads last quarter, but your CRM shows only 12 closed deals. The gap between "form fill" and "revenue" is where most B2B attribution dies — and it is exactly where GA4 offline conversions can save your pipeline.
Last updated: June 2026
This guide walks you through the complete setup: capturing the right identifiers, sending CRM pipeline events back to GA4 via the Measurement Protocol, and using that data to supercharge Smart Bidding. No fluff, no theory — just the implementation playbook we use with our own B2B clients.
Why GA4 Offline Conversions Matter for B2B
In B2C, the conversion happens on the website. In B2B, the website generates a lead, and the real conversion — the signed contract — happens weeks or months later inside your CRM.
Without offline conversion tracking, you are flying blind:
- Smart Bidding optimizes for garbage. Google optimizes for the event you tell it to. If you only track form submissions, Google will find you more form submitters — not more closed deals.
- Attribution is incomplete. Your CMO asks "which campaign drove the most revenue?" and you cannot answer because GA4 never saw the revenue event.
- Budget allocation is random. You cannot shift spend toward campaigns that produce SQLs and away from campaigns that produce junk MQLs.
GA4 offline conversion tracking closes this loop by importing your CRM pipeline events — MQL, SQL, Opportunity, Closed Won — back into GA4, tied to the original session that generated the lead.
The Identity Bridge: client_id vs user_id
The entire system hinges on one question: how do you connect a CRM record back to the GA4 session that created it?
GA4 uses two primary identifiers:
| Identifier | What It Is | When to Use |
|---|---|---|
client_id |
Unique browser/device ID stored in the _ga cookie |
Always — this is your primary key |
user_id |
A custom ID you assign to logged-in users | When users authenticate before converting |
For most B2B lead gen funnels (landing page → form → CRM), client_id is the only identifier available because the prospect never logs in. This is your bridge.
Capturing client_id at Form Submission
You need to extract the client_id from the GA4 cookie and inject it into a hidden form field. Here is the GTM Custom JavaScript variable:
// GTM Variable: cjs_ga4_client_id
function() {
try {
var cookie = document.cookie.match(/_ga=GA\d+\.\d+\.(.+)/);
if (cookie) return cookie[1];
// Fallback: use gtag API
var cid = '';
gtag('get', 'G-XXXXXXXXXX', 'client_id', function(id) { cid = id; });
return cid || 'unknown';
} catch(e) {
return 'unknown';
}
}
Then create a GTM Custom HTML tag that fires on all pages to inject this value into your forms:
<script>
document.addEventListener('DOMContentLoaded', function() {
var field = document.querySelector('input[name="ga_client_id"]');
if (field) {
var match = document.cookie.match(/_ga=GA\d+\.\d+\.(.+)/);
if (match) field.value = match[1];
}
});
</script>
Add a hidden field named ga_client_id to every lead form on your site. When the form submits, this value flows into your CRM alongside the lead's name and email.
Defining Your Pipeline Events
Before writing any code, map your CRM stages to GA4 event names. Here is a standard B2B mapping:
| CRM Stage | GA4 Event Name | Event Value |
|---|---|---|
| New Lead | generate_lead |
$0 (already tracked client-side) |
| Marketing Qualified Lead | mql_qualified |
Estimated pipeline value × 0.1 |
| Sales Qualified Lead | sql_created |
Estimated pipeline value × 0.3 |
| Opportunity Created | opportunity_created |
Deal amount × 0.5 |
| Proposal Sent | proposal_sent |
Deal amount × 0.7 |
| Closed Won | closed_won |
Actual contract value |
The dollar values are critical. They allow GA4's attribution models and Smart Bidding to weight high-value conversions more heavily than early-stage ones.
Important: Do not track every micro-stage. Pick 3–5 events that represent meaningful funnel progression. Too many events create noise.
Method 1: Measurement Protocol (Recommended)
The GA4 Measurement Protocol lets you send events to GA4 via server-side HTTP POST requests. This is the recommended approach for B2B because it is real-time and fully automatable.
Prerequisites
- GA4 Measurement ID — Found in Admin → Data Streams → your web stream (format:
G-XXXXXXXXXX) - API Secret — Create one in Admin → Data Streams → Measurement Protocol API secrets
client_id— The value you captured in the hidden form field, now stored in your CRM
The API Request
POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=YOUR_SECRET
{
"client_id": "1234567890.1234567890",
"non_personalized_ads": false,
"events": [
{
"name": "sql_created",
"params": {
"currency": "USD",
"value": 15000,
"lead_source": "google_ads",
"deal_stage": "sql",
"engagement_time_msec": 1
}
}
]
}
Implementation with Make (Integromat)
For teams without backend developers, Make.com provides the fastest path:
- Trigger: Watch for CRM deal stage changes (HubSpot, Salesforce, Pipedrive all have native modules)
- Filter: Only proceed if the deal has a
ga_client_idvalue and the stage is one you mapped above - HTTP Module: Send a POST request to the Measurement Protocol endpoint with the
client_id, event name, and deal value - Error Handler: Log failures to a Google Sheet for debugging
Implementation with Zapier
- Trigger: HubSpot → Deal Stage Changed
- Filter: Stage = "SQL" AND GA Client ID is not empty
- Action: Webhooks → POST to
https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=SECRET - Body: JSON with
client_idand event params
Method 2: Data Import (Batch Upload)
If real-time tracking is not critical, GA4's Data Import feature lets you upload offline events via CSV.
CSV Format
client_id,event_name,event_timestamp,value,currency
1234567890.1234567890,closed_won,1715800000,25000,USD
9876543210.9876543210,sql_created,1715700000,12000,USD
Upload Steps
- Go to GA4 Admin → Data Import
- Create a new data source → select "Event data"
- Upload your CSV
- GA4 processes the file within 24 hours
Limitations: Data Import is not real-time, does not support all event parameters, and has a 10MB file size limit. For most B2B teams, the Measurement Protocol is the better option.
Configuring Smart Bidding with Offline Data
Once offline events flow into GA4, you can use them to power Smart Bidding in Google Ads.
Step 1: Mark Events as Conversions
In GA4, go to Admin → Conversions → New Conversion Event. Add sql_created and closed_won as conversion events.
Step 2: Import into Google Ads
- In Google Ads, go to Tools → Conversions → New Conversion Action
- Select "Import" → "Google Analytics 4 properties"
- Select your GA4 property and choose the offline events
- Set the attribution model to "Data-Driven" (recommended)
Step 3: Optimize Bidding
Switch your campaigns from "Maximize Conversions" (optimizing for form fills) to "Maximize Conversion Value" targeting your offline events. This tells Google's algorithm to find users who are more likely to become SQLs and closed deals — not just form submitters.
Ramp-up timeline: Google needs 15–30 offline conversions per month to exit the learning phase. Start by importing all historical CRM data (last 90 days) to seed the model.
Troubleshooting Common Issues
Events Not Appearing in GA4
- Check the
client_idformat. It must be two groups of digits separated by a period (e.g.,1234567890.1234567890). If your CRM stored it asGA1.1.1234567890.1234567890, strip theGA1.1.prefix. - Verify the API Secret. Regenerate it if in doubt.
- Use the Measurement Protocol Validation endpoint (
/mp/collect→/debug/mp/collect) to check for errors before going live.
Conversion Counts Do Not Match CRM
- Deduplication. Ensure your automation only fires once per stage transition. If a deal moves from SQL back to MQL and then to SQL again, you will double-count.
client_idcoverage. Not every lead will have aclient_id— some come from offline sources, referrals, or channels where the GA4 cookie was blocked. Expect 60–80% match rates.- Attribution window. GA4's default event data retention is 14 months. If your sales cycle exceeds this, older
client_idvalues may have expired.
Smart Bidding Performance Dips After Switching
This is normal. Google's algorithm needs 2–4 weeks to recalibrate when you change conversion actions. During this period:
- Do not make budget changes
- Do not change targeting
- Monitor CPA/ROAS at the weekly level, not daily
Real-World Impact: What to Expect
Based on our experience implementing this for B2B clients across SaaS, professional services, and technology:
| Metric | Before Offline Tracking | After 90 Days |
|---|---|---|
| Cost Per SQL | Unknown (tracking CPL only) | Visible and optimizable |
| Campaign ROAS | 0.8x (guessing) | 2.4x–3.8x (measured) |
| Wasted Ad Spend | 35–45% | 15–20% |
| Sales-Marketing Alignment | Weekly arguments | Shared dashboard |
The biggest win is not the numbers — it is the conversation. When marketing and sales look at the same attribution data, budget discussions become data-driven instead of political.
Checklist: GA4 Offline Conversion Setup
Use this checklist to verify your implementation:
- Hidden
ga_client_idfield added to all lead forms - GTM variable or script captures
client_idcorrectly - CRM custom field stores the
client_id - Pipeline stages mapped to GA4 event names
- Dollar values assigned to each stage
- Measurement Protocol API Secret created
- Automation (Make/Zapier) configured and tested
- Events visible in GA4 Realtime report
- Events marked as Conversions in GA4
- Conversions imported into Google Ads
- Smart Bidding switched to Maximize Conversion Value
- 90-day historical backfill completed
Need expert help? Talk to our Funnel & CRO team to boost your conversion rates.
Keep Reading
- Conversion Rate Benchmarks by Funnel Stage: Google Ads, Meta Ads & More (2026 Data)
- Cost Per Lead Benchmarks by Channel: Google Ads, Facebook, LinkedIn & More (2026 B2B Data)
- SaaS Free Trial Conversion Rate Optimization: How to Turn Signups Into Paying Customers (2026 Benchmarks & Tactics)
Use our free Ad Budget Calculator and A/B Test Calculator to plan your monthly ad spend across channels and check if your test results are statistically significant.
Source: Sotros Infotech Internal Data & Industry Benchmarks
Need help with analytics?
Our team builds analytics systems for B2B companies. Get a free strategy review.
Book a Free Strategy CallHow This Fits Into Our Work
This article is part of how we deliver Analytics and Paid Acquisition for teams in SaaS, B2B Professional Services and Technology. If you're facing similar challenges, we can help you build the infrastructure to address them systematically.