HubSpot to Google Ads Offline Conversions

Set up HubSpot offline conversions in Google Ads with GCLID, enhanced conversions for leads, stage mapping, validation, and CustomerLabs.

T
tariqahmed
5 min read

To send HubSpot offline conversions to Google Ads, connect four things: the original ad click, the website lead, the HubSpot contact or deal, and a Google Ads offline conversion action. Use both the click ID and consented first-party identifiers when they are available. Then send each meaningful CRM stage as its own conversion action.

This is not the same as counting a form submission. A form submission tells Google that somebody became a lead. The offline conversion tells Google what happened after sales followed up: the lead qualified, an opportunity opened, or a deal closed.

The working data flow

Google ad click
-> landing page stores GCLID, WBRAID, or GBRAID when available
-> form submission identifies the lead with email or phone
-> HubSpot contact and associated deal update
-> CustomerLabs receives the selected lifecycle or deal-stage change
-> CustomerLabs sends the event to Google Ads through Google Data Manager
-> Google Ads matches the event to an eligible ad interaction

There are two matching paths:

  1. Click-ID matching: send the gclid, wbraid, or gbraid captured from the ad landing session.
  2. Enhanced conversions for leads: send normalized and SHA-256 hashed first-party data, such as email or phone, from both the website lead and the later CRM conversion.

Do not treat enhanced conversions as a reason to stop collecting GCLID. Google recommends including GCLID whenever it is available, even when user-provided data is also sent.

First decide: HubSpot native or CustomerLabs?

HubSpot has a native Google Ads conversion-event workflow. It can send form-submission events and HubSpot lifecycle-stage changes to Google Ads. If your forms, lifecycle stages, consent property, and advertising activation all live inside HubSpot, test that native route first.

Use CustomerLabs when you need one or more of these jobs:

  • Join a non-HubSpot website or form session to the later HubSpot record.
  • Use contact, company, and deal fields instead of only a standard lifecycle stage.
  • Keep the click ID and website identity connected as records change in the CRM.
  • Send the same qualified-lead or closed-won event to more than one advertising destination.
  • Inspect source events, mapping, destination delivery, and failures in one workflow.

CustomerLabs is the bridge in this guide. Review the HubSpot integration for the connector overview. The commercial parent for this setup is offline conversion tracking. The detailed product screens live in the HubSpot source documentation and Google Data Manager destination documentation.

Prerequisites

Complete these checks before building a workflow:

  • Admin access to the HubSpot account and CustomerLabs account.
  • Access to the correct Google Ads account or manager account.
  • Auto-tagging enabled in Google Ads where GCLID collection applies.
  • A Google tag or Google Tag Manager setup that can collect user-provided data for enhanced conversions for leads.
  • Google’s customer data terms accepted in Google Ads.
  • A documented consent rule for sharing customer data with Google. Hashing is a security step, not a substitute for permission.
  • A stable identifier that connects the website lead to HubSpot. CustomerLabs’ HubSpot setup uses a hidden cluid field for this identity handoff.
  • A contact-to-deal association when a conversion is stored on a HubSpot deal but the email or phone is stored on the contact.
  • One agreed timestamp for every milestone. Send the time the stage actually changed, including the time-zone offset.

For a new integration, use the Google Data Manager path. Google says that, beginning June 15, 2026, offline and enhanced-lead uploads using developer tokens without eligible prior upload history are blocked in the Google Ads API. CustomerLabs has a dedicated Google Data Manager destination for the current path.

Step 1: define the CRM events before touching the tools

Do not send every HubSpot property update to Google Ads. Start with stages that mean something about lead quality or revenue.

The following is an example, not a universal funnel:

HubSpot conditionCustomerLabs eventGoogle Ads actionExample valueInitial bidding setting
Lifecycle stage becomes MQLlead_mqlQualified lead - MQL25Secondary
Lifecycle stage becomes SQLlead_sqlQualified lead - SQL100Secondary during QA
Associated deal enters Proposaldeal_proposalQualified lead - opportunity400Secondary
Associated deal becomes Closed wondeal_wonConverted lead - wonActual deal amountPrimary after QA

Replace the names and values with your own definitions. If MQL is assigned automatically from weak criteria, it is not a useful bidding signal. If Closed won happens after Google’s import window, an earlier stage may be the better optimization event.

Google recommends a separate conversion action for each funnel stage. Separate actions make reporting auditable and let you choose which stage enters the Conversions column. Usually, you do not want every stage set as Primary at the same time.

Step 2: connect HubSpot as a CustomerLabs source

In CustomerLabs, open Sources, choose HubSpot, and authenticate the correct HubSpot account.

Review the standard contact, company, and deal fields. Add only the custom fields your conversion logic needs. The CustomerLabs setup supports HubSpot webhook events for contact, company, and deal records, including creation and property-change events.

Add cluid to the HubSpot modules used in the identity flow, and add it as a hidden field to the relevant lead forms. This connects the anonymous website profile with the identified HubSpot record. Do not expose the field as something a visitor edits.

Before continuing, create one test contact and one associated test deal. Use test values that are easy to find later, such as seo-qa+hubspot@example.com and OCT-HUBSPOT-QA.

Step 3: build one filtered workflow per business event

HubSpot can send individual property-change events. A broad workflow can therefore turn harmless edits into false conversions. Filter for both the object and the exact property value that represents the milestone.

For a contact lifecycle event:

  1. Create a CustomerLabs workflow and fetch a real test sample from HubSpot.
  2. Filter subscriptionType for contact.propertyChange.
  3. Filter the changed property for the intended HubSpot lifecycle value.
  4. Name the output event explicitly, such as lead_sql.
  5. Identify the user using email and HubSpot contact ID. Map cluid when it is available.
  6. Map email, phone, consent status, lifecycle stage, HubSpot contact ID, and the stage-change timestamp.

