How Lead Source Attribution Works
Most HVAC shops can tell you exactly what they spent on marketing and roughly nothing about which part of it produced revenue. The gap is not a reporting problem — it is a capture problem, and it happens in the first thirty seconds of a phone call.
Attribution fails because the source is captured at the job stage instead of the lead stage. By the time a job exists, the leads that never converted are invisible and most of the information is gone.
The number worth measuring is not cost per lead. It is cost per booked job by source — because a channel producing cheap leads that never book is the most expensive channel you have.
Where attribution leaks
Leak one: enquiries that never become leads
A missed call is not recorded anywhere. Neither is a form submission nobody replied to, or a voicemail left at 7pm that nobody returned.
Those enquiries cost you exactly as much to generate as the ones you answered. If a channel produces calls at times you do not staff, it looks unprofitable in your figures — when the real problem is that nobody picked up.
Leak two: the source not carried forward
The larger leak, and the more insidious. Many shops capture the source when a job is created rather than when the enquiry arrives.
The consequence: your data shows the source of jobs you won and says nothing about the source of enquiries you lost. A channel with a 15% booking rate and one with a 60% booking rate look identical, because you only counted the bookings.
Why asking the customer does not work
“How did you hear about us?” is the standard approach and it is unreliable for three reasons that have nothing to do with honesty.
People genuinely do not remember. They saw a van, mentioned it to a neighbour, and searched your name three weeks later. Which of those was the source? All of them, arguably.
They answer with the last thing. “I found you on Google” is usually true and usually incomplete — they searched your business name because they had already seen it somewhere.
CSRs guess. Under pressure on a hot Tuesday, “Google” becomes the default entry for anything unclear, and your data acquires a large and meaningless bucket.
Use it as a supplement, never as the primary method. It is genuinely useful for catching sources you cannot track technically — referrals, van sightings, a neighbour’s recommendation.
The methods that do work
| Method | What it captures | Effort |
|---|---|---|
| Tracked phone numbers | A distinct number per channel, so the source is known before anyone speaks | Low. The highest-value single change |
| Hidden form fields | Which page and campaign a web enquiry came from, automatically | Low, once set up |
| Distinct landing pages | Traffic and conversion per campaign | Medium |
| Unique offer codes | Mailers and print, where nothing digital exists | Low |
| Asking the customer | Referrals and offline sightings | Low, and unreliable alone |
Use a different phone number for each marketing channel.
One number on your search ads, another on your local listing, another on the vans, another on mailers. All ring the same office. The source is recorded automatically, before anyone says hello, with no CSR judgement involved and no reliance on the customer’s memory.
It also records the calls you missed — which is the leak you currently cannot see at all.
What to actually measure
Three metrics per channel, and the third is the one that changes decisions.
Cost per enquiry. Spend divided by enquiries. Useful, and the number most shops stop at.
Booking rate. Of enquiries from this channel, what share became a booked job? This is where channels separate dramatically.
Cost per booked job. Spend divided by jobs booked. The number worth managing.
| Channel A | Channel B | |
|---|---|---|
| Monthly spend | $2,000 | $2,000 |
| Enquiries | 100 | 40 |
| Cost per enquiry | $20 | $50 |
| Booking rate | 15% | 60% |
| Jobs booked | 15 | 24 |
| Cost per booked job | $133 | $83 |
Channel A looks twice as efficient on cost per enquiry and is substantially worse on the measure that matters. A shop optimising towards cheap leads would move budget in exactly the wrong direction.
And one more layer if you can reach it: average job value by source. A channel producing service calls and a channel producing replacement enquiries should not be compared on volume at all.
The multi-touch problem
Most customers encounter you more than once before calling. They see a van, notice a listing, ask a neighbour, then search your name.
Single-source attribution assigns all the credit to the last touch, which systematically undervalues everything that built recognition earlier — vans, signage, sponsorships, word of mouth.
Full multi-touch modelling is not realistic for a small contractor, and pretending otherwise leads to expensive tooling that nobody maintains. Two pragmatic adjustments instead:
Record branded search separately. Someone searching your business name did not discover you through search. They already knew you existed. Tracking that separately from generic searches tells you how much of your search volume is harvesting awareness built elsewhere.
Do not cut brand-building channels on last-touch data alone. If van wraps show almost no direct attribution but your branded search volume is high, the wraps may well be doing the work that search is getting credit for.
The simplest version worth building
You do not need a marketing stack. Four steps, achievable in a fortnight:
- A tracked number per channel. Four or five numbers covers most shops
- A source field on the lead record, populated automatically where possible, with a short fixed list where it is not — and no free-text option, because free text becomes unanalysable within a month
- Carry the source through to the job. This is the step that closes leak two, and it is usually a configuration setting rather than a feature
- One monthly report: enquiries, booked jobs and revenue by source
The capability to run that report is one of the clearest dividing lines between a customer database and a genuine pipeline, which is the distinction covered in the comparison of CRM and field service management.
Frequently asked questions
Why can’t I tell which marketing works?
Is asking customers how they found you good enough?
What is the single most useful attribution change?
Should I optimise for cost per lead?
How should I handle customers who found me through several channels?
Do I need marketing software for attribution?
What to do next
- Set up a tracked number per channel. It is the highest-value single change and it takes a day.
- Check whether your system captures source on the lead or only on the job. If it is the job, that is leak two and it is usually a settings change.
- Replace any free-text source field with a short fixed list. Free text becomes unanalysable within a month.
- Calculate cost per booked job by channel for last quarter. It will probably reorder your priorities.
- Why unsold estimates go cold — the leak further down the same funnel
- Capacity planning — making sure booked demand can actually be served
- What HVAC software costs — what attribution capability is worth paying for
The channel figures in this guide are illustrative examples constructed to demonstrate a calculation, not measured data from any business. Run the same arithmetic with your own spend, enquiry and booking numbers.