Key takeaways
- No published benchmark fits your shop. Your own spend, booked calls and sold systems give the only number worth managing.
- Split repair and replacement campaigns so the cheap repair lead and the expensive replacement lead are judged on their own returns.
- Heat waves and cold snaps raise click prices and fill your board at the same time, which makes extra leads worth less.
- Answering every call and booking more of them lowers cost per booked call faster than chasing cheaper clicks.
There is no honest Google Ads cost per lead benchmark for an HVAC company, because a lead can be a tune-up request, a no-heat emergency or a full system replacement. The number that matters is your own cost per booked call, and for replacements, cost per sold system. Both come from your ad account and your field service software, not from a chart.
Cost per lead vs cost per booked call
Cost per lead tells you what Google charged; cost per booked call tells you what a customer on the schedule cost. The gap between the two is everything that happens after the phone rings: missed calls, callers who only wanted a price, appliance and window-unit calls, and CSRs who could not offer a slot until next week.
For HVAC, there is a third number. A replacement lead becomes an in-home estimate, and the estimate either sells or it does not. Judging replacement campaigns on cost per lead will make them look expensive and push you toward cutting the campaign that pays for the rest.
Worked example (hypothetical round numbers, not a benchmark). Say you spend one month on two campaigns:
| Repair campaign | Replacement campaign | |
|---|---|---|
| Spend | $4,000 | $2,000 |
| Leads (calls and forms) | 100 | 20 |
| Cost per lead | $40 | $100 |
| Booked service calls or in-home estimates | 50 | 10 |
| Cost per booked call or estimate | $80 | $200 |
| Systems sold | not applicable | 3 |
| Cost per sold system | not applicable | about $667 |
On cost per lead, the replacement campaign looks two and a half times worse. On cost per sold system, it may be the best money you spend all month. That depends on your margin per install, which only you know.
From cost per lead to cost per booked call
- Leads you pay for Where it leaks: Spam and wrong numbers
- Real inquiries Where it leaks: Calls nobody answers
- Conversations Where it leaks: Quoted, never followed up
- Booked call Your real number: cost per booked call
Calculating your number
- Pick a full month with real weather. A mild week in the shoulder season tells you little. Compare like months when you can.
- Pull spend by campaign. Keep repair, replacement, maintenance and indoor air quality campaigns separate so each has its own cost.
- Count real leads. Use Google's call tracking for calls from ads and from your site, set a minimum call length that filters hang-ups, and remove duplicate callers (call tracking setup).
- Match leads to jobs. Tag each lead in ServiceTitan, Housecall Pro or Jobber with its campaign, then mark whether it booked, ran and sold. Tracking numbers or campaign tags on the job record make this a filter rather than a guessing game.
- Divide for each stage. Spend divided by booked calls gives cost per booked call. Spend divided by systems sold gives cost per sold system. Do it for each campaign.
- Compare with what a customer is worth to you. Use gross profit per job, and count memberships sold on those calls. A repair customer who joins your maintenance plan keeps paying for tune-ups long after the ad that found them.
- Feed the result back to Google. Import booked and sold outcomes as conversions so automated bidding learns from booked calls, not from clicks (conversion measurement).
Why costs rise around peak summer and winter
Costs rise in peak summer and winter because every HVAC company in your area turns its budget up on the same hot or cold days, and homeowners click more ads while they shop for whoever can come today. Prices per click go up, and your own board fills at the same time.
That second effect is the one owners miss. When your techs are booked three days out, a paid lead often cancels and books a competitor who can come tomorrow. The click got more expensive and the chance of booking it went down.
The shoulder seasons run the other way. Emergency searches drop, and the demand is tune-ups, replacements on aging systems and new homeowners who want the system checked. Clicks can be cheaper, but the leads need more follow-up before they book. Plan budgets month by month instead of one flat number all year.
Lowering cost per booked call
The fastest savings sit between the ring and the schedule, not in the bid.
- Answer every call. A missed call during a heat wave is a paid lead handed to the next company. Overflow routing, an answering service or a missed-call text back recovers some of them.
- Raise the booking rate. Listen to a week of recorded calls. Lost bookings often trace back to CSRs who quote a price before offering a time, or who cannot see the board.
- Pace spend to capacity. Lower budgets on days you are booked out, and raise them when techs have open slots.
- Cut junk searches. Car AC, refrigerator repair and HVAC jobs all cost you clicks. A maintained negative keyword list stops paying for them.
- Send each campaign to its own page. Repair traffic should land on a page with a phone number and same-day availability. Replacement traffic should land on a page with financing and an estimate request.
- Sell the membership. Plan members come back every season without another ad click, which lowers your blended cost per customer over time.
How VETS Growth Marketing helps
We connect your Google Ads account to the jobs in your field service software, so every campaign shows cost per booked call and cost per sold system, not just cost per lead. The account stays in your name, the work runs as a dated project, and you get the numbers by month and by season. Bring a month of spend and job data to a growth consultation and we will show you which campaign is really paying.
Sources
- About conversion measurement, Google Ads Help
- Set up tracking calls to a phone number on a website, Google Ads Help