CustomerLabs workflow sample selection

For a deal event, also require the correct deal stage and an associated contact. Map the HubSpot deal ID as the event’s unique business reference. Map the associated contact’s email or phone for enhanced conversion matching, and retain any captured click ID on the unified profile.

The key audit question is simple: Can one CRM edit fire this conversion twice? If the answer is yes, tighten the trigger or create an event/order ID that stays stable for that milestone.

Step 4: create the Google Ads conversion actions

In Google Ads, go to Goals → Summary → Create conversion action and create an offline conversion action for each selected stage.

For lead generation:

  • Choose Qualified lead for a verified intermediate stage or Converted lead for the final business outcome.
  • Use One as the count setting unless repeated conversions from the same click are genuinely separate business outcomes.
  • Start new actions as Secondary while validating.
  • Use a fixed value only when the finance and sales teams agree on the expected value of that stage. Otherwise, send the actual deal amount for won revenue or omit a value.
  • Keep the conversion window compatible with the real sales cycle.

Google’s current guidance gives different hard upload limits: standard click-ID offline conversions older than 90 days after the click are rejected; enhanced-conversion-for-leads uploads older than 63 days after the associated last click are rejected. Design the stage you send around the shorter applicable window.

Step 5: connect Google Data Manager in CustomerLabs

In CustomerLabs:

  1. Open Destinations → Google Data Manager → Google Ads.
  2. Authenticate the Google account and select the correct customer and ad account.
  3. Complete the Google authorization flow and verify access to the intended customer and ad account.
  4. Fetch the Google Ads conversion actions.
  5. Map each CustomerLabs event to exactly one matching conversion action.
  6. Enable enhanced conversion tracking and map the supported email and phone fields.
  7. Enable the event workflow only after the test mapping is reviewed.

The minimum conversion record should contain:

FieldPurpose
Conversion actionIdentifies the HubSpot milestone in Google Ads
Conversion timestamp with time zonePlaces the conversion after the ad interaction
GCLID, WBRAID, or GBRAID when availableDirect ad-interaction matching
Email and/or phone when consentedEnhanced-conversion matching
Consent stateCommunicates whether ad user data can be sent
Currency and value when usedSupports value reporting and value-based bidding
Stable event or order IDHelps prevent duplicate milestone uploads

Step 6: validate before using the event for bidding

Run one controlled test lead through the whole route:

  1. Click a tagged test ad or use an approved test method that preserves the click identifier.
  2. Submit the lead form with a unique email address and consent state.
  3. Confirm the HubSpot contact contains the expected identifier fields.
  4. Move the contact or associated deal into the target stage once.
  5. Confirm CustomerLabs received one source event and produced one mapped event.
  6. Check CustomerLabs destination logs for delivery success or a specific rejection.
  7. Check Google Ads offline data diagnostics and enhanced-conversion diagnostics.
  8. Add All conv. (by conv. time) to the Google Ads report and segment by conversion action.
  9. Compare only the same conversion action and conversion-time window with HubSpot.

Google says imported conversion statistics can take around three hours to appear. A HubSpot total will not necessarily equal Google Ads: Google only reports events it can match and attribute under the account’s conversion settings.

Keep the action Secondary until it has received stable, correctly valued events for at least one normal conversion cycle. Then decide which single stage, or carefully selected set of stages, should become Primary.

Failure cases to check

SymptomLikely causeWhat to inspect
HubSpot event exists, but CustomerLabs has nothingWrong HubSpot account, webhook, object, or property filterSource authentication and raw source samples
CustomerLabs receives many duplicate eventsWorkflow reacts to every property changeExact property/value filter and stable event ID
Google says conversion time precedes clickWrong timestamp or time zoneStage-change time and offset
Google cannot find the conversion actionWrong account, MCC level, or action mappingAccount IDs and cross-account conversion setup
Low match rateMissing click ID, email/phone formatting, or website user-provided-data tagGCLID field, identifier mapping, diagnostics
Deals cannot match to peopleDeal is not associated with the correct HubSpot contactDeal-contact association and identity map
Old opportunities never importStage occurs outside the supported upload windowChoose an earlier qualified stage or shorten CRM delay
Counts differ from HubSpotGoogle attribution, rejected events, duplicate handling, or report date basisUpload results and All conv. by conversion time

What this setup does not guarantee

An accurate integration does not guarantee more conversions, higher ROAS, or legal compliance. It gives Google Ads cleaner evidence about which leads became valuable. Smart Bidding still needs enough timely conversion volume, sensible values, adequate budget, and a campaign configured to optimize for the chosen Primary action.

CustomerLabs also does not decide what an SQL or opportunity means for your company. Marketing and sales must define that first. The implementation should enforce the definition, not invent it.

If your team wants help mapping HubSpot lifecycle and deal events, preserving click identifiers, and validating delivery into Google Ads, book a working session with CustomerLabs.

Sources and implementation references

FAQ

Frequently Asked Questions

Can HubSpot send offline conversions to Google Ads?

Yes. HubSpot can send lifecycle-stage events through its native Google Ads integration. CustomerLabs can also connect HubSpot records with website identifiers, map custom contact or deal events, and send them through Google Data Manager.

Can HubSpot send offline conversions to Google Ads?

Yes. HubSpot can send lifecycle-stage events through its native Google Ads integration. CustomerLabs can also connect HubSpot records with website identifiers, map custom contact or deal events, and send them through Google Data Manager.