Google Ads Offline Conversion Imports: Complete Setup Guide for 2026

Table Of Contents
TL;DR: Offline conversion imports let you feed CRM deal data back into Google Ads so Smart Bidding optimises for actual revenue, not just form fills. Accounts that close the loop this way see CPL drop 15-30% once the algorithm has 30+ offline conversions per month. If you need a reliable ad account to run this on, check verified Google Ads accounts β pre-warmed and ready to track.
| β Right fit if | β Wrong fit if |
|---|---|
| You have a CRM or sales pipeline | You sell entirely online with instant checkout |
| Sales cycle is longer than 1 day | You have fewer than 30 leads/month |
| You run lead gen, finance, legal, B2B | You only use Display / YouTube without Search |
| You want Smart Bidding on real revenue | Your CRM cannot export CSVs or hit APIs |
Offline conversion imports (OCI) let Google Ads connect what happens after the click β phone calls answered, deals closed, contracts signed β to the original keyword and campaign that drove the lead. Without this data, Smart Bidding is flying blind, optimising for cheap form fills instead of profitable customers.
What Changed in Google Ads Offline Conversions in 2026
- Enhanced Conversions for Leads is now the recommended path β Google deprecated the manual GCLID-only approach for new advertisers; Enhanced Conversions hashes first-party data automatically, reducing upload errors
- GCLID auto-tagging is required by default for all new accounts created after January 2026; manually tagged URLs (
utm_sourceonly) no longer pass GCLID to CRM automatically - Conversion API (GAPI) for offline data is in open beta β REST API endpoint replacing CSV uploads for high-volume advertisers
- 30-day GCLID expiry window remains unchanged but Google now warns in the UI when you attempt to import conversions older than 25 days
- Data-driven attribution (DDA) is now the default model for all new conversion actions; last-click still available but no longer recommended
How Offline Conversion Imports Actually Work
When someone clicks your ad, Google appends a GCLID (Google Click ID) to the landing page URL β a parameter like gclid=Cj0KCQjw.... Your CRM must capture and store this value alongside the lead record. When a deal closes, you export a CSV with three required columns and upload it to Google Ads.
Step 1: Enable Auto-Tagging
Go to your Google Ads account β Settings β Account Settings β Auto-tagging. Confirm "Tag the URL that people click through from my ad" is checked. If you built your landing page on a redirect chain, check that GCLID survives all redirects by testing with the URL ?gclid=test123 and confirming it appears in your CRM.
β οΈ Important: If your website uses a redirect (e.g. short link β landing page) the GCLID will be stripped unless you either (a) add
?gclid={gclid}as a ValueTrack parameter in your final URL or (b) configure your redirect to pass all query parameters. Missing GCLIDs mean zero attribution data β fix this before setting up the conversion action.Related: How to Set Up Offline Conversions and Link CRM Sales to Google Ads
Step 2: Create an Offline Conversion Action
In Google Ads: Goals β Conversions β New conversion action β Import β CRM or other data source. Name it something specific: "CRM: Qualified Lead", "CRM: Signed Contract". Set:
- Category: Lead or Purchase
- Value: Use different values for each conversion (if deal size varies), or a fixed value
- Count: One (for revenue) or Every (for tracking all events)
- Click-through conversion window: 30 days (default; can extend to 90 days for long B2B cycles)
- Attribution model: Data-driven (default in 2026)
Step 3: Capture GCLID in Your CRM
Add a hidden field gclid to every landing page form. The JavaScript snippet:
function getParam(p) {
var match = RegExp('[?&]' + p + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
document.getElementById('gclid_field').value = getParam('gclid') || ''; Store the GCLID value in a dedicated CRM field. Do not overwrite it β if a lead returns to the site, you want the original click's GCLID, not a new session.
Step 4: Prepare and Upload the CSV
The required CSV columns are:
| Column | Format | Example |
|---|---|---|
Google Click ID | String | Cj0KCQjw... |
Conversion Name | Exact match to action name | CRM: Qualified Lead |
Conversion Time | yyyy-MM-dd HH:mm:ss timezone | 2026-04-10 14:30:00 +0200 |
Conversion Value | Decimal | 850.00 |
Conversion Currency | ISO 4217 | USD |
Upload via Goals β Conversions β Uploads β Upload file. Processing takes 3-24 hours. Google will show "Successful conversions" count in the upload history.
Need warmed Google Ads accounts that already have conversion tracking history? Browse verified Google Ads accounts β accounts with existing spend history pass Google's trust checks faster when importing offline data.
Frequency: How Often to Upload
| Volume | Recommended frequency |
|---|---|
| < 50 conversions/month | Weekly manual CSV upload |
| 50-500/month | Daily automated CSV via script |
| 500+/month | Zapier/Make webhook β Sheets β Ads API or Conversion API |
For automation, use Google Sheets + Apps Script to export from your CRM nightly and push to the Google Ads Conversions API. The API endpoint is POST /v18/customers/{customer_id}/conversionUploads:uploadClickConversions.
β οΈ Important: Smart Bidding needs a minimum of 30 offline conversions per month to stabilise. With fewer, the algorithm over-weights online micro-conversions. According to Google, tROAS requires 50+ conversions per month to perform reliably. Plan your upload frequency so the algorithm always sees fresh data within its learning window.
Related: Google Ads Enhanced Conversions: Setup, Hashing, and Benefits in 2026
Troubleshooting Common Upload Errors
"No matching conversion action" β The conversion name in your CSV doesn't exactly match the action name in Google Ads. Names are case-sensitive.
"GCLID expired" β You're uploading a conversion where the click happened more than 30 days before conversion time. Extend the conversion window to 90 days in the conversion action settings.
"Invalid GCLID" β The GCLID was not captured correctly in your CRM. Check your hidden field implementation on mobile β some form builders strip query parameters on mobile redirects.
Related: How to Separate the Funnel: Forms, Calls, Chats and Not Lose Attribution in Google Ads
Low match rate (< 50%) β Usually caused by: (a) users disabling cookies before clicking, (b) GCLID stripped by redirect, or (c) CRM not saving GCLIDs for all form submissions. A match rate of 75-85% is typical.
Case: Lead gen agency, B2B SaaS client, $3,000/month Google Ads budget. Problem: tCPA campaigns were hitting $45 CPL but only 12% of those leads converted to paid customers. Smart Bidding kept optimising for the cheapest leads, not the most qualified. Action: Implemented GCLID capture in HubSpot hidden field, set up weekly CSV upload of "MQL" and "Deal Closed" conversion events with different values ($50 MQL, $500 Deal). Result: Within 6 weeks, Smart Bidding shifted spend toward keywords generating MQLs. Deal volume up 34%, cost per deal down from $380 to $255. tROAS reached 4.2x on deal value.
Scaling with Enhanced Conversions for Leads
Enhanced Conversions for Leads is Google's evolution of manual OCI. Instead of matching on GCLID, it hashes user-provided data (email, phone) and matches it to Google's signed-in user base. This catches conversions where the GCLID was lost.
Setup: In Goals β Conversions β your conversion action β Enhanced conversions for leads, toggle on. Add the Google Tag snippet with user_data parameters populated from your form fields.
According to Google, Enhanced Conversions for Leads improve measurement coverage by an average of 5-15% compared to GCLID-only uploads.
Case: Solo media buyer, e-commerce finance offers, $200/day budget. Problem: GCLID capture rate was only 58% because mobile users hit a redirect before landing. Lost 42% of attribution. Action: Enabled Enhanced Conversions for Leads alongside existing GCLID uploads. Passed hashed email from form submit event. Result: Attributed conversions increased 28%. Smart Bidding got enough signal to exit learning mode in 3 weeks instead of 6. CPL dropped from $72 to $54.
Automated Upload via Google Ads API
For teams processing 1,000+ conversions monthly, manual CSV uploads are a bottleneck. Use the ClickConversion object in the Google Ads API:
from google.ads.googleads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_storage()
conversion_upload_service = client.get_service("ConversionUploadService")
click_conversion = client.get_type("ClickConversion")
click_conversion.gclid = "Cj0KCQjw..."
click_conversion.conversion_action = f"customers/{customer_id}/conversionActions/{conversion_action_id}"
click_conversion.conversion_date_time = "2026-04-10 14:30:00+02:00"
click_conversion.conversion_value = 850.0
click_conversion.currency_code = "USD" The API allows bulk uploads of up to 2,000 conversions per request. Error handling is critical β log every rejected GCLID and re-queue it after fixing the cause.
Quick Start Checklist
- [ ] Enable auto-tagging in Google Ads account settings
- [ ] Add hidden
gclidfield to all landing page forms - [ ] Test GCLID capture: submit test form, verify GCLID appears in CRM record
- [ ] Create offline conversion action in Google Ads (Goals β Conversions β Import)
- [ ] Set conversion window to 30+ days (90 days for B2B sales cycles)
- [ ] Run first manual CSV upload with last 30 days of CRM data
- [ ] Verify upload: check "Successful conversions" count β₯ 80% of uploaded rows
- [ ] Set upload schedule (weekly minimum, daily preferred)
- [ ] Monitor: after 4 weeks, check if Smart Bidding shows "Learning" or "Active"
Ready to scale your lead gen campaigns? Get verified Google Ads accounts with clean history β new accounts that haven't been flagged by Google's trust score system start converting attribution data faster.































