Why It ExistsHow It WorksLeak DetectionPricingOperator Blog Get Diagnosed Free
Demand

HVAC Marketing ROI: How to Know If Your Lead Sources Are Actually Profitable

May 20, 2026 11 min read MarginPlug Operator Intelligence

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.

Under 8%
Marketing as % of revenue — top-quartile HVAC operators with full attribution tracking
7–12%
Industry average marketing spend — most operators in this range with partial or no attribution
Above 15%
Danger zone — at this level, marketing overhead becomes a primary margin constraint

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.

Marketing funnel — same $2,000/month, two channels, very different economics
Google Ads — $2,000/mo
Leads generated
50 leads
$40 CPL
Booked calls (72%)
36 booked
$56 CPBC
Closed jobs (78%)
28 closed
$71 CPCJ
Angi / HomeAdvisor — $2,000/mo
Leads generated
80 leads
$25 CPL
Booked calls (28%)
22 booked
$91 CPBC
Closed jobs (55%)
12 closed
$167 CPCJ
Google Ads: 28 closed jobs at $71 each. Angi: 12 closed jobs at $167 each. Same $2,000 budget. Google produces 2.3x more closed jobs at 2.4x lower cost per acquisition. The Angi CPL of $25 vs Google's $40 is what made the spend look smart — until the full funnel was measured.

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
Demand pillar diagnostic

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 minutes

How the Major Channels Actually Perform in Practice

Google Search Ads Best ROI
Avg CPCJ$55–$160
Booking rate62–78%
The highest-intent channel in HVAC — someone searching "AC repair near me" is ready to book. CPCJ varies widely based on market competition, bid strategy, and landing page quality. Most operators underinvest in Google relative to lower-quality channels because CPL looks higher at first glance.
Google Local Services Ads High Quality
Avg CPCJ$40–$100
Booking rate68–82%
Pay-per-lead model with Google's verification badge. Lead quality is generally higher than standard search ads because the customer sees your reviews and license status before calling. Dispute process for bad leads is available but underused — dispute every lead that doesn't answer or is out of service area.
Angi / HomeAdvisor Caution
Avg CPCJ$120–$280
Booking rate22–38%
The same lead is sold to 3–5 contractors simultaneously. The customer is price shopping by default. Speed-to-call is critical — operators who call within 60 seconds of lead delivery book at 2x the rate of those who call after 5 minutes. Even with fast follow-up, this channel has structurally poor economics for most markets. Run it only if you can prove CPCJ under $150.
Referral Program Highest LTV
Avg CPCJ$0–$35
Booking rate88–96%
Referral customers close at the highest rate, have the highest average ticket, renew service agreements at the highest rate, and refer others at 3x the rate of non-referred customers. Most HVAC operators generate referrals passively — no ask, no incentive, no system. A formal referral program with a $50 bill credit for both the referrer and the new customer produces 30–60% more referrals from the same customer base.

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:

1
Assign a unique tracked phone number to every channel
CallRail, CallTrackingMetrics, or even Google's call forwarding can give you a different phone number per channel — Google Ads gets one number, Angi gets another, your truck wraps get a third, your website gets a fourth. Every call routes to the same office line but is tagged by source. This is the single most important step and costs $30–$80/month for the tracking infrastructure.
Implementation: Replace the phone number on each channel's ad creative, listing, or landing page with the tracked number. Update monthly reporting to pull calls by tracked number. This gives you lead count per channel automatically, without asking CSRs to track source verbally — which never works consistently.
2
Record lead source in your service software on every booked call
Every job booked needs a lead source field. Most service platforms (ServiceTitan, Housecall Pro, Jobber) have this built in — the issue is that CSRs either don't ask or don't record it. Make lead source a required field before a job can be saved, not optional. If the customer says "I found you on Google," that's Google Ads or organic — ask which they clicked. If they say "you did my neighbor's AC," that's referral.
CSR script: "Before I get you scheduled, can I ask how you heard about us?" — then select from a dropdown. Takes 10 seconds. Creates the data that makes the entire tracking system meaningful.
3
Pull a weekly channel report — three columns, one row per channel
Channel name, spend this month, leads this month, booked calls this month, closed jobs this month. From those five columns, calculate CPL (spend ÷ leads), CPBC (spend ÷ booked), and CPCJ (spend ÷ closed). That's your weekly marketing dashboard. It takes 20 minutes to build the first time and 10 minutes to update each week. No analytics platform required.
Decision rule: Any channel with CPCJ above 15% of your average ticket gets put on a 60-day probation — either the number improves with optimization or the channel gets cut or reduced. At a $420 average ticket, 15% = $63. Any channel consistently above $63 CPCJ is consuming margin faster than it's producing revenue.
4
Set a 90-day reallocation rule
Every 90 days, look at your channel CPCJ ranking and move 20% of spend from the bottom performer to the top performer. Don't cut channels overnight — HVAC has seasonal dynamics that make short-term data misleading. But a systematic quarterly reallocation toward proven channels and away from underperformers will compound significantly over 12–18 months. Most operators who implement this process reduce total marketing spend by 15–25% while maintaining or increasing lead volume — simply by reallocating from low-ROI to high-ROI channels.
Exception: Don't reallocate away from brand-building channels (truck wraps, community sponsorships) based on CPCJ alone — these produce downstream influence on intent channels that won't show up in the attribution model. Evaluate them separately on qualitative metrics.

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.

Demand pillar diagnostic

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