Send Google Ads offline conversions from HubSpot workflows.
Send Google Ads Conversion is a 0CodeTools action for HubSpot workflows that uploads an offline conversion to Google Ads, matched by the GCLID on the record. HubSpot's documentation describes its built-in Google Ads events as firing on a lifecycle stage change or a form submission, with one value you enter per event, whatever the deal is worth. This action runs in any workflow, including a deal workflow at Closed Won, and sends the deal's Amount as the value.
987654321USDWithout offline conversions, Google Ads can't tell a spam form fill from a signed deal.
Asked in a Google Ads Community thread about a Performance Max campaign that gets only spam leads, a Diamond Product Expert said Google can't tell good leads from bad unless you send the validated ones back as offline conversions. Google says Smart Bidding works with offline conversion imports when you upload at least daily and assign values. 0CodeTools adds that upload as a step in your HubSpot workflows.
Spam leads count as wins
When the form fill is the conversion, Performance Max counts spam and people who can't buy as leads and keeps optimizing toward more of them. Instead of trying to flag the junk, send a separate conversion for the leads sales qualified, worth far more than a raw form fill, and bid on that.
Every deal gets the same value
In HubSpot's documentation, each native Google Ads event carries one value you enter, so a small deal and a big one look the same to Target ROAS. Some teams also report Google Ads showing a fraction of the deal value they see in HubSpot. The action sends the deal's Amount instead, from any trigger a workflow supports.
Conversions go missing with no error
Teams report events marked as synced in HubSpot and far fewer conversions in Google Ads, with no error to act on. The action returns a Result you can branch on for every record: FAILED when Google's API refuses the upload or the record has no GCLID, UPLOADED when Google accepts it for processing.
No GCLID on the HubSpot record, no match in Google Ads.
Google Ads matches an offline conversion to the ad click by its GCLID, and HubSpot stores it on the contact, in the default property Google Click ID. With Zapier, HubSpot Community users describe adding a custom GCLID deal property and a workflow that copies the value over; a HubSpot deal workflow reads it from the deal's contact instead. Click the steps to follow one lead.
What Send Google Ads Conversion needs: the ad account, the conversion action, the GCLID and a value.
This is Send Google Ads Conversion as it appears in the HubSpot workflow editor, set to send a conversion worth 500 when a contact becomes a Sales Qualified Lead and to create a task when the upload fails. Click the step to open it; the info icons show the in-product help.
- Customer ID and Conversion Action ID come from Google Ads
- GCLID maps to HubSpot's Google Click ID property
- Conversion Value takes a number or a token like deal Amount
- Order ID: re-sending the same one updates that conversion instead of adding another
Send a conversion to Google Ads account 123-456-7890
Check branches in order: = UPLOADED, = FAILED, and None met.
Click the steps to expand them. Sample data.
Send Google Ads the leads sales accepted
If sales rejects a big share of your Google leads, the form fill is the wrong thing to optimize on. When a contact becomes a Sales Qualified Lead, send a conversion with a value well above a raw form fill. Google recommends a separate conversion action for each funnel stage, so give SQLs their own.
- Contact workflow on Lifecycle stage
- Static value, for example 500
- Record ID as Order ID, so a re-enrolled contact updates the same conversion
111222333500USDSend the Closed Won deal amount to Google Ads, not a fixed value
A deal-based workflow fires when the deal is marked Closed Won, reads the Google Click ID from the deal's contact and sends the deal's Amount as the value. Google now sees the sale, not just the form fill. Target ROAS and Maximize conversion value need real, varied values to tell a small deal from a big one.
- Deal-based workflow, GCLID from the associated contact
- Conversion Value = the deal's Amount
- Deal record ID as Order ID, so each won deal from the same contact is its own conversion (when the conversion action counts every conversion and the click is inside its window)
USDSend HubSpot deal stages to Google Ads without adding lifecycle stages
HubSpot's native events trigger on lifecycle stage changes or forms, so some teams add lifecycle stages just for ad tracking. Here one deal workflow branches on Deal stage and sends booked appointments, sent contracts and closed deals to their own conversion actions, each with its own value. Bid on the stage that matters and still see the rest in reporting.
- Branch on Deal stage, with re-enrollment on
- One Send Google Ads Conversion step in each path, each with its own Conversion Action ID
- Appointment Scheduled: value 200 · Contract Sent: 1000 · Closed Won: the deal Amount
333444555USDSee which closed deals Google Ads never got
Teams report Google Ads leads that reach HubSpot with an empty Google Click ID, for example from a form embedded in an iframe on another site or a custom form that creates contacts through the API. Those conversions go missing quietly. Branch on FAILED to create a task or set a property, so you can see how much revenue Google never heard about.
- Branch on Result of the conversion step
- Flag records whose upload returns FAILED, such as those with no GCLID
- Report on the gap in HubSpot
Where to start: Google Ads, HubSpot, then 0CodeTools.
An upload fails when the record has no GCLID or the conversion falls outside the conversion action's click-through window, so check both before the first run. The full walkthrough, with where to find each ID, is in our step-by-step setup guide.
In Google Ads
- Turn on auto-tagging, so every ad click carries a GCLID.
- In Goals, create a conversion action that imports offline conversions from clicks (Google's help calls the option Conversions offline).
- Set its click-through window to cover your sales cycle (default 30 days, up to 90). Open it and copy the number after ctId= in the address bar: that is your Conversion Action ID. Wait 4-6 hours before the first upload.
In HubSpot
- Good practice: keep the HubSpot tracking code on your landing pages and capture leads with HubSpot forms, which HubSpot's ad attribution relies on.
- Check that contacts from ads have a value in Google Click ID, HubSpot's default property for the GCLID.
- Pick the moment of conversion: a lifecycle stage, a meeting, a deal stage.
In 0CodeTools
- Go to Integrations → Google Ads and connect a Google account with access to the ad account.
- Add Send Google Ads Conversion to the workflow and map the fields.
- Test on one record first: narrow the enrollment trigger to it, check that the step returned UPLOADED, then widen the trigger.
Need a Google Ads conversion from HubSpot on something other than a lifecycle stage or a form?
HubSpot's ads tool already sends conversion events to Google Ads, and for lifecycle stages it may be all you need. The workflow action covers what those events don't: other triggers, other objects and per-record values.
Native details per HubSpot's knowledge base, September 2026. Two more routes exist: Google Ads can pull lifecycle-stage conversions from HubSpot through its Data Manager connector, at most once a day, and Google's Help Center has its own pages on importing offline conversions through Zapier. If you use more than one route, send each milestone to its own conversion action so nothing is counted twice.
Pick the trigger, the record, the value and the ad account on every step.
Uploads go through Google's Data Manager API, which Google has required for new offline conversion integrations since June 15, 2026.
Any trigger
Lifecycle stages, lead status, meetings, deal stages, app events, custom properties such as a PQL flag. If a workflow can react to it, it can become a conversion.
Any object
Run it in contact, company, deal, ticket or custom-object workflows. Pull the GCLID from the enrolled or an associated record.
Deal amount or a fixed value
Send a fixed number or a token such as the deal Amount, with an ISO 4217 currency code such as USD or EUR.
One action per stage
Each step names its own Conversion Action ID, so SQLs, meetings and revenue report separately.
Agency and MCC access
Reach the ad account through an agency or manager (MCC) account? Add the Manager Account ID. Each step names its own Customer ID, so one portal can send to each client account the connected Google account can access.
Result + Order ID
Branch on UPLOADED or FAILED, and pass an Order ID so a re-upload updates the same conversion instead of counting twice.
Why a HubSpot offline conversion can be rejected or show up late in Google Ads.
GCLID only, for now
The action matches by click ID, so records without one return FAILED. For advertisers new to offline imports, Google recommends enhanced conversions for leads, which match on hashed contact data such as email; HubSpot's native events support it, and this action doesn't today.
Conversion time is when the step runs
There's no separate conversion-time field. Google only accepts the conversion inside the conversion action's click-through window (30 days by default, up to 90) and rejects clicks less than 6 hours old, so trigger the action when the milestone happens and add a 6-hour Delay after form-submission triggers.
Not instant in reports
The upload is sent when the step runs, and UPLOADED means Google's API accepted it. Google still validates it, and imported conversions can take several hours to appear in reports.
Questions about HubSpot offline conversions in Google Ads.
Sending offline conversions to Google Ads through Zapier today? Read how to replace Zapier with HubSpot workflows. Also new in 0CodeTools: Send email with Gmail.
Send your next Closed Won deal to Google Ads.
Install 0CodeTools on the free plan, connect your Google Ads account, and add Send Google Ads Conversion to the workflow where a lead qualifies or a deal is won. If GCLIDs aren't reaching HubSpot in the first place, tell us about your forms and funnel and we can set up the tracking end to end.
- Install from the HubSpot Marketplace
- Connect Google Ads in 0CodeTools under Integrations → Google Ads
- Map GCLID, value and conversion action, then test on one record
