How to Send GoHighLevel Conversions Back to Google Ads

October 8, 2026
β€’
Next Big update coming Easrly 2020, stay tuned πŸ‘€
Need Help Marketing?
Software that medical practices need to have

Ask most practices how their Google Ads are doing and you'll hear a cost per lead. Ask which campaign produced last month's new patients and the room goes quiet.

That gap exists because two systems each hold half the story. Google Ads knows who clicked and filled out a form. Your CRM knows who answered the follow-up text, booked a consult, showed up and paid.

Unless you connect the two, Google keeps optimizing for form fills, including those that never result in a booking.

This guide shows how we close that loop at NexaMed. We capture the Google Click ID (GCLID) when a lead comes in, store it in GoHighLevel, and send qualified leads, booked appointments, and closed patients back to Google Ads as they move through the pipeline.

It's written for hormone clinics, med spas, weight loss practices, and other cash-pay practices that run Google Ads and use GoHighLevel, or are about to.

‍

The short answer

You send GoHighLevel conversions back to Google Ads by storing each lead's Google click ID on their contact record. Then you fire HighLevel's Add to Google Ads workflow action when the lead reaches a meaningful pipeline stage. Google matches the click ID to the original ad click and credits that campaign and keyword with the conversion.

The setup, in five steps:

  1. Turn on auto-tagging in Google Ads so every ad click carries a GCLID.
  2. Capture the GCLID in a hidden form field and save it to a custom field on the GoHighLevel contact.
  3. Create offline conversion actions for the stages that matter: qualified lead, booked appointment, closed patient.
  4. Build one workflow per stage that fires Add to Google Ads once per lead.
  5. Check the workflow logs and Google Ads diagnostics before you trust the numbers.

The rest of this guide covers each step, the mistakes that quietly break the setup, and the healthcare privacy rules most GoHighLevel tutorials skip.

‍

Why cost per lead is the wrong scoreboard

Google Ads optimizes toward whatever you tell it counts as a conversion. If the only conversion it sees is a form fill, it gets very good at finding people who fill out forms. That's not the same as finding people who become patients.

Here's a made-up example that looks a lot like accounts we audit. Two campaigns, similar spend:

  • Campaign A: $2,500 spent, 50 leads at $50 each, 8 booked consults, 5 shows, 1 new patient, $2,500 in revenue.
  • Campaign B: $2,400 spent, 30 leads at $80 each, 15 booked consults, 12 shows, 5 new patients, $15,000 in revenue.

On a lead report, Campaign A wins easily. On the revenue report, it isn't close: Campaign B produced five times as many patients for slightly less money.

Without CRM data flowing back, both you and Google's bidding only see the first version. The cheap campaign gets more budget, the good one gets trimmed, and everyone wonders why the phones are busy, but the schedule isn't full.

Once your pipeline reports back, the questions get better. Not "which keyword gets the cheapest lead," but which keyword produces booked consults, which campaign produces patients, and which service is actually worth scaling.

‍

How the closed loop works

‍

What a GCLID is

A GCLID (Google Click Identifier) is a unique ID Google adds to your landing page URL when someone clicks your ad with auto-tagging on. You'll see it at the end of the address as ?gclid=CjwKCAjw....

To you, it's a random string. To Google, it points to one specific click: the campaign, ad group, keyword, ad, and time. Send that ID back with "this person booked a consultation," and Google can credit the exact click that started it.Β 

iPhone traffic sometimes arrives with a GBRAID or WBRAID instead of a GCLID because of Apple's privacy rules. HighLevel's Add to Google Ads action accepts all three, so capture all three.

‍

The path from click to conversion

  1. Someone searches "TRT clinic near me" and clicks your ad. Google adds a GCLID to the landing page URL.
  2. They fill out your form. A hidden field picks up the GCLID and sends it with their name, email, phone and the service they're interested in.
  3. GoHighLevel creates the contact and saves the GCLID to a custom field, where it stays for the life of the contact.
  4. Your team works the lead and moves the opportunity through the pipeline: contacted, qualified, booked, showed, closed.
  5. Each meaningful stage change triggers a workflow with the Add to Google Ads action.
  6. Google matches the GCLID to the original click and records the conversion against that campaign and keyword.
