GoHighLevel UTM Tracking: Get the Setup Right

Written by Niyamul Islam Sajal, COO & GHL Certified AdminNovember 3, 20263 min readGoHighLevel

A contact who clicks a Google ad and fills out a form only gets credited to that ad if the link carries the exact parameters HighLevel expects.

GoHighLevel UTM tracking runs on a strict template, and a single stray capital letter in the URL is enough to break it without throwing an error.

The lead still lands in your CRM. It just arrives with no source attached.

The mistake is almost never in deciding to add UTM parameters. It shows up in how precisely they're formatted.

Which Actions Actually Capture Attribution

GoHighLevel only records attribution data when a contact completes specific actions inside the same session. According to HighLevel's guide to attribution sources, that list is narrow.

It covers a form or survey submission, a calendar booking, a chat widget interaction after the visitor hands over contact info, and a one- or two-step order form.

External forms can capture the same data too, but only once they're wired up through External Tracking first.

Case sensitivity is where a lot of this quietly breaks. HighLevel's own documentation warns that an uppercase letter sitting where a lowercase one belongs will cause the match to fail, and recommends copying parameters directly rather than retyping them.

Getting the tracking script and custom fields configured correctly before a campaign goes live is squarely a GHL setup and configuration task.

GoHighLevel UTM Tracking for Google and Facebook Ads

Google Ads and Facebook Ads each expect their own fixed utm_source value, and HighLevel won't attribute the lead correctly if you substitute a different one.

Google's template sets utm_source to "adwords" and pairs it with Google's own click identifiers. Facebook's sets it to "fb_ad" and relies on campaign and ad-set names instead.

ChannelRequired utm_sourceWhat else HighLevel readsEasiest way to break it
Google Adsadwordsgclid, wbraid, gbraidAdding extra custom UTM parameters on top of the template
Facebook/Instagram Adsfb_adcampaign_id plus the ad set and ad namesSubmitting the form on a page other than the one the ad linked to
Email campaignsemailutm_medium, defaulting to "email marketing"Sending through a trigger link, which carries no UTM values at all

That email row matters more than it looks. HighLevel's documentation on UTM parameters for email campaigns sets utm_source to "email" as a fixed, mandatory field, with utm_medium defaulting to "email marketing" unless you change it.

You can add up to five more custom parameters from Email Campaign Settings, but utm_campaign stays optional. Skip configuring any of it and GoHighLevel still fires the first two automatically.

Medium, Session Source and UTM Source Aren't the Same Field

Open a dashboard widget's attribution filters and three fields look interchangeable until you read what each one actually stores.

Medium is HighLevel's own label for the interaction type: a form, a survey, a calendar, an API call. Session Source is a broader traffic-channel classification, closer to direct, organic search, paid search or referral. UTM Source is just whatever raw value showed up in the utm_source parameter itself.

Mixing those three up is why a custom dashboard built to show paid search leads can end up counting traffic that never came from an ad.

The support article covering attribution and UTM filters on custom widgets notes that the UTM fields won't even appear in a widget's conditions until an Attribution Type, First or Latest, has already been added ahead of them.

First Attribution and Latest Attribution aren't the same number either. A contact who arrived through a Google ad months ago and came back last week through an email link will show different source data depending on which one a widget evaluates.

That split is most of what separates raw UTM capture from the fuller picture in how GoHighLevel attribution tracking actually works, and it's worth checking before trusting either number alone on a reporting dashboard you didn't build yourself.

Cover photo by Théo Cold on Pexels

Sources (3)

Need help implementing this in GoHighLevel?

Our team builds, automates, and scales GoHighLevel systems for agencies every day. Book a free call and we'll map out exactly what to ship next.

Book a free call