Notes

HubSpot to Google Ads: Sending Verified Stages Back as Offline Conversions

To connect HubSpot to Google Ads properly you need four things: the click identifier captured on every form as a contact property, one deal or lifecycle stage that a human confirms, a decision about whether HubSpot's own ads integration or an offline import is your primary signal, and an upload that carries the identifier, the stage and the time. Running both as primary is the most common mistake.

Key takeaways

Contents

  1. What the connection actually does
  2. The properties to create first
  3. From form to Google Ads
  4. Native integration or offline import
  5. What goes wrong
  6. The healthcare caveat
  7. What it costs
  8. Create the property today
HubSpot to Google Ads: Sending Verified Stages Back as Offline Conversions

HubSpot knows which deals closed. Google Ads knows which clicks it sold you. Neither knows about the other until you join them, and the join key is a string that has to be captured at the very first form fill.

What the connection actually does

It tells Google Ads which of its clicks produced a real outcome in your pipeline, so bidding optimises toward those rather than toward form submissions. The mechanism is the same as any offline conversion import, described in the offline conversion tracking guide; only the source system differs.

The properties to create first

HubSpot properties required for offline conversion imports
Five properties, created before the first form fill.
PropertyTypeWhy
gclidSingle-line text, 255 charactersThe ad click identifier
gbraid and wbraidSingle-line textArrive instead of gclid on some iOS traffic
first touch sourceSingle-line textReporting, not bidding
verified stage dateDate pickerThe conversion time you upload
upload statusDropdownSent, failed, not applicable

Two rules that save weeks later. Set the identifier once and never overwrite it, so a returning visitor does not rewrite their original attribution. And check that no workflow, import or deduplication rule changes its case, because the value is case-sensitive and a lowercased identifier will never match.

From form to Google Ads

Steps from a HubSpot form to a Google Ads offline conversion
The third step is a human confirming something, not a tag firing.
  1. Add a hidden field for the identifier to every HubSpot form, populated from a first-party cookie by a small script on the page.
  2. Confirm it lands on the contact record with capitals intact. Test with a hand-typed value.
  3. Choose one stage that a person confirms: consultation attended, qualified, closed won. Not "form submitted".
  4. When a record reaches that stage, export or send the identifier, the conversion action, the time and any value.
  5. Upload to Google Ads, then reconcile monthly: uploaded count against HubSpot stage count.

If the identifier is missing from the record, the fault is upstream in capture, not in HubSpot. The six usual causes are in what a GCLID is, and the form side in HIPAA-compliant forms.

Native integration or offline import

HubSpot offers its own Google Ads integration that can report on ad-sourced contacts and, depending on setup, send events back. A manual or scripted offline import gives you exact control over which stage is sent, when, and with what name.

Either is defensible. Both as primary is not: the same outcome gets counted twice, cost per conversion halves, and bidding optimises against inflated data. Decide which one is primary, mark the other's actions as secondary, and write the decision down where the next person will find it.

What goes wrong

CauseWhat actually happensHidden costWhat you seeRisk level
Identifier never capturedNothing can be matchedAll ad spend unattributableEmpty gclid property on new contactsHigh
A workflow lowercases the valueUploads fail silentlyWeeks of missing data"Click not found" in the import logMedium
Native integration and import both primaryThe outcome counted twiceCost per conversion halvesConversions roughly double overnightHigh
Form submission used as the stageBidding learns from forms againThe whole exercise achieves nothingStage 1 volume high, later stages flatHigh
Meeting-booking tool in an iframeThe identifier never reaches the formYour best leads train nothingBookings with no identifierHigh
Contacts mergedThe surviving record loses the valueReturning enquirers disappearMatch rate falling over timeMedium

The healthcare caveat

If patient data will live in HubSpot, the sensitive-data configuration and the covered-services list decide what you may store where, and that is a separate conversation from this one. The scope questions are in HIPAA-compliant CRM. For the upload itself, keep the payload to the identifier, a neutral stage name and the time, which is the design in click-ID-only conversion feeds.

What it costs

RouteTypical costTime to the first verified uploadWhat it depends on
In-house with HubSpot workflows and a manual exportStaff timeDaysWhether forms already carry the identifier
Developer builds the export and uploadUpwork lists tag manager specialists at $20 to $49 an hour, median $30; senior US consultants at $85 to $175Days to weeksNumber of entry points, meeting tools
I build itAudit at $500 per ad account with a 90-day plan, credited toward the first month; the build is a fixed quote from the auditScoped in the audit, then about 30 clean days before bidding relies on itForms, meeting links, call tracking
AUDIT · $500 PER AD ACCOUNT

The audit covers your ad account, the tracking and the path from enquiry to booked patient, and ends with a 90-day plan. It is credited toward the first month if you continue with me.

You work with me directly. There are no account managers and no juniors.

Create the property today

Even if the upload is months away, add the identifier property and the hidden fields now. Every day without them is a day of enquiries that can never be connected to the clicks you paid for. If you want the whole loop built and reconciled, start with the audit, or see CRM-verified attribution.

Written by Lev Brovtsev, independent performance marketing consultant. I do the work myself. Last updated: September 2026.

Frequently asked questions

Does HubSpot capture the Google click identifier automatically?

Not reliably. Add a hidden field to every form and populate it from a first-party cookie, then verify on a real submission.

Should I use HubSpot's Google Ads integration or an offline import?

Either, not both as primary. The native integration is easier; an offline import gives exact control over which stage counts.

Which stage should I send?

The first one a human confirms and that happens often enough for bidding to learn from. For clinics that is usually consultation attended rather than booked.

What about meetings booked through HubSpot links?

Test whether the identifier survives the meeting flow. Embedded scheduling tools are a common place for it to disappear.

Can I send deal value?

Yes, and it improves bidding when values differ meaningfully. In healthcare, use weights rather than real prices if the amount would reveal the procedure.

How far back can I upload?

Google accepts a click for up to 90 days. For longer cycles, send an earlier verified stage inside that window.

Who does the work if I hire you?

I do: the properties, the capture, the export and the reconciliation. Nothing is subcontracted or delegated.

How do I verify it is working?

Open ten recent contacts from paid traffic: eight or more should carry the identifier with capitals intact. Then compare uploaded counts against HubSpot stage counts for the month.

Related

Dental PPC ConsultantDental SEO That Produces Implant Patients, Not PDFsDental Implant Marketing for 5-Figure Cases