10+ years · 3x UK Search Awards

Blog

Offline Conversion Import for B2B: Connect Google Ads to Your CRM

Blog |Tracking|2026-07-06|13 min

Tracking · 2026-07-06 · 13 min

TL;DR

Offline Conversion Import (OCI) connects Google Ads to your CRM and tells the algorithm which leads actually became paying customers — not just which ones filled out a form. For B2B, this is the difference between a campaign that optimizes toward cheap, unqualified leads and one that learns to recognize real buyers. You need either GCLID tracking or Enhanced Conversions for Leads, plus a CRM that can export closed deals.

2

Import mechanisms

3

CRM setups (HubSpot/SF/Pipedrive)

90

Day attribution window

Closed-won

Primary conversion action

I work with a fair number of B2B clients, and I see the same mistake at the start of nearly every engagement: the account is set up to optimize toward "leads," and the only conversion Google sees is a completed form on the website. The algorithm then does exactly what it's told — bring in as many people as possible who will fill out a form, at the lowest possible cost.

The problem is that "filled out a form" and "became a customer" are often not the same thing. In B2B sales, there's a sales cycle between the lead and the closed deal that can run for weeks or months, moving through MQL (marketing qualified lead), SQL (sales qualified lead), and eventually Closed-won or Closed-lost. Google Ads doesn't see any of that — unless you tell it.

This guide covers both offline conversion import mechanisms, a concrete setup per CRM (HubSpot, Salesforce, Pipedrive), how to value each lead stage correctly, and the mistakes that most often quietly wreck the accuracy of the whole system.


The problem: optimizing for lead volume

When the only conversion in an account is "form submission," Smart Bidding does something perfectly logical — and perfectly wrong. It hunts for the cheapest possible forms. The algorithm has no way of knowing whether the form was filled out by a procurement director at a 200-person company or a student looking for a free trial for a class assignment. Both count as "1 conversion."

The consequence is predictable. Cost-per-lead drifts down over time — which looks like a win in the report. But once sales starts calling those leads, the qualification rate drops. Marketing reports "record lead volume," sales complains "these leads are worthless," and both teams are staring at the exact same numbers reaching opposite conclusions.

The root problem isn't the campaign, the targeting, or the budget — it's the signal you're feeding the algorithm. As long as the conversion action is "any form," you have no way to teach Google to tell good traffic from bad. Offline conversion import exists precisely to fix this signal problem.

"Optimizing for form volume with no feedback loop on quality is like paying a salesperson commission for every phone call, regardless of whether the customer bought anything."

Why this shows up especially in B2B

In eCommerce, the purchase happens immediately — Google sees the transaction within minutes and learns directly from it. In B2B, the real value of a lead is only known once sales has qualified it, run a demo, sent a proposal, and negotiated — a process that takes days or months. Without a feedback loop, Google never gets that information and stays stuck optimizing toward the top of the funnel.


Two mechanisms: GCLID vs Enhanced Conversions for Leads

There are two ways to connect offline business outcomes back to Google Ads clicks. They can be used separately or together — in practice I recommend both, since they cover each other's blind spots.

Mechanism 1

GCLID-based import

The classic approach. The Google Click ID is captured from the URL parameter on arrival, stored in a hidden form field, and travels with the lead into the CRM. Later, that same value is sent back to Google Ads along with the deal's outcome.

Mechanism 2

Enhanced Conversions for Leads

A newer approach based on a hashed email or phone number from the form, without relying on GCLID. More resilient against blocked cookies and long sales cycles, where a GCLID cookie can expire before the deal ever closes.

CriteriaGCLID-based importEnhanced Conversions for Leads
What's neededHidden GCLID field in the form + a CRM field to store itHashed email/phone (SHA-256) sent via the Google Ads API or GTM
AdvantagesSimple to implement, well documented, works natively with CSV uploadNot cookie-dependent, still works after GCLID expires, better match rate on longer cycles
LimitationsGCLID cookie has a lifespan (default 90 days in Google Ads); long B2B cycles can outlive itRequires exact data formatting and hashing; match rate depends on data quality of email/phone
Privacy noteGCLID is a technical identifier, but tracking cookie consent is still requiredEmail/phone are personal data — you need a lawful basis for processing and must hash BEFORE sending, never plain text

Recommendation

For B2B with a sales cycle longer than 2-3 months, I recommend running both mechanisms in parallel. GCLID import as primary, Enhanced Conversions for Leads as a backup that catches deals where the GCLID cookie has already expired. This meaningfully improves match rate over the long run.


HubSpot setup

HubSpot has a native Google Ads integration that simplifies most of this work, provided Marketing Hub is in place and deal stages are configured properly.

