"My ads generate phone calls and in-person visits — but Google Ads only sees what happens on the website." If your real results happen offline, your conversion data has a hole in it. Bidding optimizes toward what it can measure, and what it can't measure might as well not exist.
Offline conversion import closes that gap. You feed your CRM or POS data back into the ad platform so the algorithm can learn which clicks actually turned into revenue. But importing is only half the job — if the data doesn't arrive correctly, you're optimizing on garbage.
This guide covers the full loop: capture → import → verify.
1. What offline conversions are (and why they matter for bidding)
Online conversion tracking ends at the form submission, the click-to-call, or the add-to-cart. Everything after that — the sales call that closed, the store visit that converted, the lead that became a customer 30 days later — is invisible to the ad platform unless you send it back.
Why this matters beyond reporting:
| Without offline data | With offline data |
|---|---|
| Smart Bidding optimizes for form fills | Smart Bidding optimizes for actual closed deals |
| A campaign that generates junk leads looks great | Junk-lead campaigns get deprioritized automatically |
| ROAS is calculated on estimated value | ROAS reflects real revenue |
The gap is especially painful for lead-generation businesses where the real conversion (a signed contract, a qualified appointment) happens days or weeks after the click.
2. The two paths: click-based (GCLID) vs. Enhanced Conversions for Leads
Path A: GCLID-based upload
The classic method. When a user clicks your ad, Google appends a gclid parameter to the URL. You capture it, store it alongside the lead in your CRM, and later upload a file (or API call) mapping each gclid to a conversion action and value.
Requirements:
- Auto-tagging enabled in Google Ads (part of the standard Google Ads conversion tracking setup)
- A hidden form field or script that captures the
gclidfrom the URL and stores it with the lead record - An upload file (CSV) or API integration that sends
gclid + conversion name + conversion time + value
Common failure point: The gclid is captured on the landing page but lost during a redirect, a multi-step form, or a CRM integration that strips custom fields. Always verify the gclid is present in your CRM records before you attempt an import.
Path B: Enhanced Conversions for Leads
A newer method that removes the need to capture and store gclids. Instead, you send hashed first-party data (typically an email address) at the time of the online conversion, and later upload a file matching that same email to an offline outcome.
Advantages over GCLID:
- No hidden-field plumbing needed
- Works even when the gclid is lost (cross-device, delayed conversions)
- Easier to implement in most CRM workflows
Requirements:
- Enhanced Conversions for Leads enabled in Google Ads — see how to verify enhanced conversions once configured
- The Google tag or GTM sends hashed email at the time of the online action
- Your upload file includes the same email (Google hashes it on upload)
3. Industry use cases: where offline conversions matter most
Offline conversion import is critical for any business where the real outcome happens after the click. Here are the most common patterns:
| Industry | Online action | Offline conversion | What to import |
|---|---|---|---|
| B2B SaaS / Services | Form fill, demo request | Closed deal (weeks/months later) | Deal value at each pipeline stage (MQL → SQL → Won) |
| Real estate | Inquiry, viewing request | Property viewing → contract signed | Viewing completion and signed contract as separate conversion actions |
| Automotive | Test drive booking | Showroom visit → vehicle purchase | Test drive completed, purchase closed with vehicle value |
| Healthcare / Clinics | Appointment booking | Patient visit → treatment | Appointment attended (no-show rate is significant) |
| Education | Course inquiry | Enrollment → tuition paid | Enrollment completed with tuition value |
| Financial services | Application started | Loan/policy approved | Application approved with product value |
The key principle: Import the conversion that matters to your business, not just the first offline touchpoint. For B2B, importing "MQL created" is useful but importing "deal closed-won" is what transforms bidding quality. Many businesses import multiple stages — this gives Smart Bidding richer signals about which clicks produce leads that actually progress through the funnel.
4. How to import: step by step
Google Ads upload (manual CSV)
- In Google Ads, go to Goals → Conversions → Uploads
- Download the template CSV
- Fill in each row:
Google Click ID(orEmail),Conversion Name,Conversion Time,Conversion Value,Conversion Currency - Upload the file
- Check the "Upload status" column — it shows how many rows were processed, skipped, or failed
Google Ads API / scheduled imports
For ongoing imports, connect your CRM (Salesforce, HubSpot, etc.) via a direct integration or the Google Ads API. The data format is the same; the difference is automation. Most CRMs have a native or third-party connector that pushes closed-won deals back on a schedule.
GA4 Measurement Protocol
To import offline events into GA4, use the Measurement Protocol. Send an HTTP POST with the client_id (or user_id) and the event name/parameters. This is useful when you want offline data in GA4 reports, not just in Google Ads.
Key difference: GA4 imports use client_id or user_id, not gclid. You need to capture and store the GA4 identifier at the time of the online interaction.
Yahoo! Ads (LINEYahoo Ads) upload
Yahoo! Ads uses yclid (Yahoo Click ID) instead of gclid. The process mirrors Google's:
- Ensure auto-tagging is enabled in Yahoo! Search Ads
- Capture the
yclidparameter from the landing page URL (same approach as gclid) - In Campaign Manager, go to Tools → Conversion Measurement → Import → Upload
- Download the template and fill in:
YCLID,Conversion Name,Conversion Time,Value,Currency Code - Upload the file
Important limitation: Offline conversion import is only available for Yahoo! Search Ads. Yahoo! Display Ads does not support this feature — if you're running display campaigns on Yahoo!, offline conversions from those clicks cannot be imported.
Microsoft Ads upload
Microsoft Ads uses msclkid (Microsoft Click ID). The setup is similar:
- Create an offline conversion goal in Microsoft Ads under Tools → Conversion Goals
- Select "Offline" as the conversion type
- Capture
msclkidfrom landing page URLs and store in your CRM - Upload via CSV or API:
Microsoft Click ID,Conversion Name,Conversion Time,Value,Currency
Note: After creating the conversion goal, wait at least 2 hours before uploading data. Conversions may take up to 6 hours to appear in reporting.
Scheduled uploads with Google Sheets
For teams without API access or CRM integration, Google Ads supports scheduled uploads from Google Sheets:
- Create a Google Sheet using the conversion upload template format
- In Google Ads → Uploads → Schedule, link your Google Sheet
- Set the frequency (daily, weekly) and time
- Google Ads pulls from the sheet automatically on schedule
This is a practical middle ground between manual CSV uploads and full API automation — your team updates the sheet (or your CRM exports to it), and the upload happens automatically.
5. Common import errors and what causes them
| Error | Usual cause | Fix |
|---|---|---|
| "Click ID not found" | GCLID expired (>90 days), was never valid, or auto-tagging is off | Check auto-tagging; import within the conversion window |
| "Conversion action not found" | Typo in the conversion name, or the action doesn't exist | Copy the exact name from Goals → Conversions |
| "Duplicate" | Same gclid + conversion name + time already uploaded | Deduplicate your source data before uploading |
| "Invalid time format" | Time zone or format mismatch | Use the format yyyy-MM-dd HH:mm:ss+HHMM with the correct time zone |
| Rows processed but no conversions appear | Reporting lag (up to 24h for uploads) or the conversion action isn't set to "Primary" | Wait, then check if the action is included in the "Conversions" column |
6. Phone calls and store visits: related offline conversion types
Beyond CRM-based imports, two other offline conversion types are worth understanding:
Phone call conversions
Google Ads offers three levels of phone tracking:
| Method | What it measures | Accuracy |
|---|---|---|
| Click-to-call (tap tracking) | Taps on a phone number link | Low — roughly 1/3 of taps don't result in an actual call |
| Google forwarding number | Actual calls via a Google-assigned number displayed on your site/ad | Medium — measures real calls but uses a Google number, not yours |
| Third-party call tracking | Calls via a tracking service (e.g., CallRail, Call Data Bank) with dynamic number insertion | High — tracks caller, duration, recording, and can push data back as offline conversions |
If phone calls are a significant conversion path, click-to-call alone will overcount by ~30%. Consider call tracking tools that integrate with Google Ads as offline conversion imports — they send the actual call outcome (duration, lead qualification) back to the platform.
Store visit conversions
Google measures store visits automatically using smartphone location data — no manual import needed. Requirements:
- A Google Business Profile linked to your Google Ads account
- Multiple physical store locations
- Sufficient click volume and store visit volume (Google doesn't disclose exact thresholds)
Store visit conversions appear in your reports as a separate, modeled conversion type. You can't upload store visits manually — this is a Google-only feature based on aggregated, anonymized location signals.
7. How to verify your offline imports are actually working
Importing without verifying is the same trap as installing a tag without checking it fires. Here's how to confirm each stage — and for a broader view of all verification steps across platforms, see our conversion tracking verification checklist.
Stage 1: Is the identifier captured?
Before any import, confirm the gclid (or email) is actually stored in your CRM. Pull 10 recent leads and check:
- Is the gclid field populated? (If blank, your capture script is broken.)
- Does the email in the CRM match what was submitted on the form? (If it was normalized or changed, the hash won't match.)
Stage 2: Did the upload succeed?
In Google Ads → Uploads, check:
- Rows processed should match rows in your file
- Rows with errors should be 0 (or near it)
- Click into errors to see which rows failed and why
Stage 3: Do conversions appear in reporting?
After a successful upload, conversions appear in Google Ads reporting within 24 hours (sometimes longer for the first upload). Check:
- The specific conversion action shows a non-zero count
- The "Source" column shows "Import" or "Upload"
- The conversion times in reports match what you uploaded (adjusting for time zones)
Stage 4: Is attribution correct?
The ultimate check: do the imported conversions attribute back to the right campaigns, ad groups, and keywords? In Google Ads, segment by conversion action and verify that the offline conversions distribute across campaigns in a way that makes sense given your business knowledge.
8. GA4-specific verification
If you're importing via the Measurement Protocol into GA4:
- Check DebugView (Admin → DebugView) — events sent with
debug_mode=1appear in real time - Check Realtime report — your event should appear within seconds
- Check the Events report after 24–48 hours for full processing
- Verify the
client_idoruser_idin your import matches what GA4 captured during the original session (mismatches silently create orphan events)
Frequently asked questions
Q. How soon after the click can I upload an offline conversion? A. You can upload anytime within the conversion window you've set (default 30 days for most actions, up to 90 days). But the sooner you upload, the sooner Smart Bidding can learn from it.
Q. Can I update the value of a previously uploaded conversion? A. Yes — upload the same gclid with an "adjustment" action type. This is useful when a deal's value changes after the initial close (e.g., upsell, cancellation).
Q. My CRM doesn't capture gclid. Is it too late? A. Switch to Enhanced Conversions for Leads — it uses email instead of gclid, and you likely already have email in your CRM. You'll need to add the enhanced conversion tag to your site, but you won't need to retrofit gclid capture.
Q. Offline conversions appeared in Google Ads but not in GA4 (or vice versa). A. They use different import mechanisms. Google Ads uses gclid-based uploads or Enhanced Conversions for Leads; GA4 uses the Measurement Protocol with client_id/user_id. Importing into one doesn't automatically populate the other.
Conclusion: close the loop, then verify it stayed closed
Offline conversion import turns your ad platform from "optimizing for clicks and form fills" into "optimizing for actual business results." But the chain has more links than online tracking — CRM fields, upload schedules, identifier matching — and each link can quietly break.
The verification habit is the same as with any conversion tracking: don't assume it works because you set it up once. Periodically check that gclids or emails are still being captured, that uploads are processing without errors, and that the conversions showing up in reports match your source of truth.
ConversionOK can monitor your conversion tags and verify that the signals your site sends — including the identifiers needed for offline import — are actually reaching the ad platform, without requiring you to click your own ads or rely on your office network.