Google Ads for HVAC contractors
By Ahmed Imran · Updated August 2026 · 8 min read
HVAC is the trade where the calendar decides your cost per lead. Non branded search averages $149 a lead across 2026, but that blended figure is close to meaningless in the weeks that matter, because the heat wave that breaks your customer's air conditioning breaks everybody else's on the same afternoon.
What HVAC leads cost in 2026
Here is where the published benchmarks land this year. Read the branded row carefully, because it is the one most contractors never separate out and it quietly flatters every average they look at.
| Channel | Cost per lead | What it tells you |
|---|---|---|
| Non branded search | $149 | People describing a problem, not looking for you |
| Branded search | $34 | People who already know your name |
| Local Services Ads | $53 average, $25 to $90 | Billed per lead, before you qualify it |
| Blended across campaign types | $104 | The number that hides the other three |
If you report one blended cost per lead, brand traffic will make your numbers look better every time somebody sees your van and searches your name. That is not acquisition. Split branded from non branded before you judge anything, because non branded is the only line telling you whether the account is finding new customers.
Seasonality is the whole problem
HVAC cost per lead swings harder with the calendar than any other trade I work in. The first genuinely hot week of summer and the first hard freeze both do the same thing: demand spikes, every competitor raises bids into the same auction on the same day, and cost per click climbs at the exact moment volume arrives.
So an annual average of $149 understates what you actually pay in the weeks that produce most of your revenue, and overstates what you pay in April. Budgeting evenly across twelve months is the most common mistake I see, and it means you run out of daily budget on the three days a year when the phone would have rung hardest.
Pace budget to demand, not to the calendar month. A shoulder season week and a heat wave week should not have the same daily cap.
What to do about it
- ›Separate emergency intent from replacement intent. Somebody searching for AC not blowing cold air needs you today. Somebody searching for heat pump cost is eight weeks out. They should not sit in the same campaign, share a budget, or land on the same page.
- ›Raise caps ahead of the weather, not after it. If your budget only lifts once the leads spike, you have already lost the first two days of the wave.
- ›Watch impression share lost to budget by day, not by month. That single column tells you exactly which days you were absent from the auction.
- ›Keep maintenance plan searches out of the emergency campaign. They convert differently, they are worth a different amount, and mixing them poisons the bidding signal for both.
- ›Report against last year's same week, not last month. Month over month comparisons in a seasonal trade tell you about the weather rather than about the account.
The problem underneath the seasonality
Everything above assumes your numbers mean something. Usually they do not yet. The single most common thing I find in a home services account is that a tap on the phone number counts as the same conversion as a completed booking form, so Smart Bidding optimises toward the tap, because the tap is cheaper to produce.
On a foundation repair account I rebuilt this year, fixing exactly that, and nothing more glamorous, moved quoted work from $93,078 to $312,390 in six weeks while I cut 61 percent of the impressions the account was buying. Same market, same season, same budget within 11 percent. The account got smaller and made more money.
Where Local Services Ads fits
Run it, and report it separately. Local Services Ads bills per lead on a completely different model, so folding it into your search reporting flatters your cost per lead in good weeks and punishes it in bad ones. Its $53 average also swings from $25 to over $90 depending on trade, market and how well the profile is maintained, so somebody else's LSA number tells you very little about yours.
What to check this week
Open your conversion actions and look at what is set to primary. If a phone tap with no minimum duration is sitting there next to a booked appointment, that is your first fix and it costs nothing. Then pull impression share lost to budget for the last hot week you had. If it is above about 20 percent, you were not outbid. You were absent.
Non branded search averages around $149 in 2026 and Local Services Ads around $53, but both swing hard by season and market. The more useful question is what a lead is worth to you. If your average job is $8,000 and you close one in five, a $149 lead is cheap. Judge it against your own close rate and ticket, not against a national average.
Both, reported separately. Local Services Ads usually comes in cheaper per lead but gives you far less control and variable quality. Search lets you choose the exact phrases you appear for and optimise toward booked work. Mixing the two in one report makes both numbers meaningless.
Pace to demand rather than evenly across the year. Raise daily caps ahead of forecast heat and cold rather than after the leads spike, and watch impression share lost to budget by day. Running the same daily cap in April and August guarantees you are absent on your best days.
Because everybody's is. A heat wave breaks equipment across the whole market at once, every competitor bids into the same auction on the same afternoon, and click prices rise with demand. That is normal and not a sign your account is broken. What matters is whether the leads still pay for themselves at that higher price.
Want this run on your account?
Book a call. I look at your account live and tell you what I would change first.