1
Connect HubSpot and Google Ads — Marketing → Ads → Connect account. Select the Google Ads CID and authorize access.
2
Enable automatic GCLID capture — HubSpot's tracking code automatically stores hubspotutk and GCLID in the contact property "Google Ad Click ID" once the integration is active. Confirm the tracking code is present on every landing page.
3
Define deal stages as conversions — In Ads → Conversions → Deals & Contacts, map which deal stage changes (e.g., "Closed Won") get sent back to Google Ads as an offline conversion event.
4
Pass conversion value per deal — Use the Deal Amount property so the actual deal value is passed automatically, not a fixed estimate.
5
Create matching conversion actions in Google Ads — Tools → Conversions → New conversion action → Import → HubSpot. Mark "Primary" for Closed-won, "Secondary" for MQL/SQL.
6
Test with one deal — Run a test contact through the entire pipeline and confirm the conversion appears in Google Ads (usually a 3-24h delay).

Note

The native integration only works if the HubSpot tracking code was installed BEFORE the lead arrived on the site. Contacts created before the integration went live won't have a GCLID available — offline import won't work retroactively for them.


Salesforce setup

Salesforce also has a native Google Ads integration (Marketing Cloud Connect, or a direct Google Ads-Salesforce connector), but it requires a bit more admin work around custom fields.

1
Create a custom GCLID field on the Lead and Opportunity objects — Setup → Object Manager → Lead → Fields → New (Text, 255 characters). Repeat for Opportunity since leads convert into it.
2
Capture GCLID at form submission — Your Web-to-Lead form or connector (Pardot, Zapier) must pass the GCLID from the URL parameter or hidden field into the corresponding Salesforce field when the Lead is created.
3
Make sure GCLID survives Lead-to-Opportunity conversion — Set field mapping in Lead Conversion Settings so the GCLID field copies from the Lead to the Opportunity — otherwise it's lost at the exact moment the deal gets closest to closing.
4
Connect Google Ads to Salesforce (native connector or API) — Without Marketing Cloud, use the Google Ads API or a third party (e.g., Zapier/Workato) for a regular export of Opportunity Stage changes.
5
Automate a scheduled export — Build a report pulling GCLID + Stage + Amount + Close Date for Opportunities changed in the last X days, exported as CSV or via API on a daily/weekly basis.

Most common trap

The team forgets to map the GCLID field in Lead Conversion Settings, so the value is lost the moment a lead converts into an Opportunity. This is the single most common reason Salesforce offline import "doesn't work" — the data was there, it just got dropped during the object conversion.


Pipedrive setup

Pipedrive has no native Google Ads integration for offline conversions, so you need one of two approaches — automation via Zapier/Make, or a manual scheduled CSV upload. For smaller teams without an automation budget, the CSV approach works perfectly well.

