Two Spouts

Offline Conversion Stack for B2B SaaS: CRM, Webhooks, and What Actually Works

Comparing four approaches to offline conversion tracking for B2B SaaS Google Ads: native CRM connectors, GCLID webhooks, Zapier/Make pipelines, and enhanced conversions with CRM match.

Published July 8, 2026 · By Two Spouts

Getting offline conversion tracking working is the highest-leverage Google Ads change most B2B SaaS companies never make. The concept is straightforward: capture the Google Click ID (GCLID) from each form submission, follow that contact through your CRM pipeline, and send a conversion event back to Google Ads when the contact reaches a stage that represents real value — qualified demo, SQL, or closed-won. In practice, the implementation varies significantly depending on your CRM, your engineering bandwidth, and how much latency you can tolerate.

This post compares four implementation approaches ranked by setup complexity and data reliability. It is a companion to the conceptual guide to offline conversion import for B2B SaaS, which covers why offline tracking matters and how Smart Bidding uses the signal. This post covers the tooling and what each approach actually requires to set up and maintain.

Approach 1: Native CRM connector (HubSpot, Salesforce)

The native CRM integration is the path of least resistance for most B2B SaaS companies already running HubSpot or Salesforce. HubSpot's Google Ads integration automatically captures the GCLID on any form submission (if the HubSpot tracking code is installed on your site), stores it on the contact record, and can be configured to send conversion events back to Google Ads when contacts reach lifecycle stages you define.

Setup requires three steps: connecting HubSpot to Google Ads via the Ads integration settings, verifying that the GCLID contact property is being populated (check any recent form submission and look for the "Google Analytics Click ID" contact property), and creating conversion actions in Google Ads that correspond to the HubSpot lifecycle stages you want to import (MQL, SQL, Customer). The import is bidirectional — HubSpot handles the push automatically on lifecycle stage changes. The main limitation is that HubSpot only imports conversions at predefined lifecycle stages; if you need to track custom events (e.g., "booked demo" distinct from "MQL") you need to use HubSpot's custom conversion actions, which require some workflow configuration. Salesforce's Advertising Studio product offers similar native connectivity for Salesforce-based stacks, with the added complexity of Salesforce's data model requiring more configuration.

Best for: HubSpot or Salesforce shops that want to get offline tracking working quickly without engineering involvement.
Limitation: Batched uploads (24-48h lag), limited to native lifecycle stage mapping, less flexibility on custom conversion events.

Approach 2: GCLID webhook to Google Ads API

The GCLID webhook approach gives you the most control and the lowest latency. The implementation has three components: capturing the GCLID on form submission and storing it in your database (via a hidden form field populated by JavaScript from the URL parameter), triggering a webhook when a contact reaches a qualifying stage in your CRM, and calling the Google Ads Conversions API with the GCLID, conversion action ID, and timestamp.

As of June 15, 2026, the Conversions API endpoint moved to the Data Manager API. If you are building a new integration, target the Data Manager API directly rather than the legacy Offline Conversions endpoint. The key fields required in each API call are: the GCLID value, the conversion action ID (from your Google Ads conversion settings), the conversion time in ISO 8601 format, and optionally the conversion value. A typical implementation for a B2B SaaS company uses a webhook from the CRM (triggered when a deal reaches SQL or closed-won status) to a serverless function (AWS Lambda, Vercel Edge Function, or Cloudflare Worker) that makes the Google Ads API call. Latency is typically under 5 minutes from the CRM event to Google Ads receiving the conversion.

Best for: Companies with engineering resources who want full control over conversion event timing, custom event definitions, and low import latency.
Limitation: Requires maintenance when Google Ads API changes (as happened in June 2026), needs a developer to set up and keep running.

Approach 3: Zapier or Make pipeline

Zapier and Make (formerly Integromat) both offer Google Ads actions that support offline conversion uploads — and both have updated their Google Ads actions to use the Data Manager API following the June 2026 migration. For non-technical teams or small engineering teams with limited bandwidth, this approach provides a middle ground between native CRM connectors and custom webhooks.

