# How Offline Conversions Fix B2B Google Ads

Source: https://prioritypixels.co.uk/insights/how-offline-conversions-fix-b2b-google-ads/

> Offline conversion upload is the single biggest fix for over-reporting B2B Google Ads. Here is what it does, how to wire it up to your CRM, and what changes in your reporting.

Google Ads

Most B2B Google Ads accounts are optimising for the wrong outcome. The algorithm sees a form submission and books it as a conversion. The real sale, which happens 30 to 90 days later after a discovery call, a proposal, and a contract, never makes it back to Google Ads. Smart Bidding spends the next quarter chasing audiences that fill in forms and ignoring the ones that close deals. Cost per lead looks reasonable on paper, the sales team complains the leads are weak, and nobody quite ties the two things together. This is the single largest measurement gap in B2B paid media, and we close it on every account we run as part of our [Google Ads management for UK B2B businesses](https://prioritypixels.co.uk/services/google-ads/).



Offline conversion upload is the mechanism that sends the closed deal back to Google Ads, against the original click, so the bidding model learns which keywords and audiences produce real revenue rather than form submissions. If you are buying Google Ads for a B2B business and you are not doing this, you are paying for the privilege of teaching the algorithm to find more of the wrong people. That is the problem this guide solves, end to end, with the gotchas the official documentation glosses over.


## The B2B Google Ads attribution problem



A typical UK B2B sales cycle is somewhere between 30 and 120 days. The lead arrives on a landing page, fills in a contact form, and gets passed to a salesperson. The Google Ads conversion is recorded the moment the form is submitted. Everything that happens after that, the discovery call, the proposal, the procurement process, the contract signature, lives in your CRM and never gets near Google Ads.

The algorithm sees one event: form submission. It does not know that 60% of those form fills are tyre-kickers, students writing essays, or competitors checking your pricing. It does not know that the buyer who took two weeks to come back and book a call is the one worth £40,000. So it optimises the bid strategy for the signal it can see: more form submissions, faster, at lower cost.

The downstream consequence is serious. Your CPL looks healthy. Your sales team tells you the leads are getting worse. Spend goes up because Smart Bidding is rewarded for finding more of what it thinks you want. Closed-deal volume stays flat or drops. By the time you notice the disconnect, you have spent a quarter teaching the algorithm to find the wrong people.


## What offline conversion upload does



Offline conversion upload solves this by closing the loop. The mechanism has three parts. When a user clicks an ad, Google Ads attaches a unique identifier called a gclid to the landing page URL. You capture that gclid on form submission and store it against the lead record in your CRM. When the deal closes, your CRM sends the gclid back to Google Ads along with the value and the conversion event type. Google Ads matches the gclid against the original click, records the conversion, and feeds that signal into Smart Bidding.

The official mechanism is documented in [the Google Ads API offline conversion documentation](https://developers.google.com/google-ads/api/docs/conversions/upload-offline). The principle is straightforward but the implementation has three or four gotchas that catch most teams out the first time round. We will work through each of them below.

The mental model worth holding: you are giving Smart Bidding the information it should have had all along. The keyword that drove the lead is in Google Ads already. The closed deal lives in your CRM. The gclid is the join between the two databases. Once the join is in place, every bid decision the algorithm makes is informed by closed revenue rather than form-fill volume.


## The signals you lose without it



Three things break when offline conversion data is missing.




Signal lost

#### True CPA per campaign


The dashboard reports cost per form submission, not cost per closed deal. Two campaigns with identical lead counts but different close rates look the same in the report and get funded the same way.




Signal lost

#### Audience and keyword optimisation


Smart Bidding pattern-matches against the converters it can see. Form-fill bots and curious browsers look identical to enterprise buyers in the data, so the algorithm keeps finding more of the wrong ones.




Signal lost

#### ROAS for B2B


The reported number is the value of form submissions, not closed deals. That figure cannot be trusted by anyone in the business, which is why most B2B marketing directors do not use it for spend decisions.






Each of these is a measurement gap, not a tactical gap. No amount of bid tweaking, audience layering or creative testing fixes it. The only fix is closing the loop so the algorithm sees what happens after the form gets submitted.


## Two routes: classic offline upload or Enhanced Conversions for Leads



There are two delivery mechanisms for the same idea. The right choice depends on how your leads arrive.


| Lead source | Use | Match key |
| --- | --- | --- |
| Web form on a landing page reached via Google Ads | Classic offline conversion upload | gclid |
| Phone call from a Google Ads call extension | Classic offline conversion upload via call conversion | caller ID + click time |
| Offline lead (trade show, referral, inbound call to main number) | Enhanced Conversions for Leads | hashed email and phone |
| Mixed pipeline with both sources | Both, layered | both |



Classic offline conversion upload is the more flexible route and is the default for any B2B account where the majority of leads start with a web form. Enhanced Conversions for Leads is the right choice when you do not have a gclid because the lead originated offline, or when your sales cycle exceeds the gclid window we cover in section 8.

Most accounts end up running both. The classic upload handles the web-form journey, Enhanced Conversions for Leads picks up the long-cycle deals and any offline-originated leads that eventually convert. Google's documentation on [Enhanced Conversions for Leads](https://support.google.com/google-ads/answer/13262500) covers the setup steps.


## Capturing the gclid on your forms



Lead Funnel

The first technical step is making sure the gclid from the ad click survives all the way to your CRM record. This sounds obvious. It is the single most common failure point in a real implementation.

When a user clicks an ad, the destination URL has the gclid query parameter appended. So your landing page URL might be https://example.com/landing/?gclid=ABC123. A small JavaScript snippet on the page needs to do two things: read the gclid from the URL and write it into a hidden field on the form, and store the gclid in a first-party cookie with a 90-day expiry as a fallback.

A working pattern, vanilla JavaScript, no library required:

(function () {
var params = new URLSearchParams(window.location.search);
var gclid = params.get('gclid');
if (gclid) {
var expires = new Date();
expires.setDate(expires.getDate() + 90);
document.cookie = 'gclid=' + gclid + '; expires=' + expires.toUTCString() + '; path=/; SameSite=Lax';
} else {
var match = document.cookie.match(/(?:^|;s*)gclid=([^;]+)/);
if (match) gclid = match[1];
}
var hidden = document.querySelector('input[name="gclid"]');
if (hidden && gclid) hidden.value = gclid;
})();

Drop that into your landing page head or as a custom script in Google Tag Manager. It reads from the URL on first visit, writes the cookie, and populates the hidden form field on every subsequent visit including the one where the user converts.

The fallback matters because most B2B buyers do not convert on the first session. They land, leave, come back via direct, branded search, or organic, and convert on the second or third visit. The URL only has the gclid on the first hit. Without the cookie, you lose every multi-session conversion.

Every modern form builder supports a hidden field that can be populated from a cookie or URL parameter. Gravity Forms, Forminator and HubSpot Forms all support this through their standard interface. The form submission then carries the gclid value into your CRM record as a custom field on the lead or contact.

The test for whether this is working: open your own ad in an incognito window, click through to the landing page, fill in the form, and confirm the gclid arrived in your CRM against the new lead. Do this every time you launch a new landing page or change form builder. The number of accounts we audit where this silently broke six months ago is high.


## Wiring it to your CRM



Once the gclid is sitting on the CRM record, you need a way to send it back to Google Ads when the deal closes. The three most common CRMs each have a different path.




CRM

#### HubSpot


Store the gclid as a custom Contact property. The native [HubSpot Google Ads integration](https://knowledge.hubspot.com/ads/connect-your-google-ads-account-to-hubspot) then syncs stage changes and closed-won events back automatically. About 30 minutes once your pipeline stages are mapped.




CRM

#### Salesforce


Store the gclid on the Lead object and inherit it onto the Opportunity when the Lead converts. Google's official Salesforce connector handles the upload from Closed Won back to Google Ads once the field mapping is set.




CRM

#### Pipedrive


No native integration. Wire it together with Zapier or Make: the trigger is a Deal moving to Won, the action is a POST to the Google Ads Conversion API with the gclid and the deal value. Keep the conversion action name consistent across clients to make audits easier.






Whichever CRM you use, the principle is the same. The gclid is the join key. The closed deal is the conversion event. The value is the deal amount. The mechanism in between is just plumbing.


## Mapping sales stages to conversion events



This is where most implementations stop too early. The common pattern is "we wired up Closed Won and we are done." That works, but it leaves most of the signal on the floor.

Smart Bidding does not care what you call the conversion event. It cares about the value. The richer signal comes from sending multiple conversion events at different points in the sales cycle, each with a different value, so the algorithm has more signal to learn from.

A useful sales-stage mapping for a typical B2B pipeline:


| Sales stage | Conversion event | Indicative value | Signal to Smart Bidding |
| --- | --- | --- | --- |
| Lead qualified by sales | Lead Qualified | £100 | Genuine enough for sales to engage |
| Discovery call booked | Call Booked | £500 | Interested enough to book time |
| Proposal sent | Proposal Sent | £1,500 | Qualified enough for a quote |
| Closed Won | Closed Won | Full deal value | Revenue earned |



Smart Bidding will weight Closed Won most heavily because it has the highest value. The earlier-stage events teach the algorithm what a real buyer looks like before they close, which speeds up the learning phase for new campaigns by weeks.

The trap to avoid: do not send these as the same conversion action with different values. Set them up as four separate conversion actions in Google Ads, each with its own value and category. That way Smart Bidding can weight them independently and you can see the funnel in your Google Ads dashboard.


## The 90-day click window



This is the gotcha that breaks most B2B implementations. Google Ads only accepts gclid-keyed offline conversions if the click happened within the last 90 days. The exact rule and the longer windows for different conversion types are set out in [Google's conversion window documentation](https://support.google.com/google-ads/answer/2998031).

For a B2B sales cycle of 4 months or more, this is a problem. The deal closes after the 90-day window has expired, the API rejects the upload, and the conversion never makes it back into Google Ads. You spent three months building the plumbing and the slowest, biggest deals never count.


> If your average B2B sales cycle is longer than 90 days, do not rely on classic offline conversion upload alone. Enhanced Conversions for Leads is what carries the long-tail deals back to Google Ads, and the deals at the long end of the cycle are usually the biggest ones.



There are two fixes. The first is to switch to Enhanced Conversions for Leads for any deal expected to close outside the window. Enhanced Conversions matches on hashed email rather than gclid, so the time limit on the original click does not apply. The cost is that you need email capture on the form and email storage on the CRM, which is fine for almost every B2B account.

The second is to log Lead Qualified and Discovery Call Booked as conversions early in the cycle, well inside the 90-day window. Those mid-funnel events fire while the click is still in scope. Smart Bidding gets the audience signal even if the final Closed Won event is rejected.


## Common mistakes that kill the data



Five recurring mistakes we see in audits:


- Sending the wrong conversion value: pre-discount, pre-VAT, gross instead of net. Pick one convention, write it down, and stick to it. Inconsistent values send the algorithm noise rather than signal.
- Not deduplicating: a deal that gets re-opened and re-won posts twice. If you are syncing on stage changes, exclude deals that already have a conversion logged.
- Sending events too early: an opportunity moved to Won and then reversed during invoicing posts a conversion that is never delivered. Wait until invoice raised or contract signed, not pipeline stage moved.
- Time-zone drift: your CRM is in UTC, your Google Ads property is in Europe/London. Conversions logged just before midnight UTC get attributed to the wrong day. Match the time zone explicitly when you build the integration.
- Skipping the back-fill: when you first enable offline conversion upload, you should back-fill the last 30 to 90 days of closed deals so Smart Bidding has historical training data. Most teams skip this and wonder why nothing changes for two months.



All five are recoverable, but they all delay the point at which Smart Bidding starts making good decisions. Catching them at the audit stage saves four to six weeks of learning-phase re-training. The most expensive to find later is the time-zone drift, because the data looks correct in your CRM and only goes wrong on the Google Ads side, where you might not notice for months.


## What this changes in your reporting



Performance Insights

The reporting shift after clean offline conversion data lands is consistent across the B2B accounts we manage, and it has a counter-intuitive shape.

In the first two weeks, your Google Ads CPL appears to get worse. This is the right outcome. The form-fill flood that was being counted as conversions stops being counted; only the leads that progress through the sales cycle now register. The dashboard finally shows the same picture your sales team has been describing for months.

Over the following four to eight weeks, Smart Bidding shifts spend toward audiences and keywords that produce closed deals. The reported CPL stabilises at a higher number but the cost per closed deal drops, sometimes meaningfully. The right number to track at that point is cost per Closed Won, not cost per form submission, because the underlying business is now optimising against revenue rather than form volume.

The right way to brief the leadership team on this: cost per lead is going to look worse for the first month and then the cost per closed deal is going to come down. If they need to see that change in reporting, build a Looker Studio view that strips the form-submission counter and shows closed-deal cost from week one. The same data principles we use in our [paid media services for B2B sectors](https://prioritypixels.co.uk/services/paid-media/) apply here: report on the outcome the business cares about, not the proxy metric that is easier to track.

This work pairs well with cleaning bot traffic out of GA4, which we covered in our guide on [how to filter bot traffic from GA4](https://prioritypixels.co.uk/insights/exclude-bots-ga4/). Both jobs do the same thing in different surfaces: make sure the data your marketing decisions are based on reflects buyer behaviour, not noise. The other place this pays off is in organic, where the cleaner attribution lets you see how [SEO traffic for UK B2B sectors](https://prioritypixels.co.uk/services/seo/) feeds Google Ads conversions and vice versa.

Offline conversion upload is one to two days of dev work plus 30 minutes of CRM configuration. The reason most agencies do not do it for clients is that the work is invisible until the reporting changes weeks later, and most agencies bill on lead volume rather than closed revenue. The agencies who do this for their clients are the ones with longer client relationships and lower churn, because the spend gets more efficient quarter on quarter rather than plateauing.