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:

Ad click. With auto-tagging on, Google adds a gclid parameter to the landing page URL for every ad click.

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.

Trigger enrollment for contacts
Only enroll contacts that meet these conditions
Group 1
Lifecycle stage is any of Sales Qualified Lead
Re-enroll offDetails
+
1. Send Google Ads Conversion

Send a conversion to Google Ads account 123-456-7890

Click to see configuration
+
2. Branch

Check branches in order: = UPLOADED, = FAILED, and None met.

3 branches - click to see paths
+
End

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.

Trigger enrollment for deals
Only enroll deals that meet these conditions
Group 1
Deal stage is any of Closed Won (Sales Pipeline)
Re-enroll offDetails
+
1. Send Google Ads Conversion

Send a conversion to Google Ads account 123-456-7890

Click to see configuration
+
End

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.

Trigger enrollment for deals
Only enroll deals that meet these conditions
Group 1
Deal stage is any of Appointment Scheduled (Sales Pipeline)
Re-enroll offDetails
+
1. Delay

Delay for 6 hours

+
2. Send Google Ads Conversion

Send a conversion to Google Ads account 123-456-7890

Click to see configuration
+
End

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 stageConversion action in Google Ads (example)Conversion Value
Appointment ScheduledMeeting booked, ID 111222333200
Contract SentContract sent, ID 2223334441000
Closed WonClosed deal, ID 333444555Amount (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.

Trigger enrollment for deals
Only enroll deals that meet these conditions
Group 1
Deal stage is any of Closed Won (Sales Pipeline)
Re-enroll offDetails
+
1. Send Google Ads Conversion

Send a conversion to Google Ads account 123-456-7890

+
2. Branch

Check branches in order: = UPLOADED, = FAILED, and None met.

3 branches - click to see paths
+
End

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

  1. Turn on auto-tagging, so every ad click carries a GCLID. Google lists it as a prerequisite for importing conversions by GCLID.
  2. 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.
  3. 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.
  4. Copy the Conversion Action ID. Open the conversion action and copy the number after ctId= in your browser's address bar.
  5. 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

  1. Install 0CodeTools from the HubSpot Marketplace, or create a free account.
  2. 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.
  3. 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).
  4. 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 events0CodeTools Send Google Ads Conversion
Included withMarketing Hub Starter (5 events), Professional (50), Enterprise (100)0CodeTools, in a HubSpot workflow (Professional or Enterprise)
What triggers itLifecycle stage change or HubSpot form submission (documented triggers)Anything a workflow can trigger on
ObjectContactsContacts, companies, deals, tickets, custom objects
Conversion valueA value you set per eventA static number or any number token, e.g. deal Amount
MatchingGCLID or hashed contact data (enhanced conversions for leads)GCLID only
Result to branch onNoUPLOADED 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

Frequently asked questions

Can HubSpot send offline conversions to Google Ads natively?+
Yes. HubSpot's ads tool can sync conversion events to Google Ads on Marketing Hub Starter (5 events), Professional (50) and Enterprise (100). HubSpot documents two triggers for them: a lifecycle stage change or a HubSpot form submission, with a value you set per event. The Send Google Ads Conversion workflow action from 0CodeTools adds other triggers such as deal stages, any object type, values from tokens like the deal amount, and a Result you can branch on.
Which HubSpot plan do I need?+
A Professional or Enterprise subscription of Marketing Hub, Sales Hub, Service Hub, Data Hub, Smart CRM or Revenue Hub, since that's where full workflows start. Add 0CodeTools, which has a free plan. On Marketing Hub Starter, HubSpot's native ad conversion events are the built-in route.
Where does the GCLID come from in HubSpot?+
With auto-tagging on in Google Ads, every ad click carries a gclid parameter on the landing page URL. HubSpot's default Google Click ID contact property is set automatically by HubSpot based on that GCLID; check a few contacts you know came from ads to confirm it is filled. Some teams also capture it with a hidden form field. Map that property into the action's GCLID (Google Click ID) field.
Can I send the deal amount as the conversion value?+
Yes. In a deal-based workflow, insert the deal's Amount token into Conversion Value and pull the GCLID from the associated contact with the Google Click ID (Contact: Most recently updated) token. In a contact-based workflow, use the Amount (Deal: Most recently updated) number token.
What happens if a record has no GCLID?+
There is no click ID to match, so the action can't upload the conversion. It returns Result = FAILED and uses no credit. Branch on that result to flag the record, create a task for the owner, or end the workflow.
How long until conversions show up in Google Ads?+
The action uploads the conversion when the workflow step runs, and UPLOADED means Google accepted it. Google then processes it, which can take several hours before it appears in reports, and up to 2 days if you upload within 4-6 hours of creating a new conversion action. Google also rejects a conversion whose click happened less than 6 hours before the upload, so add a Delay before the action for triggers that fire right after an ad click.
Do I need a Google Ads developer token or a manager account?+
No. You connect the Google account that has access to your Google Ads account in 0CodeTools under Integrations → Google Ads. If you reach the ad account through an agency or manager (MCC) account, enter that Manager Account ID in the action.
Does it support enhanced conversions for leads?+
Not today. The action matches by GCLID only. Google's enhanced conversions for leads match on hashed customer data such as email, and HubSpot's native conversion events can use that method.
How much does it cost?+
Each uploaded conversion uses one 0CodeTools action credit, and failed uploads are free. The free plan includes 100 actions per month with no credit card, and paid plans start at $49/month.