Skip to content
Mather Media Solutions

Guide · GoHighLevel

GoHighLevel conversion tracking: sending leads and booked appointments to Google Ads and Meta the right way

Updated 26 September 20267 min read

The short answer

In GoHighLevel, make sure the gclid and fbclid land on the contact record, create each conversion in Google Ads first, then use workflow actions to send booked appointments and pipeline stage changes to Google Ads and to Meta’s Conversions API. Send each conversion from one place only, and test every workflow with a real contact.

What can GoHighLevel send to the ad platforms?

GoHighLevel can report conversions two ways. In the browser, pixels and tags on its funnels and sites fire when a page loads or a form is submitted. On the server, workflow actions send events straight to Google Ads and to Meta’s Conversions API when something happens in the CRM: an appointment is booked, a pipeline stage changes, a tag is added.

The server side is what makes GoHighLevel useful for this. A booked appointment, a showed appointment or a won opportunity happens inside the CRM, and a workflow can send it back to the platform that bought the click. The browser side is where most double counting comes from.

Step 1: Is the click ID actually on the contact?

HighLevel’s own documentation says a Google Ads conversion only attributes if the gclid, gbraid or wbraid from the ad click is on the contact record. The same holds for Meta: the workflow can only pass an fbclid it has. Check this before building anything else.

  1. Turn on auto-tagging in Google Ads

    It is what adds gclid to the landing page URL. Meta adds fbclid to its ad clicks on its own.

  2. Submit a test lead from a tagged URL

    Load the landing page with test gclid and fbclid values on the URL, submit the form or book through the calendar, then open the new contact.

  3. Find the values on the contact

    Look in the contact’s attribution details and custom fields. If they are missing, the form or calendar never saw the URL.

  4. Fix forms that live outside GoHighLevel

    A GoHighLevel form or calendar embedded on another website often runs in a frame and cannot read the parent page URL. Store the identifiers on the parent page and pass them in, or use a form on a GoHighLevel page.

Step 3: How do you send them to Meta’s Conversions API?

GoHighLevel workflows include a Meta Conversions API action. HighLevel’s help center describes two kinds of event it can send, and they match two different lead sources.

  • Funnel events, for leads from your own pages

    Triggered by a form or survey submission, a booked appointment or an order form. Matching relies on the fbclid captured from the ad click, which can be mapped in the action’s custom mapping.

  • Lead events, for Meta lead form leads

    Triggered by a Meta lead form submission or a pipeline stage change, and matched on the Meta lead ID. This is how a later stage, such as booked or won, is reported against a lead that never visited your site.

Meta rejects events whose event time is more than seven days in the past, so trigger the action when the stage changes rather than in a periodic sweep. Check the current action options in HighLevel’s help center; they are added to often.

How do you avoid counting the same lead twice?

Most broken GoHighLevel setups do not miss conversions. They count them twice.

  • Browser pixel plus workflow, same event

    If the funnel’s Meta pixel fires Lead on the thank-you page and a workflow also sends Lead through the Conversions API, Meta can only merge them when both carry the same event name and event_id. If you cannot confirm that they do, send that event from one side only.

  • Google tag plus import, same conversion

    A thank-you page tag and an imported conversion counting the same form fill are two conversions to Google. Keep the tag as a secondary action, or remove it, once the import is primary.

  • Two workflows on one trigger

    Cloned workflows are the usual culprit. Search for every workflow that uses the same action and conversion name.

  • Re-entry

    A contact that re-enters a workflow can send the conversion again. Check the workflow’s re-entry setting and use the conversion action’s count setting as a backstop.

How pixel and Conversions API deduplication works

event_id, event_name and the fbc and fbp values, explained without the jargon.

Which conversion should the campaigns bid on?

The one closest to revenue that still arrives often enough and fast enough. For many practices that is the booked or showed appointment. For home services it is often the won opportunity with its value. Send the earlier stages too, as secondary conversions, so the account keeps a full picture and a stage that arrives late does not leave bidding blind.

Whatever the choice, it only helps if the pipeline stages mean the same thing every time. A stage the team moves contacts into by habit is not a conversion. Write down who sets each stage and when.

What should a health or legal business leave out?

GoHighLevel workflows can map almost any contact field into an event. That is the risk. Survey answers, treatment interest, case type and notes are all one field mapping away from an ad platform.

  • Map only what matching needs: the click ID or lead ID, and contact details the platform hashes.
  • Keep event and conversion names neutral: Appointment booked, not a procedure or case type.
  • Read what each funnel page’s browser pixel sends, including page URLs and titles.

Common mistakes

  1. 01

    Building workflows before checking the click ID

    A workflow that fires on a contact without a gclid or fbclid sends a conversion the platform cannot attribute.

  2. 02

    A conversion name that almost matches

    One capital letter or a trailing space and the Google Ads action silently does nothing.

  3. 03

    Pixel and workflow sending the same event

    Without a shared event_id, Meta counts both.

  4. 04

    Pipeline stages nobody owns

    If contacts move stages by habit, the conversion measures habit.

Straight answers

What we will not promise

  • That a GoHighLevel feature works a particular way next month. The platform changes often; each setup is checked in the account.
  • A number of leads, appointments or a cost per appointment before campaigns have run.

Questions

  • Why is GoHighLevel not sending conversions to Google Ads?

    The usual causes, in order: the contact has no gclid, gbraid or wbraid; the conversion name in the workflow does not exactly match Google Ads; the conversion action was not created as an import first; or the Google Ads connection lapsed. Check the contact record before anything else.

  • Should I use the GoHighLevel pixel or the Conversions API workflow for Meta?

    Use the workflow for anything that happens in the CRM, such as a booked appointment or a won deal. Use the browser pixel for on-page events. Do not send the same event from both unless you have confirmed they share an event_id.

  • Can GoHighLevel send conversions for Meta lead form leads?

    Yes. HighLevel describes lead events for the Conversions API that match on the Meta lead ID and can be triggered by a pipeline stage change, so a later stage can be reported against the original lead form lead.

  • Can an agency set this up across sub-accounts?

    Yes, but each sub-account has its own ad connections, conversion names and pipelines, so each one is checked and tested on its own. A snapshot copies the workflows, not the proof that they work.

Start with the diagnostic

Rather have someone check yours?

Map what is breaking, the systems involved, the outcome you need, and whether a pilot is ready. You will see a practical route and first artifact before deciding whether to send the context.

No charge to take the diagnostic · A specific reply within two business days