How GoHighLevel Lead Source Tracking Actually Works
GoHighLevel lead source tracking only works when a contact converts through one of the platform's own tools. A form, a survey, a calendar booking, a chat widget conversation, or an order form submission triggers it to log where that person came from.
Fill out an embedded form built outside GoHighLevel, or get added through a lead management workflow they never touched, and there's nothing to attribute.
What Triggers GoHighLevel Lead Source Tracking
External forms aren't automatically shut out. If one is DOM-based, GoHighLevel can still capture attribution through its external tracking setup. Skip that step and the submission arrives with no source attached.
There's a timing catch, too: the visitor can't navigate away from the landing page before converting, or the UTM parameters never register.
Click an ad, browse for a minute, then convert on a different page, and that ad's data is gone.
The UTM Parameters GoHighLevel Checks
Google defines utm_source as the referrer and utm_medium as the channel type, and utm_campaign the specific effort. Its own guidance on campaign URL parameters calls those three the baseline set; skip one and the dimension shows up blank in standard reporting.
GoHighLevel's own rules check for a specific string, not just the right intent. Not every utm_source value gets sorted the way you'd expect.
| Platform | Required utm_source | Other parameters checked |
|---|---|---|
| Google Ads | adwords (case-sensitive) | utm_medium, utm_campaign, utm_content, utm_matchtype, campaign_id, ad_group_id, ad_id |
| Facebook/Instagram | fb_ad | utm_medium, utm_campaign, utm_content, campaign_id |
Get the value wrong, capitalize it differently, or drop a parameter, and the click lands in the wrong bucket.
GoHighLevel also reads click IDs directly: gclid, wbraid and gbraid from Google, msclkid from Microsoft and Bing ads, ctwa_clid from WhatsApp click-to-chat.
Lacking any of those, it falls back to the referring domain, then sorts the result into one of eleven priority categories, among them paid search, paid social, organic search and direct traffic.
Setting up lead_source as its own custom field from the start saves cleanup once volume picks up.
Where the Data Shows Up, and What It Misses
GoHighLevel separates two fields that sound alike but answer different questions. Source is the raw contact field set at creation, something like "Facebook Lead Ad" or "Manual." Session Source is the attribution-level field reflecting the traffic channel behind the conversion, like "Paid Social" or "Organic Search."
A contact's Source can say one thing while its Session Source says another. Pull a report from the wrong field, and it disagrees with the one beside it.
The Contacts by Source, Contacts by Medium, and Top Sources for Contacts Created widgets all report on attribution. Each one carries a Latest Attribution filter that can't be removed.
A contact who first clicked a Google ad but came back weeks later through organic search shows up under organic search here, not under the ad that found them first. Contacts added by CSV import, or created manually without a tracked session, won't appear unless attribution was assigned at import.
Once a contact's source is recorded accurately, it's the input everything downstream depends on, including how you end up scoring leads by engagement.
Phone calls get tracked a different way. A number pool shows a unique tracking number to each visitor based on how they arrived, then matches the inbound call back to that visitor's cookie and session data.
Setting one up means buying at least four numbers, a forwarding number, and a tracking snippet on the site: the kind of detail worth getting right during initial GoHighLevel setup rather than fixing later.
Google Ads campaigns can even pass the search keyword through a URL parameter, so a call shows up in reporting tied to the exact term that triggered it.
None of this works backward. A lead source field only reflects reality from the moment tracking is wired in correctly, which is why getting the setup right matters more before launch than cleanup after the leads arrive unlabeled.
Cover photo by RDNE Stock project on Pexels
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