Option A — Zapier or Make automation

  • Trigger: Deal stage changed to "Won" in Pipedrive
  • Zapier/Make reads a custom field holding the GCLID value (which you've previously created in Pipedrive and populated via a web form/hidden field)
  • Action: Google Ads — Upload Click Conversion, with GCLID, conversion action name, conversion time, and deal value from Pipedrive
  • Advantage: near real-time, no manual work once the initial setup is done

Option B — Scheduled CSV upload

  • Create a "Google Click ID" custom field at the Deal level in Pipedrive, populated via a web-to-lead form
  • Weekly or monthly, export the "Deals won in last 7/30 days" filter as CSV with columns: Google Click ID, Conversion Name, Conversion Time, Conversion Value, Conversion Currency
  • In Google Ads: Tools → Conversions → Uploads → CSV upload, match the columns and submit the file
  • Downside: lag versus real-time, depending on upload frequency — Google recommends uploading within 90 days of the click

Practical tip

If you're just starting out and don't have a Zapier/Make budget yet, start with a weekly CSV upload — it's 15 minutes of work a week, and it's enough to get the algorithm learning. Add automation later once the process has proven itself.


Valuing stages — MQL, SQL, Closed-won

One of the biggest mistakes is treating every pipeline stage as an identical conversion with an identical value. In practice, MQL, SQL, and Closed-won carry completely different weight — and your Google Ads conversion actions should reflect that.

Stage 1

MQL (Marketing Qualified Lead)

Set as a Secondary/observation conversion with a low fixed value. Useful as an early signal while you don't yet have enough Closed-won data, but it must not be the primary optimization target.

Stage 2

SQL (Sales Qualified Lead)

Also Secondary, but with a higher fixed value than MQL. This marks the moment sales confirmed the lead is relevant — a stronger quality signal than the form alone.

Stage 3

Closed-won

The Primary conversion action for bidding. Value = actual contract value (Deal Amount), not an average. This is the only signal that directly tells the algorithm "this is a real customer."

How to set up conversion actions in Google Ads

1
Create three separate conversion actions — "MQL — Offline", "SQL — Offline", "Closed Won — Offline". Separate names make reporting and later debugging much easier.
2
Mark only Closed-won as "Primary" — In Conversions → Settings, only Closed Won feeds the "Conversions" column that Smart Bidding uses for optimization. MQL and SQL stay "Secondary" (observation only).
3
Set a realistic attribution window — For a long B2B sales cycle, use the 90-day click-through window (the maximum Google Ads allows), not the 30-day default.
4
Only move to Target CPA/ROAS once Closed-won has enough volume — While you have fewer than roughly 15-20 Closed-won conversions per month, stay on Maximize Conversions with SQL as an observation signal.

Rule for switching optimization targets

Don't flip optimization from "form" straight to "Closed-won" overnight. Do it in stages — first add MQL/SQL as observation while data accumulates, then introduce Closed-won as primary only once you have at least a few months of historical closed-deal data.


Common mistakes with offline import

These are the mistakes I see repeated in almost every account where offline conversion import is newly introduced. Each one quietly wrecks the system's accuracy, even when it looks like everything's "working."

Mistake #1

Double import — the same deal is sent twice (e.g., via both CSV and a Zapier automation)

Fix: Define one import channel per conversion action. If you introduce automation, turn off the parallel manual upload for the same deals. Google Ads deduplicates by GCLID + conversion action + conversion time, but only if all parameters match exactly — small timing differences can create duplicates.

Mistake #2

Attribution window too short for a long B2B sales cycle

Fix: If your average sales cycle is 60-90+ days but the conversion window is set to the 30-day default, the system systematically loses Closed-won deals that originated from older clicks. Set the window to the 90-day maximum and check your average sales cycle from the CRM to gauge how much still falls outside that range.

Mistake #3

Every value is $1 or a fixed number — the algorithm is "blind" to the difference between a small and large deal

Fix: Always pass the actual contract value (Deal Amount) for Closed-won, never a fixed or symbolic value. Without a value differential, Target ROAS can't do its job — the algorithm treats a $500 deal and a $50,000 deal identically.

Mistake #4

Forgotten consent — GCLID/email is captured and sent without a lawful basis

Fix: Before enabling any offline import mechanism, check the site's consent banner and privacy policy — users need to be informed their data is used for advertising purposes. For Enhanced Conversions for Leads, hashing must happen BEFORE sending the data, never after, and you should never send plain-text email/phone.

Mistake #5

GCLID doesn't survive every step of the CRM pipeline (e.g., lost during Lead-to-Opportunity conversion)

Fix: Run a single test lead end-to-end, from ad click to Closed-won in the CRM, and confirm the GCLID field stays populated at every step. This is a particularly common failure point in Salesforce during Lead-to-Opportunity conversion.


Frequently asked questions

Do I need both GCLID and Enhanced Conversions for Leads, or is one enough?
One mechanism is enough to get started, but for B2B with a longer sales cycle I recommend running both in parallel. The GCLID cookie has a limited lifespan (up to 90 days in Google Ads), so deals that close after that can miss attribution if you rely on GCLID alone. Enhanced Conversions for Leads, based on a hashed email/phone, catches those "missed" conversions since it doesn't depend on cookies.
How quickly should I upload offline conversions after a deal closes?
Google recommends uploading within a few days of the status change, but technically it accepts conversions as long as the original click falls within your configured conversion window (a maximum of 90 days from the click, not from the upload). In practice, a weekly upload is a solid balance between data freshness and operational overhead — a monthly upload already noticeably slows down algorithm learning.
What if my CRM has no native Google Ads integration?
There are three options, from simplest to most flexible: (1) a manual scheduled CSV upload directly in the Google Ads UI, (2) automation via Zapier or Make connecting virtually any CRM to the Google Ads API, or (3) a direct integration through the Google Ads API if you have developer support. For most smaller teams, a weekly CSV upload is more than enough to get started.
Does offline conversion import violate privacy regulations like GDPR?
Not by itself, but you need a lawful basis for processing data for advertising purposes (usually consent) and you must implement the technical safeguards correctly. For Enhanced Conversions for Leads, always hash email and phone (SHA-256) BEFORE sending to Google — never send plain-text personal data. Consult someone familiar with the regulations in your jurisdiction (GDPR in the EU, or the equivalent data protection law elsewhere) before implementation, especially when handling sensitive B2B data.
How soon will I see better results after introducing offline import?
Not immediately. The algorithm needs time to accumulate enough Closed-won signal to change its behavior — usually a few weeks to a couple of months, depending on how long your sales cycle is and your deal volume. Treat the first few weeks as a data-collection phase, not a results phase. Switching to Target CPA/ROAS too early, before there's enough Closed-won volume, often causes more harm than good.

Need help connecting Google Ads to your CRM?

I set up offline conversion import for B2B clients — from GCLID/Enhanced Conversions configuration to integration with HubSpot, Salesforce, or Pipedrive pipelines. The result: an algorithm that learns from real business outcomes, not just completed forms.

Schedule a free consultation
Last updated: July 6, 2026

Free video audit

Get a Personalised Video Audit of Your Google Ads Account

I'll record a 15-minute walkthrough of your campaigns showing exactly where you're losing money and what to fix first.

Book a free consultation

Free personalised video audit

Want a video walkthrough of your Google Ads account?

I'll personally record a 15-minute video walking through your campaigns, showing you where you're losing money and giving you 3 specific things to fix immediately. No sales pitch — just value.

What you get:

  • 15-min personalised video analysis
  • 3 specific quick wins to implement
  • Budget & bidding recommendations

Requirements:

  • Ad spend: €1,500+/month (or £1,500+)
  • Active account for 3+ months
  • eCommerce or Lead Gen business

Limited to 5 audits per month. Response within 48 hours.