...

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:

  1. In GTM, go to Triggers โ†’ New
  2. Name it: โ€œGHL Form Submissionโ€
  3. Trigger Type: Custom Event
  4. Event name: ghl_form_submit (must match exactly)
  5. Save the trigger

Create a Conversion Linker Tag (Important!):

  1. Go to Tags โ†’ New
  2. Name: โ€œGoogle Ads โ€“ Conversion Linkerโ€
  3. Tag Type: Conversion Linker
  4. Triggering: All Pages
  5. Save

This tag is crucial for tracking conversions in Safari and Firefox, which restrict third-party cookies.

Create the Google Ads Conversion Tag:

  1. Go to Tags โ†’ New
  2. Name: โ€œGoogle Ads โ€“ GHL Form Conversionโ€
  3. Tag Type: Google Ads Conversion Tracking
  4. Enter your Conversion ID and Label (from Google Ads)
  5. Triggering: Select โ€œGHL Form Submissionโ€
  6. Save

Step 3: Test Your Implementation

Testing is crucial. Hereโ€™s how to verify everything is working:

  1. Open GTM Preview Mode: Click Preview in GTM and enter your website URL
  2. Open Browser Console: Press F12 and go to the Console tab
  3. Submit a Test Form: Fill out and submit your GHL form
  4. 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_submit event fire
    • Your Google Ads conversion tag should show as โ€œFiredโ€

Step 4: Publish and Monitor

Once testing is successful:

  1. Publish your GTM changes
  2. Submit a few test conversions using different email addresses
  3. Wait 24-48 hours for Google Ads to start showing conversion data
  4. 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.