Infographic showing how a click from google ads can be tracked in Go High Level and sent that data and GCLID back to Google Ads

The form fill itself is still tracked the normal way, with the Google tag on your site. The CRM adds everything that happens after the form.

‍

How to set it up, step by step

This is the setup we use on client accounts. The details shift depending on whether your forms live on GoHighLevel, Webflow, WordPress or somewhere else, but the order doesn't.

‍

Step 1: Turn on auto-tagging and keep the GCLID alive

In Google Ads, auto-tagging lives under Admin β†’ Account settings. It's on by default in most accounts, but check it. Nothing below works without it.

Then make sure nothing strips the ID before your form sees it. The usual suspects:

  • Redirects. A redirect from http to https, from a non-www to a www domain, or through a link shortener can drop the query string. Point ads at the final URL.
  • Multi-step funnels. The GCLID sits in the URL on page one. If the form is on page two, the ID is gone unless you carry it forward.
  • Embedded forms. A GoHighLevel form or calendar embedded in an iframe on another site can't see the parent page's URL without extra code.

The fix for the last two is the same. When someone lands, save the GCLID to a first-party cookie (90 days is a sensible lifespan), then read it back into the form wherever the form lives. Google's offline conversion setup guide includes a sample script that does exactly this.

Quick check: open your landing page with ?gclid=test123 added to the URL, click through to the form and submit it. If test123 doesn't show up on the contact, something in the chain is dropping it.

‍

Step 2: Add a hidden GCLID field to your forms

Every lead form that Google Ads traffic can reach needs a hidden field for the GCLID, and ideally GBRAID and WBRAID too. The visitor never sees it. On submit, it carries the click ID along with the rest of the form.

Native GoHighLevel forms pick up click IDs from the page URL at the moment of submission. That works when the ad lands directly on the page with the form. It falls apart in the multi-step and embedded setups from Step 1.

‍

Step 3: Store the GCLID on the contact in GoHighLevel

Create a custom contact field called GCLID under Settings β†’ Custom Fields. This is where the ID lives for as long as the contact exists. That matters, because the closed-patient conversion might fire six weeks after the form.

Our forms post to GoHighLevel through a webhook. The payload carries the usual lead details plus the click ID:

  • First and last name
  • Email and phone
  • Service of interest
  • Campaign and source details (UTMs)
  • GCLID
Example of a webhook payload coming from a landing page showing the GCLID captured in a hidden form

A workflow with the Inbound Webhook trigger creates or updates the contact and maps the gclid value into the GCLID custom field. Open a few test contacts afterward and confirm the field is filled. If webhooks are new to you, start with our healthcare webhooks guide and our walkthrough on mapping webhook data into your CRM.

An example of what the GCLID custom field will look like to a person who is looking at their Go High Level

Save the source details while you're at it. Knowing a lead came from a specific Google campaign for a specific service lets you report on it inside GoHighLevel, not just inside Google Ads.Β 

‍

Step 4: Build a pipeline that matches what actually happens

The pipeline triggers the conversions, so its stages need to mean something. A stage earns its place if it changes follow-up, reporting, automation or what staff do next. If it changes none of those, cut it.

This is the structure we start most practices with:

  1. New Lead
  2. Contacted
  3. Qualified
  4. Appointment Booked
  5. No Show
  6. Showed
  7. Closed Won
  8. Closed Lost / Long-Term Nurture

Write down what each stage means in one sentence and get the front desk to agree. "Qualified" at a hormone clinic might mean labs are ordered. At a med spa it might mean they've confirmed the treatment, budget and timing.

Whatever the definition, apply it the same way every time. Google will treat every move into that stage as a real signal.

What a properly built medspa pipeline looks like for marketing

‍

Step 5: Create the offline conversion actions

