HVAC Marketing ROI: How to Know If Your Lead Sources Are Actually Profitable
The average HVAC company spends 7–12% of revenue on marketing. At $1.5M in revenue, that's $105,000–$180,000 per year spread across Google Ads, Angi, Yelp, door hangers, truck wraps, local radio, and whatever the last salesperson convinced the owner to try. Ask most of those owners which channels are profitable and they'll say something like: "Google Ads is working, I think. Angi is hit or miss. The rest we kind of just do."
That's not a marketing strategy — it's a diversified guess. And the cost of guessing wrong at $150,000 in annual spend is enormous. The single most common marketing problem in HVAC isn't that operators spend too little. It's that they can't tell which dollars are working, so they can never cut what isn't and double what is.
The Attribution Problem
Marketing attribution in HVAC is hard for one specific reason: the customer journey rarely starts and ends in one channel. A homeowner sees a truck wrap in their neighborhood, searches "AC repair near me" three weeks later, clicks a Google Ad, calls the number in the ad, books an appointment through your CSR, and pays at the end of the call. Which channel gets credit? The truck wrap influenced the search. The Google Ad captured the intent. The CSR closed the call. If you only track the last click, you give Google 100% of the credit and never discover that the truck wrap is doing meaningful work.
Most small HVAC operators don't have the bandwidth to build a multi-touch attribution model. What they can do — and what immediately separates high-ROI marketing from scattered spend — is implement one tracking mechanism per channel and measure three numbers: cost per lead, cost per booked call, and cost per closed job. That's it. No analytics stack required. A spreadsheet and disciplined data entry will get you 80% of the insight you need to make better decisions.
"I spent $2,200 a month on Angi for two years because leads kept coming in. When I actually tracked what those leads turned into — booked calls, then closed jobs — I found out my cost per closed job through Angi was $680. My Google Ads cost per closed job was $190. I was spending almost the same on both. I cut Angi to $400/month, put the rest into Google, and my closed jobs went up." — HVAC owner, 5 trucks, $1.7M revenue
The 3 Numbers That Actually Measure Marketing ROI
Most HVAC operators measure marketing by lead count. Lead count is the wrong metric. A lead that doesn't book is worth zero. A booked call that doesn't close is worth zero minus your tech's time. The three numbers that actually matter — and that you can calculate from data you already have — are:
Cost per lead (CPL): Total channel spend ÷ total leads from that channel in the same period. A lead is any inbound contact that expressed intent to book — phone call, form fill, chat. This is the top-of-funnel number. Low CPL looks good but means nothing if lead quality is low.
Cost per booked call (CPBC): Total channel spend ÷ booked calls attributed to that channel. This is where lead quality becomes visible. A channel with $40 CPL but 30% booking rate has an effective CPBC of $133. A channel with $80 CPL but 75% booking rate has a CPBC of $107. The channel that looks cheaper at the top of the funnel is more expensive where it matters.
Cost per closed job (CPCJ): Total channel spend ÷ closed jobs from booked calls attributed to that channel. This is your real marketing ROI number. At an average ticket of $420 and a 52% gross margin, every closed job produces $218 in gross profit. If your CPCJ is above $218, that channel is margin-negative — you're spending more to acquire the job than the job contributes to gross profit before overhead.
2025 HVAC Marketing Benchmarks by Channel
| Channel | Typical CPL | Avg booking rate | Effective CPCJ | Best for |
|---|---|---|---|---|
| Google Search Ads (branded) | $18–$35 | 75–88% | $28–$55 | Capturing existing brand awareness — high-intent, low waste |
| Google Search Ads (non-branded) | $35–$90 | 62–78% | $55–$160 | Best scalable demand channel — high intent, measurable |
| Google Local Services Ads (LSA) | $25–$60 | 68–82% | $40–$100 | High-quality leads, pay-per-lead model, strong for service |
| Angi / HomeAdvisor | $18–$40 | 22–38% | $120–$280 | Price shoppers — low quality, high volume, hard to convert |
| Yelp Ads | $30–$70 | 40–55% | $90–$200 | Reputation-driven markets — better in some regions than others |
| Facebook / Instagram Ads | $20–$55 | 30–48% | $80–$220 | Brand awareness and agreement promos — weak for emergency demand |
| Door hangers / direct mail | $40–$120 | 65–80% | $80–$200 | Neighborhood saturation — high booking rate when they do call |
| Customer referrals | $0–$25 | 88–96% | $0–$35 | Highest LTV customers — systematically underdeveloped by most operators |
Find out which of your marketing channels is actually profitable — and which is burning margin.
MarginPlug's Demand pillar calculates your cost per closed job by channel, benchmarks it against operators in your market and revenue band, and identifies the specific channel or funnel stage driving above-benchmark acquisition cost.
Run the free diagnostic Free during beta · No credit card · 8 minutesHow the Major Channels Actually Perform in Practice
The 30-Day Tracking System
You don't need new software to start measuring this. Here's the minimum viable tracking system that works in a spreadsheet and produces actionable data within 30 days:
The 3 Most Common Sources of Marketing Waste in HVAC
Paying for leads you can't convert because speed-to-call is too slow. On shared lead platforms (Angi, HomeAdvisor, Thumbtack), the booking rate drops from ~38% to under 15% if the first call back happens after 5 minutes. The lead is being worked by 3–4 other contractors simultaneously. Most HVAC offices don't have the infrastructure to call within 60 seconds consistently — so they pay for leads they structurally can't close. The fix is either a dedicated CSR for immediate lead follow-up, or reducing spend on shared platforms to levels you can actually respond to competitively.
Running the same ad creative for 90+ days without testing. Google Ads performance degrades over time as audiences become saturated and the algorithm optimizes toward the cheapest conversions rather than the best ones. Operators who set up a Google campaign and never revisit ad copy, landing pages, or bid strategy see CPCJ creep from $80 to $180 over 12 months without understanding why. Refreshing ad creative quarterly and reviewing bidding strategy monthly are the two highest-leverage Google Ads maintenance activities for most HVAC operators.
Treating all closed jobs as equal in marketing attribution. A $220 service call and a $6,800 system replacement both count as one closed job in the CPCJ calculation — but they have dramatically different gross profit contribution. If one channel consistently produces replacement jobs and another consistently produces diagnostic calls, the CPCJ numbers need to be weighted by average ticket per channel, not just job count. This is the analysis that reveals whether your Google Ads is producing high-ticket customers or low-ticket maintenance calls — a distinction that changes the economics of the channel entirely.
Find out which of your marketing channels is actually profitable — before you spend another dollar on the wrong one.
MarginPlug's Demand pillar calculates your cost per closed job by channel, benchmarks your marketing spend ratio against operators at your revenue level, and identifies the specific channel or conversion stage that's absorbing spend without producing profitable revenue. Free during beta.
Run the free diagnostic Free during beta · No credit card · Results in minutes