HubSpot tracking

HubSpot Conversion Tracking: Forms, CRM & Offline Conversions

This is for B2B and service businesses that capture leads with HubSpot forms and run Google or Meta ads to them. Form fills are only half the story: what matters is which leads become qualified and which become customers, and that lives in the HubSpot CRM. I track forms properly on your site and send lifecycle stages and deals back to Google Ads and Meta.

HubSpot · Lead generation
  • HubSpot form submissions tracked on success, on HubSpot CMS or any site
  • gclid, fbclid and UTMs stored on the contact record
  • Lifecycle stages and deals sent back as offline conversions
  • Clear choice between HubSpot's ads tool and a custom pipeline
Quick answer

Proper HubSpot tracking means firing a lead event when a HubSpot form actually submits, saving click IDs and UTMs on the contact, and sending CRM milestones such as MQL, SQL and closed won back to Google Ads and Meta as offline or Conversions API events. Ad platforms then optimise for leads that turn into revenue, not just form fills.

Tracking flow

How tracking works on HubSpot

The events I set up on HubSpot, and where each one is sent.

Why it breaks

Why HubSpot tracking goes wrong

Embedded forms are hard to see

HubSpot forms are rendered by HubSpot's script, sometimes inside an iframe. GTM's built-in form trigger usually doesn't see them, so submissions go untracked or are tracked on button clicks.

Click IDs never reach the CRM

HubSpot records original source, but the gclid or fbclid from the ad click often isn't saved on the contact. Without it, you can't upload offline conversions that Google Ads can match.

Ads optimise for any form fill

If the only conversion is a form submission, Google Ads and Meta chase volume. Spam and unqualified leads count the same as real buyers.

Two sources for the same lead

HubSpot's ads tool can sync events to Google Ads and Meta, and GTM may send the same form fill from the browser. Without a plan, leads are counted twice.

Meetings and chat are separate

Meeting scheduler bookings and chat conversations don't behave like normal forms, so they're often left out of ad conversions altogether.

What I set up

My HubSpot tracking setup

Website & form tracking

  • GTM on HubSpot CMS pages or your own site
  • Listener for HubSpot form submission success events
  • Form name and ID passed with each lead
  • Meeting scheduler bookings tracked as a separate conversion
  • Phone, email and WhatsApp click tracking

CRM attribution

  • Hidden fields or contact properties for gclid, gbraid, wbraid and fbclid
  • UTM values stored on first conversion
  • Lifecycle stage and deal stage definitions agreed with sales
  • Conversion values per stage where it makes sense

Offline conversions

  • HubSpot ads tool event sync, or a custom pipeline, chosen per account
  • Google Ads offline conversions for MQL, SQL and closed won
  • Enhanced conversions for leads using hashed email and phone
  • Meta Conversions API events for CRM stages
  • Workflows that trigger sends when a stage changes

QA & reporting

  • Test contacts moved through each stage and checked in Google Ads and Meta
  • Duplicate checks between browser and CRM events
  • Consent Mode v2 and HubSpot's cookie banner settings aligned
  • Simple report of leads, qualified leads and deals by campaign
Event map

Events I track on HubSpot

EventWhen it firesSent to
generate_lead / LeadHubSpot form reports a successful submissionGA4, Google Ads, Meta Pixel + CAPI
book_appointment / ScheduleMeeting booked through the HubSpot schedulerGA4, Google Ads, Meta
contact_clickClick on a tel:, mailto: or WhatsApp linkGA4, Google Ads
marketing_qualified_leadContact's lifecycle stage changes to MQLGoogle Ads (offline), Meta CAPI
sales_qualified_leadContact's lifecycle stage changes to SQL or an opportunity is createdGoogle Ads (offline), Meta CAPI
closed_won / PurchaseDeal moves to closed won, with deal amountGoogle Ads (offline), Meta CAPI, GA4
Process

How the setup works

  1. 01

    Audit

    I review your forms, HubSpot tracking code, ads tool connections and lifecycle stages, and check what Google Ads and Meta currently count.

  2. 02

    Agree the funnel

    With your sales team we define which stages count as qualified and which deals count as won, and what each is worth.

  3. 03

    Track the website

    I set up GTM, form success tracking and click ID capture, so every new contact carries the data needed for offline conversions.

  4. 04

    Connect the CRM

    I set up the stage-based events through HubSpot's ads tool or a custom workflow and server pipeline, then test with real contacts.

  5. 05

    Switch bidding goals

    Once qualified-lead conversions are flowing, we decide when to make them the primary goal in Google Ads and Meta.

Tracking HubSpot forms reliably

HubSpot forms tell the page when they've been submitted successfully. I listen for that signal and push a generate_lead event to the dataLayer with the form ID, which GTM sends to GA4, Google Ads and Meta. It works the same on HubSpot CMS pages and on a WordPress or custom site with embedded HubSpot forms, and it ignores submissions that fail validation.

At the same time, hidden fields or a small script save the gclid, fbclid and UTMs on the contact. That's what makes the offline step possible later.

Sending lifecycle stages back to Google Ads and Meta

HubSpot's ads tool can send CRM events, such as a contact becoming an MQL or a deal closing, back to connected Google Ads and Meta accounts. For many accounts that's enough, and it's the simplest route.

When you need more control, such as custom values, extra platforms or stages based on deal properties, I use HubSpot workflows to send stage changes to server-side GTM or the ad platforms' APIs. Either way, Google Ads matches the stored click ID and hashed email, and Meta matches the hashed customer data, so bidding can learn from leads that turned into revenue.

FAQ

HubSpot tracking FAQ

How do I track HubSpot form submissions in GA4 and Google Ads?

Listen for HubSpot's form submission success event in GTM and push a lead event to the dataLayer. Then fire GA4 and the Google Ads conversion from that event. GTM's built-in form trigger usually doesn't detect HubSpot forms.

Can HubSpot send offline conversions to Google Ads?

Yes. HubSpot's ads tool can sync lifecycle stage events to Google Ads, and workflows or a custom pipeline can do the same with more control. The contact needs a stored click ID or hashed email for Google Ads to match it.

Can HubSpot CRM stages go to Meta Conversions API?

Yes, either through HubSpot's Meta connection or a custom server pipeline. Meta matches on hashed email, phone and other customer data, and the events can be used to optimise for qualified leads.

Should I optimise Google Ads for form fills or qualified leads?

Start with form fills while the offline data builds up, then move to qualified leads or deals once there's enough volume. That keeps bidding stable while you shift it toward leads that actually buy.

Do I need GTM if I use HubSpot CMS?

HubSpot adds its own tracking code, but GTM is still the easiest way to manage GA4, Google Ads and Meta tags together. It goes in the site header HTML in HubSpot's website settings.

Guides

Read next

Want your HubSpot tracking fixed?

Get a free audit of your tracking and ad account. Usually replies within 1–2 hours.