When HubSpot form submissions are not showing up as conversions in Google Ads, the cause is almost always one of six things: the form shows an inline thank-you message but the Google Ads conversion tag only fires on a thank-you page URL, Google Tag Manager is listening for a generic form submit that HubSpot's JavaScript form never produces, the tag listens for the wrong HubSpot event for the form's editor version, the only lead conversion in the account is a GA4 import, a HubSpot pop-up or other overlay is stopping people from submitting, or the Conversion Linker and consent setup drop the click ID. You fix it by firing the Google Ads conversion tag from HubSpot's own submission event through a Tag Manager custom event, passing the email and phone for enhanced conversions, then confirming the hit in Tag Assistant.
A HubSpot form is a JavaScript form. Embed code (or a HubSpot page module) loads HubSpot's forms script, which renders the form. When a visitor submits, the script posts the data to HubSpot, then does whatever the form's post-submit setting says: show a thank-you message in place of the form, or redirect to a page or URL. Google Ads only learns about the lead if a Google Ads Conversion Tracking tag (or the Google tag with a conversion event) fires in the browser after that submission, carrying the gclid that the Conversion Linker stored when the visitor clicked the ad. HubSpot announces the submission in the browser as an event: hs-form-event:on-submission:success for forms built in the updated forms editor, and a message event with type hsFormCallback and event name onFormSubmitted for legacy forms.
The six causes we find most often.
We hit the first one on an account we took over: the main paid landing page's HubSpot form showed an inline thank-you message, the Google Ads tag fired only on thank-you URLs, and the account recorded zero direct form conversions. Bidding was learning only from a GA4 form_submit import.
- Inline thank-you message with a page view trigger: the form is set to Show thank you message, so the URL never changes, and a trigger built on Page URL contains thank-you never matches
- Generic Form Submission trigger: Tag Manager's built-in Form Submission trigger listens for a browser submit event, and HubSpot's script handles the submit itself, so in our audits that trigger is unreliable or silent on HubSpot forms
- Wrong HubSpot event for the editor version: the global form events for the updated forms editor do not apply to legacy forms, and the legacy hsFormCallback messages do not apply to updated editor forms, so a listener written for one is silent on the other
- GA4 import as the only lead signal: a GA4 key event such as form_submit is imported into Google Ads as the primary conversion, and form_submit fires for any form GA4 detects, including newsletter and search forms
- Overlay covering the form: a HubSpot pop-up CTA or chat window sits over the form on desktop, so fewer people submit and the drop looks like a tracking failure
- Click ID dropped: no Conversion Linker tag, or a consent setup that blocks ad storage, so the conversion fires but cannot be tied to the ad click
How to verify what actually fires.
Three checks, in this order.
HubSpot form settings. Open the form in HubSpot. In the updated forms editor, select On submit, then the Options tab, and note whether it says Show thank you message or Redirect to a page, URL, Meeting, or Payment link. Note also whether it was built in the updated or the legacy editor, because that decides which event you listen for.
Tag Manager preview and Tag Assistant. In Google Tag Manager click Preview, enter the landing page URL, and submit a test lead. In the Tag Assistant event timeline you want a custom event (we name it hubspot_form_success) right after the submit, with the Google Ads conversion tag under Tags Fired. If only clicks and timers appear, nothing is listening to HubSpot.
Google Ads conversion status. In Google Ads, open Goals, then Conversions, then Summary, and read the status column for the form conversion action. Google's help center describes No recent conversions as no conversions recorded in the last 7 days, and Tag inactive as the tag no longer being seen with no conversions in the last 7 days.
Diagnose top to bottom.
Stop at the first layer that fails.
hs-form-event:on-submission:success on the window. HubSpot documents that this only covers forms built in the updated editor. Legacy forms post a message event with event.data.type equal to hsFormCallback and event.data.eventName equal to onFormSubmitted, which HubSpot describes as firing after the submission has persisted. Do not use the legacy onFormSubmit event: HubSpot marks it deprecated and points to onBeforeFormSubmit, which fires before the submission is saved and so counts failed submits.dataLayer.push({event: 'hubspot_form_success', hs_form_id: ...}). For updated editor forms, HubSpot's HubSpotFormsV4.getFormFromEvent(event) returns the form instance, and its getFormFieldValues() method returns the submitted fields. For legacy forms, the onFormSubmitted message carries submissionValues. Include the form ID so newsletter forms can be excluded.| Symptom | Likely cause | Fix |
|---|---|---|
| Zero form conversions, leads arriving in HubSpot | Inline thank-you message, tag triggers on thank-you URL | Fire the tag from HubSpot's submission event via a Custom Event trigger |
| Tag Assistant shows no event after submit | No listener, or listener for the wrong editor version | Listen for hs-form-event:on-submission:success and the legacy hsFormCallback onFormSubmitted |
| Conversions counted when submits fail validation | Tag fires on onBeforeFormSubmit, deprecated onFormSubmit, or a button click | Fire only on the success event or onFormSubmitted |
| Conversions roughly double after the fix | Old URL trigger and new event trigger both on the tag, or GA4 import still primary | Keep one trigger; set the GA4 import to secondary |
| Newsletter signups counted as leads | Listener or GA4 form_submit covers every form | Filter the trigger on the lead form's ID |
| Conversions recorded, enhanced conversions not matching | No user-provided data on the tag, or customer data terms not accepted | Add a User-Provided Data variable with email and phone; accept the terms |
| Lead volume fell on desktop only | HubSpot pop-up or chat covering the form | Exclude paid landing pages in the CTA's Website URL targeting |
| Status stuck at Unverified | Tag not published, or Conversion Linker missing | Publish the container; add a Conversion Linker tag on all pages |
| HubSpot Paid Search revenue far above Google Ads | UTM-tagged Google Business Profile link classified as Paid Search | Remove UTMs from the profile link or report paid by gclid and campaign |
Redirect vs inline thank-you message.
Both work if the trigger matches the setting. A redirect lets you use a simple page view trigger on the confirmation URL and gives GA4 a clean page to report on, but anyone who reloads or bookmarks the thank-you page fires the conversion again unless you count one conversion per click in the conversion action settings. An inline message keeps the visitor on the landing page and never produces a page view, so it requires the event approach. HubSpot also warns against redirecting inside the onFormSubmitted embed callback, since it can prevent the submission.
Embedded vs raw HTML forms.
Embedded forms use HubSpot's standard styling and script. Raw HTML is a legacy editor option that renders the form without HubSpot's default styling so your site's CSS controls it; HubSpot says it is not available in the updated editor. For tracking, the difference that matters is the editor, not the styling: raw HTML forms are legacy forms, so they use the hsFormCallback messages. Read field values from the event payload, not CSS selectors, since HubSpot controls the markup.
The same listener pattern feeds GA4 if you want a clean lead event there too, which is covered in GA4 conversions not showing, and the general Tag Manager checks are in Google Tag Manager tag not firing.
What is normal and what is a red flag.
Normal: HubSpot shows more form submissions than Google Ads shows conversions. Google Ads counts only submissions it can tie to an ad interaction within the conversion window. Normal: a new conversion action sits at Unverified for a few hours after the tag goes live; Google describes verification as taking a few hours. Normal: No recent conversions on a low volume account, since that label covers any 7 day stretch without one.
Red flag: zero Google Ads tag conversions for a week while HubSpot shows paid leads with a gclid. Red flag: Google Ads conversions exceed HubSpot submissions from paid traffic, which means double triggers or a GA4 import counted alongside the tag. Our conversion tracking audit checklist covers these alongside the rest of the account, and enhanced conversions in Google Ads covers the matching side in depth.
Why are my HubSpot form submissions not showing as conversions in Google Ads?
Usually the conversion tag waits for a thank-you page that never loads, because the form shows an inline message. Fire the tag from HubSpot's submission event through a Tag Manager custom event instead, then confirm it in Tag Assistant preview.
What is the HubSpot form submit event for Google Tag Manager?
For forms built in HubSpot's updated forms editor, listen on the window for hs-form-event:on-submission:success. For legacy forms, listen for a message event where event.data.type is hsFormCallback and event.data.eventName is onFormSubmitted.
Should I import GA4 form_submit into Google Ads or use the Google Ads tag?
Use the Google Ads tag fired on HubSpot's success event as the primary lead conversion. GA4's form_submit is an enhanced measurement event that fires for any form it detects, so it can count newsletter or search forms. Keep the import as secondary.
How do I send enhanced conversions from a HubSpot form?
Turn on enhanced conversions under Goals, then Conversions, then Settings in Google Ads. In Tag Manager, read the email and phone from HubSpot's submission event, push them to the data layer, and map them into a User-Provided Data variable attached to the conversion tag. Email is Google's preferred field.
Why does HubSpot show Google Business Profile visits as Paid Search?
HubSpot classifies a visit as Paid search when any utm_source, utm_medium, or utm_campaign parameter is present and the referring domain is google.com. A UTM-tagged profile link clicked from Google Search meets that rule.