You need one conversion action per stage you want to send. Create them in Google Ads (Goals β†’ Conversions β†’ Create conversion action β†’ Conversions offline), or inside GoHighLevel's Ad Manager settings, which creates them in your Google Ads account through the API.

The settings that matter:

  • Name: generic and consistent across accounts: Qualified Lead, Booked Appointment, Closed Won. The healthcare section below explains why.
  • Count: One per click. A person only becomes a new patient once, and it's a backstop against duplicates.
  • Value: a fixed value per stage is fine to start. If you plan to move to value-based bidding later, send real revenue on Closed Won.
  • Click-through window: 90 days. Google won't accept an offline conversion for a click older than the window, and some patients take a while to decide.

Two gotchas. Google says to wait 4 to 6 hours after creating a new offline conversion action before sending anything to it. And GBRAID and WBRAID only work with Many per click actions, so iPhone leads without a GCLID won't register on One per click actions. We accept that trade for cleaner counting.

The convserion setup within GHL so that you can send the right data back to Google

‍

Step 6: Build one workflow per conversion

Each conversion gets its own workflow. Here's the Booked Appointment version:

  1. Trigger: Pipeline Stage Changed, filtered to your pipeline and the Appointment Booked stage.
  2. Guard: an If/Else that checks for a tag like gads-booked-sent. If the contact has it, end the workflow.
  3. Action: Add to Google Ads. Pick the conversion action, then set currency and value.
  4. Custom mapping: turna it on and map the GCLID to your GCLID custom field. This is the step people miss when the ID lives in a custom field instead of HighLevel's own attribution data.
  5. Tag: add gads-booked-sent so the conversion can't fire again for this contact.
A workflow showing how healthcare practices can send their lead data from Go High Level back to Google Ads and increase performance

‍

Also turn off Allow Re-entry in the workflow settings. Between that setting, the tag and One per click counting, a lead who gets bounced between stages by mistake still counts once.

The conversion name in the action has to match the name in Google Ads exactly, capitalization and spacing included. If it doesn't, the action gets skipped.

We walk through the full build, screenshots included, in [LINK: How to Send Booked Appointments From GHL to Google Ads] and [LINK: How to Send Closed Patients Back to Google Ads].

‍

Step 7: Test it before you trust it

HighLevel doesn't have a test button for this action, so you test with real records:

  1. Confirm the capture with the ?gclid=test123 check from Step 1.
  2. When the first real Google Ads lead reaches the target stage, open the workflow's execution logs.
  3. "Executed" means it was sent. "Skipped" almost always means a missing click ID or a conversion name that doesn't match.
  4. Over the next day, check that conversion action in Google Ads for incoming conversions and diagnostic warnings.

‍

Which conversions to send, and which to optimize for

Send several stages. Optimize for one.

Think of your conversions as a ladder:

  • Lead: they raised their hand. Tracked by the Google tag on your site.
  • Qualified lead: someone the practice can actually help.
  • Booked appointment: interest turned into a time on the calendar.
  • Closed Won: they paid.

Each rung is rarer and more valuable than the one below it. The trap is jumping straight to the top.

Aidan, who runs paid media with us, describes it as teaching Google the stages instead of going from zero to a hundred. If Google only hears about the five patients and never the hundred leads before them, it has very little to learn from.

‍

Tracking is not the same as bidding

In Google Ads, every conversion action is either primary or secondary. Primary actions feed bidding and the Conversions column. Secondary actions are tracked and reported, but bidding ignores them.

A sensible starting point for most practices: keep the lead as the primary conversion, and add qualified, booked and closed as secondary. You get full-funnel reporting right away without starving the algorithm.

‍

When to move the target deeper

No spend threshold flips the switch. The real question is whether a stage has enough steady volume for Google to find patterns.

Ten new patients a month can be a great month for a practice and still be thin data for an algorithm. Once booked appointments come in every week without big gaps, making them primary starts to make sense. Closed patients usually come last, if ever.

We go deeper on this decision in [LINK: Should Google Ads Optimize for Leads, Appointments or Patients?].

‍

Send values if you'll use them