The typical Zap or Make scenario is: trigger on CRM deal stage change (e.g., HubSpot deal moves to SQL stage) → find the contact's GCLID from the contact record → send offline conversion to Google Ads via the Google Ads action. Zapier's Google Ads action currently supports the "Upload Click Conversion" function which matches the GCLID import approach. The key requirement is that the GCLID must already be stored on the contact — Zapier cannot capture the GCLID itself; it just forwards the data to Google Ads when a CRM event triggers the scenario.

The practical challenge with Zapier and Make for offline conversions is failure handling. API calls can fail silently in automation pipelines, and a missed conversion upload does not generate a visible error — you only discover it when you notice conversion volume dropping in Google Ads. Build error logging into any automation pipeline: have failed conversions write to a Google Sheet or Slack notification so you can reprocess them manually. Reprocessing is supported by the Google Ads Conversions API up to 90 days after the original click date.

Best for: Non-technical teams or RevOps-led implementations who want more flexibility than native CRM connectors without writing code.
Limitation: Failure handling requires extra setup, task- based pricing can add up at high conversion volumes, scenario configuration is brittle when CRM data models change.

Approach 4: Enhanced conversions for leads with CRM match

Enhanced conversions for leads works differently from the GCLID-based approaches above. Instead of matching on a click ID, it takes hashed PII (email address, phone number) from a form submission and uses Google's identity graph to match those users to Google account holders and attribute the conversion. This catches attribution that GCLID-based import misses — users who switched devices between clicking the ad and submitting the form, or users where the GCLID was not captured correctly.

For B2B SaaS, enhanced conversions for leads is best used as a supplementary signal alongside GCLID import, not as a replacement. The GCLID method is more precise (you know exactly which click drove the conversion) while enhanced conversions are more comprehensive (they catch more conversions but with less precision). Running both provides better overall conversion signal and reduces the attribution gap.

Implementation requires Google consent mode to be configured correctly — without it, enhanced conversions will not function in markets with strict consent requirements (EU, UK, and increasingly other markets). The June 2026 consent changes are particularly relevant here: ensure your consent mode implementation is current before relying on enhanced conversions for leads as a significant attribution source.

Choosing the right approach for your stack

The right choice depends primarily on your CRM, your engineering resources, and whether you are starting from scratch or fixing an existing implementation. For most B2B SaaS companies in the $1M-$10M ARR range using HubSpot, the native connector is the right starting point — it gets offline tracking working without engineering involvement and captures 80% of the value. Move to the GCLID webhook approach when you have custom conversion events the native connector cannot support or when you need lower import latency for accounts where the learning period is a limiting factor.

Regardless of which approach you use, the conversion actions you import should reflect genuine sales milestones, not form fills. The staging that produces the best Smart Bidding signal for B2B SaaS is: import demo-booked or SQL-stage as the primary conversion event (high volume, predictive of revenue), import closed-won as a secondary conversion event with the actual deal value attached. This gives Smart Bidding a real revenue signal while maintaining enough volume for the learning algorithm to function. Accounts with fewer than 30 closed-won deals per month per campaign should use the SQL stage as primary even if closed-won is the ultimate goal.

The GCLID vs enhanced conversions comparison covers the attribution mechanics in detail for companies deciding between the two technical approaches.

Monitoring your offline conversion pipeline

Offline conversion pipelines break silently. The most common failures are: GCLID capture stopping when a form or CMS update removes the hidden field, CRM field mapping breaking when a lifecycle stage is renamed, and API authentication tokens expiring. None of these generate a visible error in Google Ads — you see conversion volume declining and have to trace back to find the break.

Build a monitoring habit into your weekly Google Ads review: compare the volume of offline conversion events in Google Ads to the volume of deals reaching that stage in your CRM for the same week. If they diverge by more than 20%, your pipeline has a break somewhere. The most common fix is regenerating API credentials or reverifying that the GCLID field is being populated on recent form submissions. Set a 90-day calendar reminder to check API token expiration — many OAuth implementations default to tokens that expire in 60-90 days without automatic refresh.

