If the only conversion your B2B campaigns report is a form submission, Smart Bidding gets very good at one thing: finding people who fill in forms.
The conversions you actually care about happen later, in HubSpot. A lead gets qualified. A first meeting gets booked. A deal closes for a real amount. Google Ads never hears about any of it unless you send it back.
HubSpot has a native route: its ads tool syncs conversion events to Google Ads, and the documented triggers are a lifecycle stage change or a HubSpot form submission, with a value you set per event. That covers the basics. But a September 2026 Idea asks HubSpot to send dynamic deal values instead of a fixed one, and when a user asked in 2023 how to get closed-won deals into Google Ads, the accepted answer was a Zapier zap.
So we built the missing step. Send Google Ads Conversion is a 0CodeTools workflow action that uploads an offline conversion to Google Ads, matched by the GCLID stored on the HubSpot record, at the moment your workflow decides a conversion happened.
Any trigger, any object, any value. It's live for every 0CodeTools user, at 1 credit per uploaded conversion.
How the loop works
Offline conversion import is a round trip: the click ID travels with the lead into HubSpot and goes back to Google when the real outcome happens. Click through the steps:
Everything depends on step 2. If the GCLID never reaches the HubSpot record, nothing can be matched to a click. The setup section covers how to capture it.
The action, field by field
A good starting point is a contact workflow that sends a conversion when a contact becomes a Sales Qualified Lead. Click the Send Google Ads Conversion step to open the configuration panel as it appears in HubSpot, and hover the (i) icons for the in-product help.
Send a conversion to Google Ads account 123-456-7890
Check branches in order: = UPLOADED, = FAILED, and None met.
Eight fields, and most of them you set once:
- Target record - the enrolled contact, deal or other record.
- Customer ID - the Google Ads account that owns the conversion action, e.g. 123-456-7890.
- Manager Account ID (optional) - only if you reach the ad account through a manager (MCC) account, for example via an agency.
- Conversion Action ID - the numeric ID of the conversion action (setup below shows where to find it).
- GCLID (Google Click ID) - the property that stores the click ID. HubSpot's default contact property is Google Click ID.
- Conversion Value - a static number, or a number token such as the deal amount.
- Currency Code - an ISO 4217 code such as USD or EUR.
- Order ID (optional) - a unique ID for this conversion. The record ID works well.
The step returns a Result of UPLOADED or FAILED, and the Branch routes on it. UPLOADED means Google accepted the upload. Google still processes and checks it afterwards, so read it as "sent and accepted", not "counted in your reports".
Fill in Order ID. The conversion time is the moment the action runs, so if a record goes through the workflow twice, Google may count two conversions. With the same Order ID, Google treats a repeat upload to the same conversion action as an update to the original instead.
Why this matters for Smart Bidding
Google is explicit about what it wants. Its offline conversion best practices say to create a separate conversion action for each stage of the funnel, upload at least daily, and assign values if you bid with Target CPA, Target ROAS or Maximize conversion value. For value-based bidding, you have to report two or more different values.
HubSpot is where those stages and values live. A fixed value per stage tells Google every closed deal is worth the same. The deal's Amount tells it which campaigns bring in the big ones.
Google's own Qualified leads and Converted leads goals are built on exactly this kind of offline CRM data.
Four more workflows worth building
These cover what HubSpot users keep asking for in the community: real deal values, every deal's amount, and closed-won revenue without a zap.
1. Closed-won revenue, with the deal amount
The request that came up most in the threads we read. A deal-based workflow fires on Closed Won and sends the deal's Amount as the value.
The catch: HubSpot stores the Google Click ID on the contact, not the deal. You don't need to copy it over. In the GCLID field's token picker, go to Associated to enrolled deal → Contact → All associated contacts → Contact: Most recently updated → Google Click ID.
When more than one record could match, HubSpot asks "Which records should be used if multiple match?" and lets you pick Most recently updated, Most recently created, First created, Most recently associated or First associated.
Send a conversion to Google Ads account 123-456-7890
Every deal reports its real amount, which gives value-based bidding the varied values it needs. In a contact-based workflow, the deal amount is available as the number token Amount (Deal: Most recently updated).
2. Booked meetings, with a safety delay
A booked first meeting is an early sign a lead is real, well before the deal closes. Trigger on Appointment Scheduled and send a fixed value to its own conversion action.
One rule matters here: Google rejects a GCLID conversion when the click happened less than 6 hours before the upload. Someone who clicks an ad and books straight away hits that, so put a native Delay of 6 hours first.
Delay for 6 hours
Send a conversion to Google Ads account 123-456-7890
Use the same delay for any trigger that can fire right after an ad click, such as a form submission.
3. One conversion action per stage
Google recommends a separate conversion action for each funnel stage, and usually bidding toward one of them. In HubSpot that's one workflow per milestone, each with its own Conversion Action ID and value. Workflows 1 and 2 are already two; add one for Contract Sent:
| Deal stage | Conversion action in Google Ads (example) | Conversion Value |
|---|---|---|
| Appointment Scheduled | Meeting booked, ID 111222333 | 200 |
| Contract Sent | Contract sent, ID 222333444 | 1000 |
| Closed Won | Closed deal, ID 333444555 | Amount (Enrolled deal) token |
Google Ads then reports every stage separately, and you choose which one bidding optimizes toward, without touching HubSpot.
If you also use HubSpot's native conversion events, send each milestone to its own conversion action so nothing is counted twice.
4. Add a failure branch to find the revenue Google never heard about
Some customers came from Google Ads without their click ID reaching HubSpot: a different device, a phone call, a form that didn't pass the parameter. The action returns FAILED for those. Keep that signal: add a Branch on the Result to workflow 1 instead of building a second Closed Won workflow.
Send a conversion to Google Ads account 123-456-7890
Check branches in order: = UPLOADED, = FAILED, and None met.
Google Ads upload is a custom deal property you create. A report on closed-won deals where it says Failed shows the revenue your bidding never learned from.
Much of that revenue will come from customers who never clicked an ad, so check the associated contact's Original Traffic Source before you blame tracking. If deals that did come from ads keep failing, fix GCLID capture before you touch bids.
Set it up
Most of the work happens once, in Google Ads. After that, every new conversion is one more workflow step.
In Google Ads
- Turn on auto-tagging, so every ad click carries a GCLID. Google lists it as a prerequisite for importing conversions by GCLID.
- Create an offline conversion action in Goals that imports conversions from clicks. Google's help calls the option Conversions offline; its API docs call the source import from clicks.
- Set the click-through conversion window to cover your sales cycle. The default is 30 days, and it can go up to 90 depending on the source.
- Copy the Conversion Action ID. Open the conversion action and copy the number after
ctId=in your browser's address bar. - Wait 4-6 hours before the first upload. Google says conversions uploaded in the first 4-6 hours after creating a new conversion action might take 2 days to appear.
In HubSpot: get the GCLID onto the record
HubSpot's default contact property Google Click ID (listed as "Google ad click ID" in HubSpot's property reference) is set automatically by HubSpot based on the GCLID provided by Google Ads. Check a few contacts you know came from ads before you build anything.
For clean attribution, keep the HubSpot tracking code on landing pages, capture leads with HubSpot forms, and turn on ad auto-tracking when you connect Google Ads in HubSpot. Google auto-tagging is compatible with HubSpot's ad tracking template.
Some teams also capture it themselves: a custom contact property with the internal name gclid, added to the form as a hidden field. HubSpot fills form fields, including hidden ones, from query string parameters that match a property's internal name.
Google's own setup guide pairs the hidden field with a script that stores the GCLID for 90 days, which covers visitors who browse a few pages before they convert. GCLIDs are case sensitive, so store them exactly as they arrive.
In 0CodeTools
- Install 0CodeTools from the HubSpot Marketplace, or create a free account.
- Connect Google Ads under Integrations → Google Ads. You sign in with the Google account that has access to the ad account. 0CodeTools shows what the connection is for: "Manage your Google Ads campaigns (upload conversions)" and "View your email address (to label this connection)". The integration passed Google's verification review before launch.
- Add Send Google Ads Conversion to a workflow, in the classic editor or HubSpot's new workflow builder, and map the fields. Full workflows start at Professional (Marketing Hub, Sales Hub, Service Hub, Data Hub, Smart CRM or Revenue Hub).
- Test with one record you know came from an ad. Check that the step returned
UPLOADED, then look for the conversion in Google Ads a few hours later.
No Google Ads API developer token, and no manager account just to connect. Uploads go through Google's Data Manager API, which Google names as the primary route since the Google Ads API stopped accepting new adopters of offline conversion imports on June 15, 2026.
Native HubSpot events vs the workflow action
Use both; they answer different questions. For lifecycle stages, HubSpot's native events may be all you need.
| HubSpot ads conversion events | 0CodeTools Send Google Ads Conversion | |
|---|---|---|
| Included with | Marketing Hub Starter (5 events), Professional (50), Enterprise (100) | 0CodeTools, in a HubSpot workflow (Professional or Enterprise) |
| What triggers it | Lifecycle stage change or HubSpot form submission (documented triggers) | Anything a workflow can trigger on |
| Object | Contacts | Contacts, companies, deals, tickets, custom objects |
| Conversion value | A value you set per event | A static number or any number token, e.g. deal Amount |
| Matching | GCLID or hashed contact data (enhanced conversions for leads) | GCLID only |
| Result to branch on | No | UPLOADED or FAILED |
Native details per HubSpot's knowledge base, September 2026.
Matching is where the native events are stronger. Google's upgraded method, enhanced conversions for leads, matches conversions with hashed customer data such as email addresses, and Google recommends it for advertisers who haven't adopted offline conversion import yet.
HubSpot's native events can use it. The 0CodeTools action matches by GCLID only today, so leads without a click ID can't be sent.
Other routes: Google Ads' own Data Manager has a direct HubSpot connection with conditions built on the Lifecycle Stage field, running at most daily. Google documents an official Zapier integration that needs a paid Zapier account (see how to replace Zapier with HubSpot workflows). With Data Hub Professional or Enterprise, a Custom code action can call Google's API directly.
Pick the workflow action when the milestone isn't a lifecycle stage or form submission, when the value should come from the record, or when you want a result to branch on.
Limits, honestly
- GCLID only. No enhanced conversions or hashed-email matching yet. A record without a GCLID returns
FAILED. - The conversion time is when the step runs. No conversion-time field and no backfill, so trigger the workflow when the milestone happens.
- Clicks under 6 hours old are rejected. Add a Delay for triggers that can fire right after a click.
- Google's time limits apply. Google doesn't import GCLID conversions uploaded more than 90 days after the click, or outside the conversion action's click-through window.
- Reports aren't instant. Conversions can take several hours to show in Google Ads reports.
- No retractions. The action sends conversions; it doesn't remove them.
What it costs
Each uploaded conversion uses 1 credit on any 0CodeTools plan, and failed uploads are free. The free plan includes 100 actions a month with no credit card, and paid plans go from $49/month for 3,000 actions to $249/month for 70,000. See 0CodeTools pricing.
Tell Google Ads what actually counts. See the Send Google Ads Conversion product page, or install 0CodeTools from the HubSpot Marketplace.
Related guides
- Send Google Ads Conversion - the product page, with more use cases and a setup checklist.
- How to replace Zapier with HubSpot workflows - which zaps to move into HubSpot and which to keep.
- Send email with Gmail from HubSpot workflows - the other new action: 1:1 email from real Gmail and Google Workspace inboxes.
