Trades industry news, updated weekly
Business Tips

Your Cost Per Lead Is a Lie Without This One Filter

Maria ChenMaria Chen··10 min read

Cost Per Lead by Job Type: Why the Blended Number Is Hiding Your Budget Problem

The 14-truck residential HVAC shop I audited in 2019 had a marketing number that looked fine. Blended cost per lead: $51. Close rate on booked calls: 68%. Nothing in those figures suggested a problem. The P&L looked survivable — not great, but survivable.

Then we broke it apart by job type. Replacement leads were costing $190 per booked job. Tune-up and maintenance leads were costing $18. The $51 was a weighted average of two completely different business activities, and the shop had been pulling budget toward the campaigns that looked cheapest without ever asking what those leads were actually booking.

The blended number wasn't a marketing problem. It was a visibility problem, and the metric itself was manufacturing it.


The Blended Number Looks Fine Until You Break It Apart

Cost per lead feels like a real metric because it's a ratio — total spend divided by total leads — and ratios feel like precision. An average that combines unlike things isn't precision, though. It's noise with a decimal point.

A lead that converts into a 45-minute repair call consumes a technician, a truck, maybe 1.5 hours of operating cost including windshield time. A lead that converts into a two-day system replacement consumes two technicians, multiple truck dispatches, equipment delivery coordination, possibly a permit pull. The lead cost was identical. The overhead absorption wasn't close.

The blended CPL obscures this entirely. A high-volume drain clearing campaign and a lower-volume replacement campaign can produce leads at the same raw cost per lead. Average them together and you get a number that feels manageable and tells you nothing about whether either campaign is profitable. Shops optimizing toward that average are optimizing toward nothing in particular — and gradually pulling budget toward the campaigns that look cheapest, which are usually the ones generating the lowest-margin work.

This is the same dynamic I flagged in the diagnostic call pricing piece: the cost is real, it's just distributed across labor and vehicle expense instead of appearing as a clean line item. What doesn't show up as a line item doesn't get managed.


What Job Type Actually Changes About That Lead Cost

The vehicle cost alone is not comparable across job types. In my experience working through shop audits, fully loaded truck operating cost — fuel, insurance, maintenance reserves, proportional lease or depreciation — varies more than most owners estimate, and the commercial auto component has moved hard since 2021. NICB tracked commercial auto premium increases of 14–22% annually across that period depending on the state. If you haven't rebuilt your truck cost figure in the last two years, you're underestimating it, and the error compounds by job type because longer jobs absorb more of it.

Close rates vary by job type in ways that change the effective CPL significantly. If your diagnostic/repair campaign closes at 74% and your replacement campaign closes at 41%, the CPL on a booked job — what you actually want to measure — looks different from the CPL on a generated lead even when the raw lead cost is identical. Most shops are tracking neither.


The Flat-Rate Book Problem Makes This Worse

The major industry flat-rate pricing vendors are calibrated to produce predictable ticket revenue — consistent price points across job categories. That's useful for customer-facing consistency and useful for the vendor's commission structure. What it doesn't produce is predictable margin by job category, because margin depends on your actual costs, and your actual costs vary significantly by job type.

The blunt version of my position: those books are calibrated to the vendor's interest, not yours. They produce predictable revenue per ticket and unpredictable margin per ticket. That's the opposite of what you want.

When your pricing model doesn't distinguish margin by job type and your marketing measurement doesn't either, the two systems reinforce each other. Drain clearing and repair campaigns generate high volume, cheap-looking CPL, low average ticket. Replacement campaigns generate lower volume, expensive-looking CPL, high average ticket. Without job-type segmentation, replacement campaigns look like the problem. Pull budget from them and you've just optimized toward the work with the worst margin profile.

Sometimes the replacement campaign genuinely is underperforming. But you cannot determine whether $190 per booked replacement lead is worth it until you know the gross margin on those jobs — and whether your pricing actually captures that margin.


What I Saw at Atlantic Comfort Partners

In my two years doing ops analysis inside the roll-up, the first thing the team did after closing on a shop was decompose the blended marketing metrics. Not because we were being thorough. Because the blended number was useless for valuation modeling.

The acquirer's model ran on gross margin by revenue type. Replacement, repair, and maintenance agreements carry different margins and different multiples. If the marketing data couldn't connect spend to margin contribution by revenue type, we couldn't underwrite the growth assumptions. So we decomposed it every time.

What we found, repeatedly, was the same pattern the 2019 audit showed me: replacement leads had crept to $180–$220 per booked job — higher in competitive metros — while tune-up leads at $15–$25 were pulling the blended figure down to something that felt reasonable. The shop owner believed marketing was working. The replacement campaign was quietly hemorrhaging acquisition cost, and nobody had looked.

The shops that had already done this segmentation on their own — a small minority — walked into the sale conversation knowing which channels produced replacement leads at defensible acquisition cost and which didn't. That's a negotiating advantage, because you're not dependent on the buyer's analysis to understand your own business.


