I manage Google Ads for B2B SaaS clients at $120K monthly spend. For the first three months on one account, everything looked fine. CPA was hitting target. Conversion volume was growing. The dashboard said we were winning.
Then I pulled the MQL-to-SQL data from HubSpot. 34% of leads were qualifying. The sales team was spending two-thirds of their time on conversations that were never going to close. CAC was technically hitting target because we were measuring cost per form fill — not cost per customer.
We were optimising for the wrong thing. And Google's Smart Bidding algorithm was getting very good at finding exactly what we asked for — cheap leads — regardless of whether those leads could ever buy.
The fix was offline conversion import. Here is exactly what it is, why it works, and how to implement it.
What happened after implementing offline conversion import on this account:
Cost per lead went up 28%. Cost per customer went down 31%. These two facts are not contradictory — they are the same fact. When Smart Bidding stops finding cheap unqualified leads and starts finding expensive qualified buyers, your CAC falls even though your CPL rises. Every B2B SaaS team optimising Google Ads toward CPL is measuring the wrong number.
Why Smart Bidding produces low-quality leads by default
Google's Smart Bidding algorithm is exceptional at one thing — finding the cheapest path to whatever conversion signal you give it. If you tell it to optimise toward form fills, it finds form fillers. It does not distinguish between a VP of Marketing at a 200-person SaaS company and a student downloading a whitepaper. Both filled a form. Both count as conversions.
Over time the algorithm gets better and better at finding the lowest-friction path to your conversion action. In B2B SaaS, the lowest-friction path is almost never your ideal customer. Your ideal customer has budget approval processes, procurement involvement, and a real evaluation timeline. Your non-ideal customer fills forms quickly, asks no questions, and never buys.
Smart Bidding optimises toward the second group unless you explicitly tell it otherwise.
"Stop telling Google to find leads. Start telling it to find revenue. The algorithm cannot tell the difference between a $50,000 deal and a form fill that goes nowhere — unless you show it."
What offline conversion import actually does
Offline conversion import creates a feedback loop between your CRM and Google Ads. It works in three steps.
GCLID captured on form submission
When someone clicks your Google Ad and fills a form on your website, a unique identifier called a GCLID (Google Click Identifier) is appended to the URL. A hidden field on your form captures this GCLID and stores it in HubSpot against the contact record. This is the permanent link between the ad click and the person.
Lead moves through CRM pipeline
The lead enters your HubSpot pipeline. Sales qualifies them. Some become SQLs. Some become opportunities. Some close as customers with a real deal value — $15,000, $50,000, $120,000. HubSpot tracks all of this against the original contact record — including the GCLID stored at step one.
Closed-won deal value sent back to Google
When a deal reaches Closed Won in HubSpot, a workflow fires and sends three data points back to Google Ads via the offline conversion API — the original GCLID, the conversion action name, and the deal value. Google matches this to the original click and marks it as a high-value conversion event. Smart Bidding now knows which click patterns generate $50K deals.
Connect Google Ads to HubSpot in Settings → Integrations → Google Ads. Enable auto-tagging in your Google Ads account settings. Create a HubSpot workflow triggered by Deal Stage = Closed Won. Add the Google Ads offline conversion action as a workflow step. HubSpot handles the GCLID capture and conversion import automatically. Basic implementation takes under two hours.
Before and after — what changes in campaign performance
| Metric | Before (Form Fill Signal) | After (Revenue Signal) | Direction |
|---|---|---|---|
| Cost per lead (CPL) | $87 | $111 | ↑ +28% |
| MQL-to-SQL rate | 34% | 45% | ↑ +32% |
| Cost per customer (CAC) | $256 | $177 | ↓ −31% |
| Average deal value | $12,400 | $16,800 | ↑ +35% |
| Payback period | 4.1 months | 3.2 months | ↓ −22% |
| Lead volume | Baseline | −18% vs baseline | ↓ −18% |
Lead volume dropped 18%. Every other number that matters to the CFO and COO improved. This is the conversation you need to have before implementing — lead volume will decline and CPL will increase. If your COO measures marketing performance on lead count, this implementation will look like failure before it looks like success.
Before you implement offline conversion import, align with your COO and sales director on what success looks like. "CPL will increase. Lead volume will drop by 15 to 25% initially. CAC will improve within 60 to 90 days. SQL rate will improve within 30 to 45 days." Set these expectations in writing before you change anything. Without this alignment, a correct implementation looks like a failing campaign to anyone watching lead volume.
Weighted conversion values — the precision layer
Basic offline conversion import sends the same signal for every closed-won deal. The precision layer is weighted conversion values — assigning different values to different conversion actions based on their likelihood of generating revenue.
For most B2B SaaS accounts, two conversion actions matter most:
Demo request
High intent. Buyer has identified a problem, evaluated options, and is ready to see your product. Close rate from demo to customer is typically 20 to 30% in B2B SaaS. Assign a conversion value equal to your average deal size multiplied by your demo-to-close rate. If average deal size is $15,000 and demo close rate is 25% — demo request value is $3,750.
Standard form fill (content download, contact form)
Lower intent. Buyer is researching or evaluating. Close rate from form fill to customer is typically 5 to 10%. Using the same example — form fill value is $750 to $1,500. Assign $1,000 as a starting point and calibrate after 90 days of data.
# Weighted conversion values — starting framework
# Adjust based on your actual CRM close rate data
demo_request_value = avg_deal_size × demo_close_rate
# Example: $15,000 × 0.25 = $3,750
form_fill_value = avg_deal_size × form_close_rate
# Example: $15,000 × 0.07 = $1,050
ratio = demo_value / form_fill_value
# Example: $3,750 / $1,050 = 3.57x
# Demo request is worth ~3.5x a standard form fill
# Configure this ratio in Google Ads conversion settings
When Smart Bidding sees that demo request conversions are worth 3.5x standard form fills, it prioritises the queries and audiences that generate demo requests. Your ad copy, landing pages, and keyword targeting all shift — organically — toward the buyers who are ready to see the product.
Common implementation mistakes
Mistake 1 — Using offline import as a secondary conversion
Setting closed-won revenue as a secondary conversion means Smart Bidding observes it but does not optimise toward it. The primary conversion (form fill) still drives decisions. Use the secondary setting only for the first 30 to 45 days while you accumulate conversion volume data. Once you have 30 to 50 closed-won imports per month, promote it to primary and demote form fills to secondary.
Mistake 2 — Insufficient conversion volume
Smart Bidding needs 30 to 50 conversions per month per campaign to learn reliably. If your account generates 8 to 10 closed deals per month total, offline import signal is too thin for reliable optimisation. In this case use weighted lead scoring in HubSpot to create a mid-funnel conversion signal — SQL qualification — as the Google Ads conversion action instead of waiting for closed-won data.
Mistake 3 — Not measuring the right lag window
B2B SaaS sales cycles run 60 to 180 days. A click from January may not become a closed-won deal until May. Google Ads looks back 90 days for offline conversion data by default. For longer sales cycles, extend your conversion window in Google Ads settings to 180 days to capture the full pipeline lag.
Go to HubSpot. Find 10 recent leads from paid search. Check their contact records for a GCLID field. If fewer than 7 of 10 have a GCLID stored — your capture is broken. Most common cause: form does not have a hidden GCLID field, or auto-tagging is disabled in Google Ads account settings. Fix auto-tagging first, then add the hidden field to every conversion form.
The complete attribution stack — what this connects to
Offline conversion import is one layer of a complete B2B attribution system. Here is how it fits alongside the other components:
| Layer | Tool | What it measures |
|---|---|---|
| Click identity | GCLID capture | Links every form fill to a specific ad click |
| Lead quality | HubSpot lead scoring | Scores leads by ICP fit and behaviour |
| Pipeline attribution | HubSpot original source | Tracks which channel generated each pipeline stage |
| Revenue signal | Offline conversion import | Sends closed deal value back to Google Smart Bidding |
| Algorithm learning | Smart Bidding + tROAS | Optimises toward deal value not form volume |
| Reporting | Looker Studio + HubSpot | CAC, payback period, SQL rate by source for COO |
Each layer depends on the one before it. GCLID capture is the foundation. Without it, nothing above it works. Start there before building anything else.