The Hidden Problem: Why Your GoHighLevel Forms Arenโt Tracking in Google Ads (And How to Fix It)
(Part 1 of 3 in the GoHighLevel Tracking Series)
GoHighLevel was delivering leadsโbut Google Ads reported zero conversions. The problem lies in how these forms are embeddedโas iframes, AJAX-driven submissions, and popup-based with no redirectโmaking them invisible to tracking tools. Letโs fix that!
Late Tuesday night, I conceded that the task wasnโt as straightforward as expectedโtracking a single form submission from GoHighLevel into Google Ads had proven more difficult than anticipated. The forms were working. Leads were coming in. But Google Ads showed zero conversions. I knew we were missing crucial data that would help optimize our campaigns.
If youโre using GoHighLevel forms embedded on your WordPress site, thereโs a 90% chance youโre losing conversion data right now. Not because your forms arenโt working, but because GHL forms operate in a parallel universe that Google Tag Manager canโt see. Theyโre iframes. They submit via AJAX. Theyโre popup forms without thank you pages. Theyโre tracking nightmares.
Over the next three weeks, Iโm going to share exactly how I solved this problem, implemented a solution that actually works, and built a system that captures the data you need to make informed marketing decisions.
But first, let me show you why what youโve tried so far hasnโt worked.
The Expensive Problem Nobody Talks About
When youโre running Google Ads, every conversion matters. Without accurate conversion tracking, youโre essentially flying blind. You canโt optimize your bids, you canโt identify which keywords are actually driving results, and you canโt calculate your real return on ad spend.
Hereโs what makes GoHighLevel forms particularly challenging:
1. The iFrame Isolation
GoHighLevel forms are embedded as iframes. For those unfamiliar with the technical details, an iframe is essentially a website within a website. Your form lives on GoHighLevelโs servers (specifically, on api.leadconnectorhq.com), not on your WordPress site.
This creates a fundamental problem: Google Tag Manager, which is installed on your WordPress site, canโt directly โseeโ what happens inside the iframe. Itโs like trying to track what happens in a neighborโs house when you can only stand in your own yard.
2. The AJAX Submission Challenge
Modern forms donโt reload the page when submitted. GoHighLevel forms use AJAX (Asynchronous JavaScript and XML) to submit data in the background. This is great for user experience โ no annoying page refreshes. But itโs terrible for traditional conversion tracking, which typically relies on a โthank you pageโ URL to trigger conversions.
3. The Popup Predicament
Many GoHighLevel users, myself included, use popup forms that appear when someone clicks a button. After submission, you see a brief โThank Youโ message that disappears after a few seconds. Thereโs no URL change, no page load, no traditional โconversion signalโ for Google to detect.
What Doesnโt Work (And What I Wasted My Time On)
Before I share the solution, let me save you some time by telling you what I did and why it didnโt work:
Attempt #1: Standard GTM Form Submission Trigger
What I tried: Setting up a basic Form Submission trigger in Google Tag Manager.
Why it failed: GTM canโt detect form submissions that happen inside iframes on different domains.
Attempt #2: Element Visibility Trigger
What I tried: Creating a trigger that fires when the โThank Youโ message appears.
Why it failed: The success message is inside the iframe, invisible to GTM.
Attempt #3: Click Trigger on Submit Button
What I tried: Tracking clicks on the submit button.
Why it failed: Clicks donโt equal conversions. Youโd track failed submissions, validation errors, and abandoned forms as โconversions.โ
Attempt #4: Generic โTrack All Formsโ Scripts
What I tried: Various JavaScript snippets from forums and AI tools.
Why it failed: They werenโt designed for cross-domain iframes or AJAX submissions.
The Breakthrough: Understanding How GHL Forms Really Work
The turning point came when I opened the browserโs Developer Tools and started examining the network traffic. I noticed something interesting: when a form was submitted, there was a POST request to:
https://api.leadconnectorhq.com/widget/form/ABC123XYZ789
LeadConnectorHQ โ that was the key. GoHighLevel forms communicate with their parent page using something called the postMessage API. This is a secure way for iframes to send messages to the page that contains them.
The Solution That Actually Works
Hereโs the tracking script that finally solved the problem for me. This code listens for messages from the GoHighLevel iframe and pushes conversion data to Google Tag Managerโs dataLayer:
GoHighLevel Form Submission Tracking Script
How to Implement This Solution
Step 1: Add the Script to Your WordPress Site
If youโre using a child theme (recommended), add this to your functions.php file.
Alternative: If youโre using Divi, you can add the script via Divi โ Theme Options โ Integration in the โAdd code to the < body >โ section.
Step 2: Configure Google Tag Manager
Now we need to set up GTM to catch the events our script is sending:
Create a Custom Event Trigger:
- In GTM, go to Triggers โ New
- Name it: โGHL Form Submissionโ
- Trigger Type: Custom Event
- Event name:
ghl_form_submit(must match exactly) - Save the trigger
Create a Conversion Linker Tag (Important!):
- Go to Tags โ New
- Name: โGoogle Ads โ Conversion Linkerโ
- Tag Type: Conversion Linker
- Triggering: All Pages
- Save
This tag is crucial for tracking conversions in Safari and Firefox, which restrict third-party cookies.
Create the Google Ads Conversion Tag:
- Go to Tags โ New
- Name: โGoogle Ads โ GHL Form Conversionโ
- Tag Type: Google Ads Conversion Tracking
- Enter your Conversion ID and Label (from Google Ads)
- Triggering: Select โGHL Form Submissionโ
- Save
Step 3: Test Your Implementation
Testing is crucial. Hereโs how to verify everything is working:
- Open GTM Preview Mode: Click Preview in GTM and enter your website URL
- Open Browser Console: Press F12 and go to the Console tab
- Submit a Test Form: Fill out and submit your GHL form
- Check for Success Messages:
- In the console, you should see: โGHL Form Submitted โ Event pushed to dataLayerโ
- In GTM Preview, you should see the
ghl_form_submitevent fire - Your Google Ads conversion tag should show as โFiredโ
Step 4: Publish and Monitor
Once testing is successful:
- Publish your GTM changes
- Submit a few test conversions using different email addresses
- Wait 24-48 hours for Google Ads to start showing conversion data
- Check your Conversions section in Google Ads for the status update
Common Issues and Solutions
โThe event fires but my tag doesnโtโ
Solution: Check for typos in the event name. It must be exactly ghl_form_submit โ this is case-sensitive.
โI donโt see any console messagesโ
Solution: Make sure the script is loading. Check your page source for the script, and ensure there are no JavaScript errors.
โIt works sometimes but not alwaysโ
Solution: Some forms might submit differently. The script includes multiple detection methods to catch various submission types.
What Youโve Accomplished
If youโve followed this guide, you now have:
- โ Working conversion tracking for GoHighLevel forms
- โ Data flowing from iframe forms to Google Ads
- โ The ability to optimize your campaigns based on actual conversions
- โ A foundation for more advanced tracking
But hereโs the thing: weโre only tracking that a form was submitted. We donโt know who submitted it, and in a world where cookies are increasingly restricted, thatโs leaving money on the table.
Whatโs Next: The Power of Enhanced Conversions
In Part 2 of this series, weโll look at how to capture the actual user data from form submissions โ email, phone, name โ and send it to Google Ads using Enhanced Conversions. This isnโt just about tracking more conversions; itโs about tracking conversions that would otherwise be lost to iOS restrictions, ad blockers, and cookie deletion.
The script Iโll share in Part 2 builds on what weโve created here, but adds a crucial layer that can increase your tracked conversions. More importantly, it future-proofs your tracking for the cookie-less future thatโs rapidly approaching.
For now, implement what youโve learned here. Get your basic tracking working. Verify those conversions are flowing into Google Ads. Because once you have this foundation solid, the enhanced tracking weโll add next week will be a simple upgrade that multiplies your results.
Next: Part 2 โ Enhanced Conversions: How to Capture and Send User Data from GoHighLevel Forms
Have questions about this implementation? Weโd love to hear about your results.
Resources:
Quick Implementation Checklist:
- Add tracking script to WordPress
- Create Custom Event trigger in GTM
- Set up Conversion Linker tag
- Configure Google Ads Conversion tag
- Test in Preview mode
- Verify console messages
- Publish GTM changes
- Monitor Google Ads for conversions
This is Part 1 of a 3-part series on mastering GoHighLevel form tracking. Part 2 covers Enhanced Conversions, and Part 3 explores pipeline automation.
