Question from Reddit user:
Hi,
I’m having a few issues tracking the contacts that have been generated from Google Ad campaigns.
Here’s the current process;
A user clicks on a Google Advert.
They send a website contact form via Gravity Forms (WordPress).
All fields including UTM parameter fields are sent to HubSpot.
A new contact is created in HubSpot (again including all UTM fields).
Then when I look into HubSpot Marketing > Ads, I can see no new contacts have been created against the integrated Google Ads account.
I can see the live campaigns, but no contacts are being generated against them.
The Setup:
Google Ads has been connected to HubSpot with Auto tracking enabled.
WordPress website utilises Gravity Forms.
Gravity Forms has been connected to HubSpot using the Gravity Form HubSpot add-on.
We use the WordPress plugin UTMGrabber HandL to sync the UTM parameters from the campaigns with Gravity Forms.
New contacts imported into HubSpot show the UTM parameters.
UTM parameters being used – utm_medium, utm_source, utm_term & utm_campaign.
Any ideas?
Many Thanks
Alex
Answer from Nabil:
The short answer is:
Your issue is highly likely due to a technical breakdown in how the non-HubSpot form, Gravity Forms, communicates the vital HubSpot tracking information to the CRM, despite successfully passing the generic UTM parameters.
For a contact to be attributed in the HubSpot Ads dashboard, HubSpot requires its own proprietary tracking cookie to be associated with the form submission, which is not reliably done by third-party form integrations, even with UTMs present.
The simple fix is to ensure the HubSpot tracking code is installed and actively tracking on the page, and then configure your Gravity Forms setup to specifically pass the HubSpot tracking parameters like hutk (cookie) and pageUrl via the Gravity Forms to HubSpot add-on or a custom method, as these are mandatory for the Ads tool to create a connection between the ad click and the new contact.
The long answer is:
Itβs great that you’ve got the basic UTM tracking working and the contacts are being created in HubSpot with the correct utm_medium
, utm_source
, and utm_campaign
fields populated.
This tells you the Gravity Forms add-on and UTMGrabber HandL are functioning to capture the standard web analytics data.
However, for a contact to appear in the HubSpot Ads dashboard specifically, the system requires more than just UTMs.
The Ads tool relies on a direct connection between the ad click, which is registered with a unique ID and a session, and the form submission that converts the visitor into a contact.
This link is primarily established using the HubSpot tracking cookie, or hutk
, which is placed when the user clicks the ad, and the page URL from the conversion event.
When you use a non-HubSpot form like Gravity Forms, even if you pass UTMs, the form submission itself might not be providing the HubSpot API with the necessary tracking context (the hutk
and page URL) that a native HubSpot form automatically includes.
This means the contact is created successfully, and HubSpot knows the source is “Paid Search” from your UTMs, but it can’t link that specific contact event back to the original Google Ad campaign and ad group in the Ads tool for reporting.
A long-term, superior, and cost-effective solution is to move your high-value conversion reporting to a server-side architecture.
You can use the Gravity Forms REST API v2 to trigger a server-side conversion event upon form submission.
This event would be managed by Google Tag Manager on a server-side container hosted on a service like Stape or Google Cloud Platform.
The flow would involve the form collecting the Google Click ID (GCLID), which is the most accurate identifier, along with the UTMs.
When the form is submitted, the Gravity Forms API sends all this data to your server-side GTM container.
The container then uses the Google Ads API and the HubSpot API to achieve two things: first, it pushes a highly accurate conversion event back to Google Ads using the GCLID, providing Google’s smart bidding algorithms with high-quality data.
Second, it uses the HubSpot API to confirm the high-value conversion event within HubSpot’s ecosystem.
This method bypasses client-side issues like ad blockers, browser privacy settings, and the unreliable tracking context from third-party form integrations, offering a more robust, future-proof, and accurate reporting system than the native, browser-reliant HubSpot Ads integration can provide on its own.