How to Actually Build the Filter

You don't need new software. You need a category structure and the discipline to apply it.

Five categories: emergency repair, diagnostic/repair non-emergency, system replacement, maintenance agreement conversion, add-on and IAQ. Stop there. Twelve subcategories sound thorough. They also fail within two months because nobody maintains them at intake under job pressure.

For each category, track five data points: cost per lead by source, close rate, average ticket, gross margin percentage, and whether the job was financed. The financing column matters because financed replacement jobs carry settlement lags that affect when that margin actually converts to cash. Your days sales outstanding — the average time between invoicing and cash received — on a financed replacement job is not the same as your DSO on a repair call. If you're managing marketing spend against CPL without tracking whether resulting jobs are financed, you're missing a cash timing variable that affects whether you can cover payroll.

For lead source matching: if your CRM tags leads to source at intake, pull the last 90 days, sort by category, match to source, divide spend by booked jobs — not leads generated, booked jobs. If your CRM isn't tagging leads to source at intake, fix that before anything else. You cannot build accurate job-type CPL on untracked leads.

On financing partners: Synchrony, GreenSky, Foundation Finance — whoever you're using is fine. The point is to use a partner and track the settlement timing separately from your job-type CPL. Don't be the bank. That's a different article, but it starts here.


What to Do Monday Morning

Pull your last 90 days of booked jobs from the dispatch log.

Sort them into four categories to start: emergency repair, diagnostic/repair, replacement, maintenance and add-on. The exact labels matter less than picking ones you'll still use in six months.

For each category, write down three things: jobs booked, average ticket, and lead source. If you can't identify the source for more than a third of those jobs, stop. That is the problem you fix first. Build a source field in your intake log — LSA, organic, referral, Angi, repeat customer, whatever your actual sources are — and make sure every incoming call gets tagged before the job is booked.

If your source data is reasonably complete, take your marketing spend for the same 90 days by source and divide by booked jobs in each category from that source. That's your job-type CPL.

It will not be pretty the first time. That's expected. Run it again in 90 days. The trend line between two readings will tell you more than a year of watching a blended average that never changes for identifiable reasons.


FAQ

My Google Ads agency already sends me a CPL report every month — isn't that the same thing?

No. Your agency's CPL report measures what their channel costs to generate a lead. It doesn't know what job type that lead converts into, what the close rate is by job type, or what margin the resulting work produces. A complete job-type CPL analysis requires your dispatch data and your job costing data joined to lead source data. Your agency has one of those three inputs. The other two live in your dispatch log and your P&L, and nobody is connecting them unless you do it.

What if most of my leads come from one source — does job-type segmentation still matter?

More, actually. If you're concentrated in a single source — LSA, Angi, one referral network — and that source generates a mix of job types at a blended rate, you have no mechanism for knowing whether to increase or cut spend. One channel generating profitable replacement leads and unprofitable tune-up leads at the same surface CPL is two separate problems. You need to see them separately to manage either one.

How do I handle leads that come in as one job type and close as something different — like a tune-up that becomes a replacement?

Track at close, not at intake. The lead source that generated the tune-up call gets credit for the replacement revenue if that's how the job closed. Tag both: intake category and close category. The gap between them, measured over time, tells you which channels are generating jobs that convert up — which changes the actual value of those leads considerably.

We're a 4-truck shop. Is this level of tracking realistic for us?

Yes. At four trucks you're running roughly 15–25 jobs a week. A 90-day pull is 180–300 jobs — a spreadsheet, not a data infrastructure project. You have the dispatch log and you're paying the marketing invoices, so you have the spend by source. The first pass takes a couple of hours. The output will be imperfect and still more useful than the blended number.

How do I know what a good CPL is for a replacement versus a repair — is there a benchmark I should hit?

I'd push back on the framing. A benchmark CPL without your specific gross margin on each job type isn't meaningful. A shop at 41% gross margin on replacements can sustain a higher replacement CPL than a shop at 28%. Build your own floor: take your average gross margin dollars per job type and calculate the maximum acquisition cost that keeps you net positive after overhead. That's your ceiling. It's specific to your numbers, not a composite of shops with different cost structures.

Does the job-type filter change how I should think about seasonal spend?

Significantly. Replacement demand concentrates in the June–July cooling season and the October heating season kickoff — the months when equipment fails under load. Emergency repair CPL spikes when volume exceeds your capacity and close rate drops because you can't get to everyone. Tune-up and maintenance demand is schedulable and largely counter-seasonal, which is why shops use it to fill shoulder months. Running a blended CPL across all four seasons averages peak replacement acquisition costs against shoulder-season maintenance costs and calls the result your marketing performance. They're different markets with different dynamics. Measure them that way.

Enjoyed this article?

Get articles like this in your inbox every Monday. Free, no spam.

More from The Backcharge