Google Ads Offline Conversion Import: Track Phone Calls and In-Store Sales

Not all conversions happen online. Import phone calls, in-store purchases, and CRM-closed deals into Google Ads so Smart Bidding can optimize for real revenue.

Google Adsoffline conversionsCRMlead genSmart Biddingconversion import

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

  1. Customer clicks your Google Ad → Google assigns a gclid (Google Click ID)
  2. Customer lands on your site → you capture and store the gclid
  3. Customer converts offline (phone call, in-store, CRM closed-won)
  4. You upload the gclid + conversion value to Google Ads
  5. Google Ads attributes the conversion to the original ad click
  6. 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.

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:

  1. Enable Enhanced Conversions in Google Ads
  2. When a lead converts offline, upload the hashed email + conversion value
  3. 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:

CRMHow to Store
HubSpotHidden form field → auto-maps to contact property
SalesforceCustom field on Lead/Contact object
PipedriveCustom field on Deal
Google SheetsColumn in your lead tracking sheet
Custom CRMAdd a gclid column to your leads table

Step 3: Upload Conversions

When a lead converts (sale closed, payment received):

Option A: Manual CSV Upload

  1. Google Ads → Tools → Conversions → Uploads
  2. Download the template CSV
  3. Fill in: Google Click ID, Conversion Name, Conversion Time, Conversion Value
  4. 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:

  1. Tools → Conversions → + New conversion action
  2. Select Import → CRM, file uploads, or other data sources
  3. Select Track conversions from clicks
  4. Name: “Offline Sale” or “CRM Closed Won”
  5. Value: Use different values for each conversion (actual deal value)
  6. Count: “One” (per click, not per upload)
  7. 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 DelaySmart Bidding Impact
Same dayMaximum
1-3 daysStrong
1-2 weeksModerate
30+ daysMinimal (data is stale)

Verification

After uploading:

  1. Google Ads → Tools → Conversions → Uploads → check upload status
  2. Look for “Applied” status (successfully matched to clicks)
  3. Check “Unable to process” rows for errors (invalid gclid, wrong date format)
  4. Allow 24-48 hours for conversions to appear in campaign reports

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.