GoHighLevel Attribution Reporting: Track Lead Sources (2026) — HL Growth Partner, Dr Priya Jaganathan

GoHighLevel Attribution Reporting: Track Lead Sources (2026)

September 16, 2026

By Dr Priya Jaganathan, GoHighLevel Certified Admin · HL Growth Partner, Australia · Updated 16 September 2026 · 9 min read

Some links below are affiliate links — if you sign up through them, HL Growth Partner may earn a commission at no extra cost to you. It never changes what we recommend. Full disclosure.

GoHighLevel attribution reporting answers one question every client eventually asks: where did this lead actually come from? The platform stores that answer on the contact record itself, and it does it automatically, from the first session a person has with your funnel.

The trouble is that most sub-accounts capture half of what they could. UTMs aren't on the ad links, forms sit on pages the parameters never reach, and nobody has decided whether to report on first touch or last touch. This guide covers how the attribution engine behaves, what it records, where it goes quiet, and how to build source reporting a client will trust.

Quick Facts

Where it livesSub-account Reporting area, plus attribution fields on every individual contact record.
What is storedFirst Attribution and Latest Attribution — both held on every contact, at the same time.
Fields capturedSession source, medium, campaign, UTM content and term, GCLID and FBCLID, referrer, and landing page URL.
First touch behaviourWritten on the first recorded session and left alone from then on.
Last touch behaviourOverwritten each time a new qualifying session is recorded for that contact.
Workflow accessContact First Attribution and Contact Last Attribution are available as workflow variables.
Known gapInbound phone calls and manually created contacts carry no browser session, so no source is recorded.

Where GoHighLevel attribution reporting actually gets its data

Attribution in HighLevel is session-based. When someone lands on a funnel page, site page or booking widget in the sub-account, the platform records that session and everything it can read from the URL.

That session sits waiting. The moment the visitor identifies themselves — a form submission, a booking, an order — it binds to a contact record and becomes attribution.

The session, not the click

The most useful thing to understand about HighLevel attribution tracking: no identification event, no attribution. A thousand people can view your landing page from a Meta campaign and none of it appears in the report until one converts.

It also means the capture page has to be one HighLevel can see. A properly built HighLevel lead capture funnel gets this for free. A form iframed onto a WordPress site three redirects from the ad often does not.

What lands on the contact record

Open any contact, scroll to the attribution panel, and you'll find:

  • Session source and medium — where the traffic came from and how it was delivered.
  • Campaign, content and term — pulled straight from your utm_campaign, utm_content and utm_term values.
  • GCLID and FBCLID — the click identifiers Google Ads and Meta append automatically.
  • Referrer URL — the page that sent them, when the browser passes one.
  • Landing page — the exact URL they arrived on, often more diagnostic than the source itself.

HighLevel's documentation on understanding attribution traffic sources also sets out the categories the platform buckets traffic into.

First touch or last touch — HighLevel attribution tracking stores both

You don't choose at the data layer — both values are written and kept on the contact. You choose at the reporting layer, and you should do it deliberately.

Consideration First Attribution Latest Attribution
Question it answers What introduced this person to the business? What was happening right before they converted?
Changes over time No — set once and preserved Yes — rewritten on each new session
Best used for Top-of-funnel budget decisions, brand and content spend Closing-channel analysis, retargeting and email performance
Typical distortion Undercredits the nurture channels that finish the job Overcredits branded search and email, which sit closest to the sale

Which one to report on

Report both, on the same dashboard, side by side. The gap between the columns is the most interesting number in the account — the size of your nurture effect, not a contradiction to explain away.

Attribution is not a scoreboard. It is a map of how strangers become customers — and the channel that gets the credit is rarely the only one that did the work.

Getting UTMs onto every funnel, form and calendar

HighLevel can only record what arrives in the URL. If your ad link is a bare domain, the contact shows as paid traffic at best and direct at worst.

Tag every outbound link with utm_source, utm_medium and utm_campaign as a minimum. Google's official guidance on campaign URL parameters is the standard everyone follows, HighLevel included, so use its conventions rather than your own.

Set a naming convention and lock it

Parameter values are case sensitive. Facebook, facebook and FaceBook report as three separate sources, and no dashboard configuration fixes that after the fact.

  • Lowercase everything, always — source, medium, campaign, the lot.
  • Use hyphens, never spaces or underscores mixed together.
  • Keep a short approved list of mediums: cpc, paid-social, email, sms, organic, referral.
  • Store those approved values as custom values in the sub-account so the team builds links from one source of truth.

Then check the capture side. Enable UTM tracking on the form element in the funnel editor, and confirm your GHL forms and surveys are mapping those parameters on submission. Calendars behave the same way.

Not on HighLevel yet? Start with a free 30-day trial here — long enough to build everything in this guide before you pay a cent.

Why lead source tracking in GHL shows "direct" and "unknown"

Every account has a direct bucket. A large one usually means something is broken, not that people are typing your URL from memory.

The usual culprits, in the order I find them:

  • Untagged links. Organic social posts, email signatures and QR codes pointing at a clean domain.
  • Redirects that strip parameters. A vanity domain or shortener that drops the query string en route.
  • Forms hosted off-platform. UTMs on the parent page never reach a form inside an iframe.
  • Manual and imported contacts. A CSV import or a contact typed in by reception has no session.
  • App-to-browser handoffs. Some in-app browsers and privacy settings suppress the referrer entirely.

