To track where a lead came from, you need the source recorded on the lead itself at the moment the form is submitted, not counted in a report afterwards. That means capturing the channel, the campaign and the pages they visited, and writing all of it onto the record that lands in your CRM.

Most businesses never do this, and it is usually not for want of tools.

The gap most setups leave

I spent years running a marketing agency. The thing that surprised me was not how many clients had bad tracking. It was how many had good tracking and still could not answer a simple question.

A lead comes in. Sarah, from a plumbing supply company, wants a quote. Where did Sarah come from?

The client has Google Analytics. They have a CRM. They are spending twelve thousand a month on Google Ads. And nobody in the building can say whether Sarah arrived from the ads, from an article, from the Google Business Profile, or from a mate who passed on the number.

Analytics is good at what it does. It will tell you four hundred people came from Google Ads last month and nineteen submitted a form. It will not tell you that Sarah was one of them. Your CRM, meanwhile, starts at her name and knows nothing about how she got there.

Between the aggregate and the name there is a gap, and the answer you want lives in it.

That distinction sounds small until you try to follow a lead forward. Sarah becomes a quote, the quote becomes a job, the job is worth eight thousand dollars. Only when the source is attached to Sarah can you say what that Google Ads click was actually worth. Without it you have a cost per conversion and no idea whether the conversions were any good.

Method 1: UTM parameters and hidden form fields

The standard answer, and the one anyone who has done this before will give you.

You tag the links you control with UTM parameters. A script in your site header reads those values out of the URL and writes them into hidden fields on your forms. On submit, the source travels with the submission into your CRM.

How to do it:

  1. Agree a naming convention for utm_source, utm_medium and utm_campaign, and write it down. Inconsistent capitalisation alone will split your reporting in two.
  2. Tag every link you control. Ads, email, social bios, directory listings, QR codes, email signatures.
  3. Add hidden fields to every form for each parameter you care about.
  4. Add a script that reads the query string on landing, holds the values for the session, and fills the hidden fields on submit.
  5. Create matching fields in the CRM so the values have somewhere to go.

It works. I have built it for clients plenty of times.

What it misses is everything you cannot tag. Organic search, direct traffic, someone who saw the ad on Monday and typed your domain on Thursday, a referral from a directory you forgot existed. On most accounts I looked at, that was the larger share of the traffic, and none of it carries a UTM.

It also fails quietly. A new form goes live without the hidden fields, someone shares an untagged link from their phone, and nothing warns you. The data just gets less true while you keep trusting it.

Method 2: A landing page per source

Send each channel to its own page and infer the source from the page the form sat on.

Fine for a tightly controlled campaign where the visit is short. For everything else it breaks the moment someone behaves like a person. They land on the ads page, click through to services, read two case studies, then fill in the form on your contact page. You have recorded "contact page" and binned the real answer.

People do not arrive and convert in one move. If your tracking only sees the final page, you are measuring the last step rather than the thing that worked.

Keep it as a supporting signal. It is not a system.

Method 3: Ask the lead

Add a "how did you hear about us" field.

Worth having on the form, worth ignoring as data. People pick the first option, say "Google" for everything including the referral their accountant made, or skip it. It is a decent opener for the sales call and a poor basis for a budget decision. Make it optional, make it free text, treat it as colour.

Method 4: Call tracking

If a real share of your enquiries arrive by phone, no form-based method sees them at all.

Call tracking gives each channel its own number, or swaps the number on the page based on how the visitor arrived, so the call carries its source. For trades, legal, medical and anything else where people ring rather than type, this is essential, and it is often most of the enquiries.

It covers calls and nothing else, so it runs alongside whatever handles your forms. And it only works while the number-swapping script works, which is worth checking more often than most people do.

Method 5: Put the source on the record automatically

The shared weakness in the first four is that each one produces a number in a report, and reports are not where decisions get made. Decisions get made on the lead record during the sales conversation, and later when you look back at who actually bought.

So the thing you want is the source arriving attached to the person, with nobody tagging anything.

That means capturing, at submission:

  • The channel that first brought them to the site, not just the last click
  • The campaign, where there was one
  • The first page of their session
  • The page they submitted on
  • The path between the two

The page path is the part people skip and the part that tells you most. What someone read before enquiring tells you what convinced them, which is a more useful question than where they came from.

This is the gap Lead Source was built to close, and I co-founded the company to close it. Worth saying plainly before you read any further into my opinion here. One line of code in the site head, and the source, campaign and page journey land on the lead record in your CRM for every enquiry, including the ones no UTM could have tagged. It records the first touch and the last touch, so you are not forced to pick one and lose the other.

The approach is worth taking either way. If you would rather wire it up yourself, method 1 genuinely works, as long as you commit to maintaining it.

What a working setup looks like

For most businesses the honest answer is a combination:

  • Automatic capture on every form submission, so the source lands on the record
  • Call tracking, if phone enquiries matter to you
  • UTM parameters on paid and email links, because they sharpen the campaign detail
  • Conversion actions in Google Ads, so the ad platform has the signal it needs to bid

Four different jobs, and no single one replaces the others. The mistake is assuming analytics covers all four, then making budget decisions as though it did.

Then close the loop

Knowing the source is step one. Step two is knowing what happened next.

A lead with a source on it becomes useful the day it closes. That is when you can say the Google Ads campaign produced the eight thousand dollar job and the directory listing produced four tyre kickers. Getting that outcome back into Google Ads so the bidding learns from it is offline conversion tracking, and the way it works changed in June 2026.

Start with the source on the record. The rest is built on that.