"Is my cost per lead too high?" is the wrong question. The right one is: "What's my cost per booked, completed, profitable job - and does the math work backwards from my average ticket?"
But CPL benchmarks are still useful as a sanity check. Here's what we see in 2026 across the contractor accounts we manage and audit.
Quick benchmarks (top-50 US metros, 2026)
| Channel | HVAC CPL | Plumbing CPL | | --- | --- | --- | | Google Local Services Ads | $55-110 | $40-90 | | Google Search Ads | $80-180 | $65-150 | | Performance Max / Display | $45-120 | $35-100 | | Meta (Facebook/Instagram) | $25-75 | $20-65 | | SEO / organic | $15-45 | $12-40 | | Direct mail | $90-220 | $70-180 |
Numbers vary heavily by city - coastal metros and Texas can run 30-60% higher than the table suggests, while smaller secondary markets often run lower. These are ranges for established accounts run by people who know what they're doing. Set up poorly, anything can cost 2-3x these numbers.
The number that actually matters
CPL in isolation is meaningless. What you want is Customer Acquisition Cost (CAC) as a percentage of average ticket, and a healthy target is:
- Service calls (repairs, $300-800 ticket): CAC under 15% of revenue
- Installs / replacements ($6,000-15,000 ticket): CAC under 8% of revenue
- Maintenance plan signups (LTV $1,500+): CAC under 25% of first-year value

A $90 lead that converts to a $12,000 install at a 35% close rate works out to $257 in ad spend per booked install, which is 2.1% of revenue. That's an excellent number, even though the raw CPL sounds high.
A $40 lead that only books $200 service calls at a 60% close rate works out to $67 in ad spend per booked job, which is 33% of revenue. That's bleeding cash, even though the raw CPL sounds low.
The CPL number is a trap. Always pair it with close rate and average ticket.
The four levers that move your CPL
1. Ad relevance and Quality Score
Google literally rewards you with cheaper clicks for being relevant. A keyword-tight ad group + matching landing page + clear CTA will pay $4 less per click than a sloppy one bidding on the same word.
2. Conversion rate of your landing page
If your competitor converts traffic at 12% and you convert at 4%, you pay 3x more per lead - same traffic, same CPC, totally different result. Fast load times, sticky phone number, prominent offer, real photos of your team, social proof above the fold. None of it is glamorous; all of it moves the needle.
3. Call answer rate and lead handling
This is the silent CPL killer. If your CSR misses 20% of inbound calls during peak hours, your effective CPL just went up 25%. If they answer but spend 90 seconds gatekeeping ("we'll have a manager call you back tomorrow"), your booking rate cratres. We've seen contractors cut effective CPL by 40% just by fixing call handling - no ad change at all.

4. Service area and category targeting
The wider your service area, the cheaper your lead - but the worse your job mix. Most contractors over-bid on their fringe ZIPs and under-bid on their best 3-5 ZIPs. Tightening geo-targeting often raises CPL and lowers cost per booked job at the same time, because the bookings are denser and the travel time per job is shorter.
Red flags in your numbers
If you see any of these, something is broken upstream - usually in tracking, call handling, or landing page quality:
- CPL is great but CAC per booked job is 3x worse → close rate problem
- CPL is great but reviews are dropping → job quality / dispatch problem
- CPL spikes 50% month-over-month → either ad account got changed (audit it) or seasonality + bid landscape (normal in May and October)
- CPL on Google Ads is more than 2x your LSA CPL → landing page is leaking; rebuild it
How to actually measure CPL correctly
Most shops measure CPL by dividing monthly ad spend by total leads. That's wrong. You need:
- UTM-tagged URLs on every campaign so traffic is traceable to source
- Call tracking numbers unique to each channel (CallRail, CallTrackingMetrics, etc.)
- CRM integration so booked jobs and revenue close the loop back to the lead source
- Disqualified-lead filter so spam, out-of-area, and wrong-service calls don't inflate the count
Without these four, you're guessing. With them, you can finally answer: "If I add $5,000/month to Channel A, how much revenue does that produce?" - which is the only question that matters.
For more on what good marketing tracking looks like, see why HVAC marketing isn't working.
TL;DR
A "healthy" CPL is whatever produces a healthy CAC, given your average ticket and close rate. Don't celebrate $30 leads that book $250 jobs. Don't panic over $120 leads that book $14,000 installs. Run the math both ways and let the answer tell you what to do.
Want us to run your numbers and tell you what's actually broken? Book a 45-minute teardown call - we'll do it live on a screen share.

