A customer clicks your Google Ad, calls your sales team, and closes a $10,000 deal over the phone. Google Ads sees a click but no conversion. Your ROAS looks terrible even though the campaign is printing money.
Offline conversion import fixes this — you tell Google which clicks turned into real revenue, even when the conversion happened off your website.
How It Works
- Customer clicks your Google Ad → Google assigns a
gclid(Google Click ID) - Customer lands on your site → you capture and store the
gclid - Customer converts offline (phone call, in-store, CRM closed-won)
- You upload the
gclid+ conversion value to Google Ads - Google Ads attributes the conversion to the original ad click
- Smart Bidding now knows which clicks lead to high-value conversions
The key: You must capture the gclid at the moment of the click and store it alongside the lead in your CRM.
Step 1: Capture the gclid
When someone clicks your ad, the landing URL contains ?gclid=ABC123.... You need to save this value.
Option A: Hidden Form Field
Add a hidden field to your lead form that auto-populates with the gclid from the URL:
<input type="hidden" name="gclid" id="gclid" value="">
<script>
const params = new URLSearchParams(window.location.search);
const gclid = params.get('gclid');
if (gclid) {
document.getElementById('gclid').value = gclid;
// Also store in cookie for multi-page journeys
document.cookie = 'gclid=' + gclid + '; max-age=2592000; path=/';
}
</script>
When the form submits, the gclid goes to your CRM along with the lead’s name and email.
Option B: Cookie-Based (Multi-Page)
If your conversion form isn’t on the landing page, store the gclid in a cookie:
// On page load
const params = new URLSearchParams(window.location.search);
const gclid = params.get('gclid');
if (gclid) {
document.cookie = 'gclid=' + gclid + '; max-age=2592000; path=/; SameSite=Lax';
}
// On form page, read from cookie
function getGclid() {
const match = document.cookie.match(/gclid=([^;]+)/);
return match ? match[1] : '';
}
Be careful that redirects don’t strip the gclid before your script can read it.
Option C: Enhanced Conversions for Leads
Instead of tracking gclid, send hashed email/phone:
- Enable Enhanced Conversions in Google Ads
- When a lead converts offline, upload the hashed email + conversion value
- Google matches the email to the ad click
This works even without gclid capture — but match rates are lower (~60-70% vs ~95% with gclid).
Step 2: Store in Your CRM
Your CRM needs a field for gclid. When a lead submits a form:
| CRM | How to Store |
|---|---|
| HubSpot | Hidden form field → auto-maps to contact property |
| Salesforce | Custom field on Lead/Contact object |
| Pipedrive | Custom field on Deal |
| Google Sheets | Column in your lead tracking sheet |
| Custom CRM | Add a gclid column to your leads table |
Step 3: Upload Conversions
When a lead converts (sale closed, payment received):
Option A: Manual CSV Upload
- Google Ads → Tools → Conversions → Uploads
- Download the template CSV
- Fill in:
Google Click ID,Conversion Name,Conversion Time,Conversion Value - Upload
Frequency: Weekly or bi-weekly. Don’t wait months — Google Ads needs timely data for bid optimization.
Option B: Google Ads API
Automate uploads via the Google Ads API. Your CRM triggers an API call when a deal closes:
POST /customers/{customer_id}/offlineUserDataJobs
{
"conversion_action": "customers/123/conversionActions/456",
"gclid": "ABC123...",
"conversion_date_time": "2026-04-01 14:30:00-07:00",
"conversion_value": 10000,
"currency_code": "USD"
}
Option C: Zapier/Make Integration
Connect your CRM to Google Ads via Zapier:
- Trigger: Deal status changed to “Closed Won”
- Action: Upload offline conversion to Google Ads
- Map: gclid, deal value, close date
Step 4: Create the Conversion Action
In Google Ads, create a conversion action specifically for offline imports:
- Tools → Conversions → + New conversion action
- Select Import → CRM, file uploads, or other data sources
- Select Track conversions from clicks
- Name: “Offline Sale” or “CRM Closed Won”
- Value: Use different values for each conversion (actual deal value)
- Count: “One” (per click, not per upload)
- Click-through window: 90 days (leads take time to close)
Smart Bidding Impact
This is where offline conversion import pays for itself:
Without import: Smart Bidding optimizes for form fills (your online conversion). A $5 form fill for a $50 product and a $5 form fill for a $50,000 enterprise deal look identical. Google bids the same for both.
With import: Smart Bidding knows the $50K deal came from a specific keyword, time of day, audience, and device. It bids more aggressively for similar clicks.
Result: Your lead quality improves because Google optimizes for revenue, not lead volume.
For Ecommerce: When to Use Offline Import
Even ecommerce businesses have offline conversions:
- Phone orders from customers who browsed online first
- In-store purchases after online research
- Subscription renewals (initial signup is online, renewal is backend)
- B2B wholesale orders (inquiry online, order via email/phone)
Timing Matters
Upload conversions within 1-7 days of the click for maximum Smart Bidding impact. Google’s algorithm weights recent conversions more heavily.
| Upload Delay | Smart Bidding Impact |
|---|---|
| Same day | Maximum |
| 1-3 days | Strong |
| 1-2 weeks | Moderate |
| 30+ days | Minimal (data is stale) |
Verification
After uploading:
- Google Ads → Tools → Conversions → Uploads → check upload status
- Look for “Applied” status (successfully matched to clicks)
- Check “Unable to process” rows for errors (invalid gclid, wrong date format)
- Allow 24-48 hours for conversions to appear in campaign reports
Related
- Google Ads conversion tracking setup — online conversion tracking
- GA4 and Google Ads discrepancy — why numbers differ
- Enhanced conversions — alternative to gclid-based matching
- Ad budget calculator — plan your spend based on offline + online conversions
Need help connecting your CRM to Google Ads? Start with a free tracking scan to verify your online conversion setup, then layer offline import on top.