Before blaming the platform, pull a list of direct contacts and read their landing page field. It usually names the leak.

Google Ads and Meta attribution inside HighLevel

Google Ads

With auto-tagging on, Google appends a GCLID to every ad click and HighLevel stores it against the contact. That identifier makes closed-loop reporting possible — you can send a conversion back when the deal is won, not when the form is filled. Keep manual UTMs too: the GCLID for the feedback loop, the UTMs for readable reporting.

Meta

Meta appends an FBCLID on click, and it lands in the same attribution block. The complication is native lead forms — a lead ad never sends the person to your funnel, so there is no session and no UTM to capture.

Those leads arrive through the integration instead, so the source has to be set by the connection and your workflow. Plan for it when you configure the campaign, not when the report looks wrong.

The call and SMS attribution gap nobody warns clients about

Phone calls are where attribution quietly falls over. Someone sees a Google ad, rings the number on the page, books over the phone — and the CRM records a contact with no source.

Two practical fixes. Use dynamic number insertion so a distinct tracking number shows for each channel, and record that channel on the contact at creation. For outbound SMS and email, use trigger links with tracking so clicks stay attributable. Neither is perfect, but both turn a blank field into something a client can act on.

Building source-based reporting with pipelines and smart lists

Attribution on a contact is interesting. Attribution tied to revenue is what gets the retainer renewed.

The chain is simple: contact captures a source, contact becomes an opportunity, opportunity carries a value and a stage. Set up pipelines and opportunities properly and every won deal inherits the source behind it.

From there, build saved views. Smart lists segmented by attribution source give the sales team a working queue and you a sanity check on the dashboard totals. Then build the client-facing widgets, filtering each on first or latest attribution.

What to tell a client whose numbers don't match their ad platform

They will not match. They measure different things, and saying so early beats explaining it after a bad month.

Difference Ad platform GoHighLevel
Attribution window Credits conversions back to a click or view days earlier Credits the session that produced the record
Cross-device Stitches devices via logged-in identity Treats each browser session separately
View-through Often included Not captured — a view leaves no session
Date logic Reports on the click date Reports on the date the contact was created
Modelling Estimates unobserved conversions Counts only records that exist

The framing that works: the ad platform is the optimisation signal, the CRM is the accounting record. Google and Meta need conversion data to steer bidding. The client needs to know what a booked job cost. One number cannot do both.

Common mistakes to avoid

  • Running ads to an untagged URL. No parameters means no attribution, and no retrospective fix.
  • Mixing case and separators in UTM values. Fragmented sources make every report look worse than reality.
  • Reporting last touch only. Branded search and email absorb credit earned further up the funnel.
  • Ignoring phone leads. Untracked calls sit in the direct bucket and make paid search look unprofitable.
  • Overwriting attribution fields in workflows. A written source destroys the captured session data permanently.
  • Presenting CRM figures as if they should equal the ad account. Set that expectation in onboarding.

If you want your attribution and revenue reporting built and audited properly, book a strategy call with the HL Growth Partner team.

Book Your Strategy Call →

Or if you just need the software first: grab the 30-day HighLevel trial and book us when you're ready to scale it.

Frequently asked questions

Where do I find the Attribution Report in GoHighLevel?

Attribution sits in the Reporting area of the sub-account, alongside the other performance reports. You can also see attribution for any individual person by opening their contact record and looking at the attribution panel. Both views draw on the same underlying session data.

Does GoHighLevel store first-touch and last-touch attribution at the same time?

Yes. Every contact carries both a First Attribution and a Latest Attribution value simultaneously. First Attribution is written on the first recorded session and stays fixed, while Latest Attribution is updated each time a new qualifying session is recorded for that contact.

Which UTM parameters does GoHighLevel capture?

The standard set is captured: utm_source, utm_medium, utm_campaign, utm_content and utm_term. HighLevel also records the GCLID and FBCLID click identifiers, the referrer URL and the landing page. Those parameters must be present on the URL hosting your form or booking widget.

Why are so many of my leads showing as direct or unknown?

Direct usually means the tracking parameters never reached the capture page. Common causes are untagged links, shorteners that strip the query string, forms in iframes that do not inherit the parent URL, and contacts created manually or by import. Check the landing page field on a sample to find which applies.

Can GoHighLevel attribute inbound phone calls to a campaign?

Not on its own, because a phone call generates no browser session. The practical workaround is dynamic number insertion, where each channel displays a distinct tracking number, so the number dialled identifies the source. Without that, calls will land in the direct bucket regardless of which ad drove them.

Why do my GoHighLevel numbers not match Google Ads or Meta?

They measure different things. The ad platforms apply attribution windows, cross-device identity stitching, view-through credit and modelled conversions, while HighLevel counts the session that actually created a record. Use the ad platform to steer bidding and the CRM as the accounting record of what a lead genuinely cost.

Can I use attribution data inside workflows?

Yes. Contact First Attribution and Contact Last Attribution are available as workflow variables, so you can route leads, assign owners or change messaging based on where someone came from. Just avoid writing values back over the captured attribution fields, because that overwrites the original session data permanently.

Ads and conversion tracking

Tracking links and data plumbing

Reporting foundations

Dr PriyaJaganathan

Dr PriyaJaganathan

Dr Priya Jaganathan is a Go High Level Certified Admin, trusted CRM consultant based in Australia, and a keynote speaker at SaaSpreneur Sydney and Level Up 2025 in Dallas.

Back to Blog