Frequently asked

What is offline conversion tracking and why does it matter for B2B SaaS Google Ads?

Offline conversion tracking sends downstream CRM data — qualified leads, demo-booked, SQL-stage, closed-won — back to Google Ads, connecting revenue outcomes to the specific clicks and campaigns that drove them. For B2B SaaS, where the value of a form fill is almost zero (unqualified form fills vastly outnumber buyers) and the real conversion event is a qualified demo, an SQL, or a closed deal, offline conversion tracking is the single intervention with the largest impact on Smart Bidding quality. Without it, your bidding algorithm optimizes toward form fills — the cheapest and most abundant signal — and gradually migrates budget toward the lowest-intent traffic that generates form fills. With it, the algorithm optimizes toward the outcome that actually generates revenue, which leads to lower cost per SQL and higher pipeline value per dollar spent.

What is the simplest offline conversion tracking setup for a B2B SaaS company using HubSpot?

HubSpot's native Google Ads integration is the simplest path. Connect HubSpot to Google Ads via the HubSpot Ads integration panel, map your GCLID field to a HubSpot contact property (HubSpot auto-captures this if you have the tracking code installed), then create a Google Ads conversion action for each CRM lifecycle stage you want to import (MQL, SQL, closed-won). HubSpot will automatically push conversion data back to Google Ads when contacts reach those stages. The main limitation is reporting latency — HubSpot batches the uploads rather than sending them in real time, so expect 24-48 hour lag. For Smart Bidding purposes, this latency is fine; the algorithm works on batched historical data rather than real-time signals.

When should a B2B SaaS company use a GCLID webhook instead of a native CRM connector?

Use a GCLID webhook approach when your CRM does not have a native Google Ads integration, when you need lower latency than native connectors provide, when you want to import custom conversion stages that your CRM's integration does not support, or when your engineering team is comfortable maintaining a lightweight API connection. The webhook approach involves capturing the GCLID on form submission (storing it in a hidden field and saving it to the contact record), then triggering a call to the Google Ads API Offline Conversions endpoint when the contact reaches qualifying stages. This gives you full control over what events trigger conversions and when — but requires ongoing maintenance when the Google Ads API changes, as happened with the Data Manager API migration in June 2026.

What is the difference between offline conversion import and enhanced conversions for leads?

Offline conversion import (GCLID-based) matches a specific ad click to a downstream conversion event using the Google Click ID that was captured at the moment of form submission. It requires capturing and storing the GCLID per contact, which means it only works for users who clicked an ad and submitted a form in the same browser session. Enhanced conversions for leads works differently — it takes hashed customer data (email address) from a form submission and uses it to match across Google's logged-in user graph, regardless of whether a GCLID was captured. Enhanced conversions for leads can attribute conversions that offline import misses (because the GCLID was not captured or the user switched devices), but it requires Google consent mode to be properly configured and works best in markets with high Google account penetration. For most B2B SaaS companies, both should be implemented: GCLID import as the primary signal and enhanced conversions as a supplementary match that fills in attribution gaps.

Does the Google Ads Data Manager API change how B2B SaaS companies implement offline conversions?

Yes. As of June 15, 2026, Google migrated offline conversion imports and enhanced conversions for leads uploads from the legacy Google Ads API path to the Data Manager API. If your implementation used the legacy API path directly (common in custom webhook setups built before 2026), those imports will have stopped working. You need to either update your API integration to use the Data Manager endpoint, or use one of the no-code connectors (HubSpot native, Zapier's updated Google Ads action, or Segment's Google Ads destination) that have already updated to the new API. The conceptual implementation — capture GCLID, pass downstream conversion events back with timing and value — is unchanged; only the technical endpoint changed.

One more essay, one tool you can run on your account today, and a case study showing what the moves above look like in practice.