If you ever want Google to bid on revenue with target ROAS, it needs conversion values. A fixed value per stage is enough to start. Real revenue on Closed Won is better once your team records it consistently.

‍

Mistakes that quietly break it

‍

The GCLID never reaches the CRM

This is the most common failure and the hardest to spot, because leads still come in. Redirects, multi-step funnels and embedded forms are the usual causes. Spot-check a few Google Ads contacts every month: if the GCLID field is blank, nothing downstream is reaching Google.

‍

One event, many conversions

A lead who replies to your text ten times is not ten qualified leads. A patient bumped from Booked back to Contacted and back to Booked is still one booking. Build every workflow to fire once per contact, and don't count on Google to clean up duplicates for you.

‍

A pipeline nobody updates

The automation only knows what the pipeline says. If the front desk books a consult and leaves the lead in New Lead, Google never hears about it. If someone marks everyone Closed Won to tidy up the board, Google learns from garbage.

Mark no-shows as no-shows instead of deleting them. Rebooking sequences can run, and the numbers stay honest.

‍

Conversions that show up too late

A Closed Won that fires four months after the click falls outside the 90-day window and gets rejected. For treatments people take a long time to decide on, booked appointments are often the more reliable signal.

‍

Every stage set as primary

If qualified, booked and closed are all primary, one patient can count three times toward bidding. Google then chases whatever stage is most common. Pick one primary stage and keep the rest secondary.

‍

Following an outdated tutorial

This area changes often. Starting June 15, 2026, Google moved offline conversion and enhanced conversions for leads uploads to its Data Manager API and began blocking them in the Google Ads API for most developers (Google). If a custom script or older integration stopped sending conversions this summer, check that first.

‍

Before you send patient data to Google

Most GoHighLevel tutorials skip this part, and for a medical practice it matters most. None of this is legal advice. It's what we check before turning anything on, and what we'd want a practice to review with healthcare counsel.

‍

Be careful with enhanced conversions for leads

Google now recommends enhanced conversions for leads for new setups. It matches conversions using hashed email addresses and phone numbers in addition to the click ID. For most businesses, that's an upgrade.

For medical practices, it's a problem. Google's customer data policies say conversions tied to health or medical information, including purchases of medical services and prescription drugs, can't be used for measurement in enhanced conversions. A new TRT patient or a Botox purchase falls squarely in that category, and arguably so does the consult request itself.

So for patient-stage conversions, we send click IDs only (GCLID, GBRAID, WBRAID) and no hashed contact details. Since April 2026, enhanced conversions is a single on/off setting inHIPAA-coveredAds account, so check what's switched on in yours.

‍

HIPAA

If a practice is a HIPAA covered entity, and most practices that bill insurance electronically are, tying an identifiable person to their care and sending it to an ad platform can be an impermissible disclosure. HHS has published guidance on tracking technologies specifically. A federal court vacated part of it in 2024, so read the current version rather than an old summary.

Google Ads conversion tracking also isn't covered by a Google business associate agreement (BAA).

Many cash-pay med spas and clinics aren't covered entities, but decide that deliberately rather than assuming it. Several states also have consumer health privacy laws that apply regardless of HIPAA. Washington's My Health My Data Act is the best known. For the CRM side, see our GoHighLevel HIPAA setup guide.

‍

Keep the payload boring

Whatever your status, send Google the least you can:

  • Generic conversion names: Qualified Lead, Booked Appointment, Closed Won. Not "TRT Patient" or "Semaglutide Start."
  • Click ID, time and value only. No treatment, diagnosis, notes or lab details.
  • Separate conversion actions by funnel stage, never by condition or treatment.

The point of this system is better bidding. Google doesn't need to know what someone is being treated for to bid better.

‍

The real payoff: seeing where revenue leaks

Better bidding is the headline benefit. The bigger one is that the same pipeline data shows where patients get lost, so you fix the right problem.

