Lead generation · how-to
lead attribution for small teams.
Lead attribution for a small team comes down to one rule: every lead arrives with its source attached, and you record what happened to it. Tag the links you control with UTM parameters, copy those values into a hidden field on your forms, and log each lead in one shared tracker. Months later you can see which sources produced sales, not just inquiries.
You do not need an analyst or a new tool for this. You need agreed names, a few form fields and a habit.
start with the goal
You want to answer one question: which channel produced the lead, and did that lead become a customer? Clicks and form fills are only the first half. A channel that sends many inquiries and no sales is not working, and you can only see that if the source stays with the lead until the outcome.
use utm parameters on every link you control
UTM parameters are short tags added to the end of a URL. There are five:
- utm_source: where the click came from, such as a platform or a newsletter.
- utm_medium: the type of channel, such as email, social or paid.
- utm_campaign: the specific effort or offer.
- utm_term: the keyword, mainly for paid search.
- utm_content: which version of an ad or link was clicked.
Source, medium and campaign are the ones to fill every time. The other two are optional.
Tag every link you control: ads, emails, social bios and posts, and links you give to partners. Never tag links inside your own site. A tagged internal link resets the visit’s source in your analytics, so the real source is replaced by your own page.
agree one naming convention
UTM tracking for leads fails on spelling. “LinkedIn”, “linkedin” and “linked-in” count as three sources. Keep one sheet of agreed values, write everything in lowercase, and use hyphens, not spaces.
| utm_source | utm_medium | utm_campaign |
|---|---|---|
| social | spring-offer | |
| newsletter | october-update | |
| paid | boiler-service | |
| partner-name | referral | intro-link |
A link built from the first row ends in ?utm_source=linkedin&utm_medium=social&utm_campaign=spring-offer. Anyone adding a new value adds it to the sheet first.
capture the source on your forms
To track form leads, add hidden fields to the form: source, medium, campaign, referrer and landing page. A small script fills them from the page address when the page loads.
Visitors often browse several pages before they fill in a form, and the tags are gone by then. Store the first-touch values in a first-party cookie or local storage on the first visit, and read them when the form is submitted. Consent rules apply in some markets, so check what your consent banner allows before storing anything.
Test the form yourself. Open a tagged link, click through two pages, submit, and confirm the values arrive in your tracker.
phone calls need their own method
Calls carry no URL. Use a different tracked number for each channel through a call-tracking service, or ask every caller how they found you and log the answer. The question is cheaper and works at small volume.
ask “how did you hear about us”
Add a self-reported field to every form and every call script, and keep it separate from the tagged data. It catches what UTMs miss: word of mouth, podcasts, and answers from AI assistants that name you without sending a trackable click.
When the two disagree, do not pick a winner. A lead tagged as paid search who says a friend recommended you tells you something real about how people choose you.
keep one shared tracker
A CRM works. So does a spreadsheet. What matters is that everyone reads and writes the same one. Each lead row holds:
- the date
- source, medium and campaign
- the landing page
- the self-reported answer
- qualified, yes or no, against your written definition (see what is a qualified lead)
- the outcome later: won or lost, and the value
The last column is the one teams skip, and it is the one that connects source to sale.
first touch or last touch
First touch is the source of the visit that first brought the person to you. Last touch is the source of the visit just before they inquired. A person might find you through a social post, then return later from a search and fill in the form. First touch credits the post, last touch credits the search.
Record both and compare them. Do not build a multi-touch model at small scale; there is not enough volume for it to tell you anything the two simple views do not.
review it monthly
Once a month, look at leads by source, then qualified leads by source, then sales by source once outcomes are in. Sales lag leads, so look back over several months too. Move effort toward the sources that produce qualified leads and sales, not the ones that produce volume.
common mistakes
- Inconsistent names, so one channel splits across several rows.
- Tagging internal links, which overwrites the real source.
- Redirects that strip the parameters before the page loads.
- Forms or form plugins that drop hidden fields on submit.
- No outcome recorded, so source can never be linked to a sale.
how we handle it
Our lead generation service feeds landing pages, forms and tracked calls into one shared tracker, checks each lead against criteria agreed at the start, and hands it over within one working day with the source attached. You close; we report on what each channel produced and tune toward the ones that convert.
questions
Do I need an analyst to track which channel produced the lead?
No. Tagged links, hidden form fields and one shared sheet or CRM are enough. The discipline is in using the same names every time and recording the outcome.
Should I use first-touch or last-touch attribution?
Record both. First touch shows what brought the person in, last touch shows what closed the step. At small scale, comparing the two beats building a multi-touch model.
Why ask "how did you hear about us" if I already use UTMs?
UTMs only see clicks on tagged links. They miss word of mouth, podcasts, and answers from AI assistants. A self-reported field catches those and cross-checks the rest.
What if a lead arrives with no source?
Log it as direct or unknown and ask them. A steady stream of unknowns usually means a broken redirect, an untagged link, or a form that drops its hidden fields.