Out of every 100 Google Ads leads:

  • 70 contacted, 50 qualified, 8 booked: the leads are fine. Something between qualifying and booking is broken: the offer, the price conversation, or follow-up speed.
  • 20 qualified, 4 booked: lead quality. Look at search terms, keywords and landing page messaging.
  • 45 booked, 10 showed: a show-rate problem. Fix reminders, deposits and confirmation calls, not ads.
  • 40 booked, 35 showed, 2 purchased: the consultation. Pricing, the provider's recommendation, or expectations the ad set that the visit didn't meet.

Without the pipeline, every one of those looks like "the ads aren't working." We dig into that in why your healthcare marketing isn't failing, your sales process is.

‍

The pipeline should drive follow-up too

The same stage changes that send conversions should change what the lead receives:

  • New lead: a text within about 30 seconds, then a personal follow-up from a staff member a few minutes later.
  • Lead replies: automation stops and a human takes over.
  • Appointment booked: nurture messages stop and reminders start.
  • No show: a rebooking sequence with a link to pick a new time.
  • Closed Won: acquisition messages stop. Retention, membership or cross-sell messages can start.

The first few minutes matter most, which is why we wrote a full guide on speed to lead. Old leads that never booked are worth working too.Β 

Calls count too

Plenty of Google Ads leads never touch a form. If calls aren't tracked into GoHighLevel, a big share of your best leads is invisible to this whole system.Β 

‍

When patients book in your EHR

If bookings and payments happen in OptiMantra, Cerbo or another EHR, the pipeline only stays accurate if those events flow back into GoHighLevel. That's what the integration is for. We've covered connecting OptiMantra to your CRM and the Cerbo + GoHighLevel integration

Meta leads behave differently

The same thinking applies to Meta, with one difference. Someone who searched "testosterone clinic near me" and someone who tapped an Instagram ad mid-scroll are not the same lead. Keep the source on every contact so you can report on them separately and follow up differently.

‍

Frequently asked questions

Can GoHighLevel send conversions back to Google Ads?

Yes. Connect Google Ads under Settings β†’ Integrations, then use the Add to Google Ads workflow action to send conversions like qualified leads, booked appointments or closed patients. The be attributed to a GCLID, GBRAID or WBRAID from the original ad click for the conversion to attribute.

Where should I store the GCLID in GoHighLevel?

In a custom contact field, filled from a hidden form field when the lead is created. Then turn on custom mapping in the Add to Google Ads action and point it at that field.

Why does the Add to Google Ads action say "Skipped"?

Usually one of two reasons: the contact has no click ID, or the conversion name in the workflow doesn't exactly match the name in Google Ads.

Should I send booked appointments or closed patients to Google Ads?

Both are taking conventional actions. Booked appointments arrive sooner and in higher numbers, which makes them the better bidding signal for most practices. Closed patients are best used for reporting until you have steady volume.

How long after the click can I send an offline conversion?

Up to the conversion action's click-through window, which maxes out at 90 days. Anything older is rejected, so set patient-stage actions to 90 days.

Do I still need regular Google Ads conversion tracking?

Yes. Keep tracking form submissions and calls the normal way. Offline conversions add what happens after the lead; they don't replace it.

Can medical practices use enhanced conversions for leads?

Be careful. Google's customer data policies don't allow conversions based on health or medical information, such as purchases of medical services, to be measured with enhanced conversions. For patient-stage conversions, we send click IDs only.

Does this work if patients book through an EHR?

Yes, as long as the booking or payment makes it back into GoHighLevel and moves the opportunity. That usually means an integration between the EHR and GoHighLevel.

Want this built for your practice?

NexaMed is a healthcare marketing agency for hormone clinics, med spas, longevity clinics, sexual wellness clinics, and telehealth practices. We build the whole system: Google Ads, GoHighLevel pipelines and follow-up, EHR integrations, and the conversion tracking that ties them together.

If your reporting stops at the form fill and you can't say which campaigns produce patients, reach out through our contact page.

Your Practice Isn’t Generic. Your Marketing Shouldn't Be Either.

You’ve outgrown "basic" marketing. Nexamed builds the advanced lead-gen infrastructure your med spa needs to capture high-ticket patients and scale without the manual mess.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.