How to Calculate Marketing ROI for an HVAC Business
Most HVAC owners track cost per lead. The number that actually tells you which channels make money is cost per booked job and revenue per booked job by channel. Here is the full calculation with a worked example.
Key takeaways
- Cost per lead is the wrong headline metric. Cost per booked job and ROAS by channel are the numbers that tell you where to put the next dollar.
- Google LSA typically runs 5x to 7x ROAS for HVAC when booked-job economics are calculated correctly, not just cost per lead.
- Referral channel ROI looks infinite until you account for the real costs: customer gifts, follow-up labor, and referral program overhead.
- Seasonal demand changes your ROI by month. A channel with 4x ROAS in July can run negative in November.
Contents
- 01Why cost per lead is the wrong metric
- 02The 5-number calculation
- 03Worked example: Google LSA vs. referral
- 04How seasonal demand changes your ROI by month
- 05Which channels consistently outperform in HVAC
- 06What to do when a channel has high cost and low ROI
- 07How Clint Calculates Marketing ROI by Channel
- 08Sources
- 09Frequently Asked Questions
Most HVAC owners can tell you their cost per lead within five seconds. Almost none of them can tell you which channel produced the highest revenue per booked job last quarter.
That is not a data problem. The data is sitting in the CRM and the ad platform. It is a metric problem. Cost per lead is what agencies report because it is the easiest number to pull. Revenue per booked job by channel is the number that tells you where to put the next dollar, which is why calculating it correctly is worth the extra work.
This post walks through the full five-number calculation, a worked example, and what to do when a channel is underperforming.
Why cost per lead is the wrong metric
Cost per lead is a reach metric, not a revenue metric. It tells you how much you paid to get someone into a conversation. It does not tell you whether that conversation became money.
Two channels can produce identical cost per lead and wildly different business outcomes. A contractor running Google LSA and Facebook Ads simultaneously might see $55 cost per lead from both channels. What the CPL report will not show: LSA leads book at 62 percent, Facebook leads book at 24 percent. At that difference, the cost per booked job on LSA is roughly $89. The cost per booked job on Facebook is roughly $229. Same CPL, 2.6x difference in what it actually costs to generate revenue.
The second problem with cost per lead: it does not account for ticket size by channel. HVAC customers who find you through a referral call about higher-value jobs on average than customers who click a Google Display ad. A channel that generates fewer leads at higher tickets can outperform a channel that floods your inbox with cheap leads who want a $79 tune-up. See how to calculate cost per lead for the corrected version of that headline number.
The number you need is: how much did I spend, how many jobs did I book, and what did each job pay.
The 5-number calculation
For each marketing channel, pull these five numbers every month:
1. Total spend per channel. This is the hard dollar cost paid to the platform or lead source. For Google Ads, it is the monthly platform spend. For LSA, it is the per-lead charges billed by Google. For referral programs, it is the value of gifts, discounts, or cash paid to referring customers plus any labor allocated to managing the program.
2. Leads generated from that channel. A lead is a unique inbound contact that has not previously been a customer. Define this once and apply it consistently. If a customer calls for a second time, that is a repeat customer, not a lead. Count each contact once regardless of how many touch points they had before calling.
3. Booked jobs from those leads. This requires lead source tagging in the CRM at the time of booking. Every job should have a lead source field. If your CRM does not have that field today, add it and start tagging from this month forward. You will lose history, but you will have clean data in 60 days. The full setup is in how to track lead source in a service CRM.
4. Average revenue per booked job from that channel. Pull average invoice amount for jobs with a given lead source. Do not use average ticket across all jobs. Channel mix matters: LSA-sourced jobs trend toward service and repair, referral-sourced jobs trend toward replacement.
5. ROI = (revenue - spend) / spend. Or expressed as ROAS (return on ad spend): revenue / spend. ROAS is easier to compare across channels.
Text Clint: "what was my ROI from Google LSA last quarter vs. this quarter, broken down by revenue per booked job"
Worked example: Google LSA vs. referral
Here is a real calculation with round numbers to show the math.
Google LSA:
- Monthly spend: $2,000
- Leads generated: 40
- Booked jobs: 28 (70% booking rate)
- Average revenue per booked job: $420
- Total revenue from channel: 28 x $420 = $11,760
- ROAS: $11,760 / $2,000 = 5.9x
- Cost per booked job: $2,000 / 28 = $71
Referral channel:
- Platform spend: $0 (no paid placement)
- Leads generated: 15
- Booked jobs: 12 (80% booking rate, referrals convert higher)
- Average revenue per booked job: $520 (replacement skews up)
- Total revenue from channel: 12 x $520 = $6,240
- Platform ROAS: infinite (zero denominator)
The referral number looks like a free win. It is not. Every referral program has real costs: customer appreciation gifts at $25 to $75 per referring customer, the CSR time to follow up on referrals, and occasionally a referral discount on the original customer's next service. A properly accounted referral program typically costs $15 to $40 per referred lead generated, which puts cost per booked job at $20 to $50 depending on close rate.
Even at $50 cost per booked job, referral outperforms LSA in this example. But the comparison only becomes visible when you run the actual numbers instead of treating $0 platform spend as $0 total cost. To build the referral side cleanly, see how to build a referral program for home services.
How seasonal demand changes your ROI by month
HVAC is one of the most seasonal businesses in the trades. Summer drives emergency AC repair. Fall drives furnace tune-ups and replacement. Spring drives system checks. Winter is slow almost everywhere except the Sun Belt.
Channel ROI fluctuates with season, not just performance. A Google Ads campaign running a 6x ROAS in August can run a 2x ROAS in November because the demand pool shrinks, bid competition stays elevated from national advertisers, and close rate drops because fewer leads are in urgent need.
Track ROI by channel by month, not by quarter. Two ways this changes decisions:
First, it tells you where to shift budget as seasons change. Referral and repeat-customer outreach hold stronger ROAS through shoulder months than paid channels because they are not fighting for search demand that does not exist. Moving dollars from paid search to email and text sequences in October and November is often the right call for shops in cold climates.
Second, it tells you what your channel looks like when it is underperforming vs. broken. A channel dropping from 5x ROAS in July to 2.5x ROAS in October may just be seasonality. The same drop from July to August is a problem worth investigating immediately.
Text Clint: "show me my cost per booked job by channel for each of the last 12 months"
Which channels consistently outperform in HVAC
Based on reported benchmarks and the math above, three channels produce the most consistent ROAS for HVAC shops at the $1M to $10M scale:
Google LSA. At $45 to $90 cost per lead and a 55 to 70 percent booking rate, cost per booked job runs $65 to $165. With average HVAC tickets ranging from $280 to $700, LSA typically produces 2x to 8x ROAS depending on ticket mix. Review count and response rate are the primary levers to improve CPL on LSA, not ad copy. See Google LSA ROI for home services for the deeper benchmark set.
Referral programs. When properly tracked including program overhead, referral produces the lowest cost per booked job of any channel in most shops. The constraint is volume: referral programs rarely scale past 10 to 20 percent of total lead volume without structured incentives and active management.
Repeat customer outreach. Existing customers who have not called in 12 to 18 months are often the most cost-efficient leads in the CRM. A targeted outreach sequence to lapsed customers costs $3 to $15 per converted job (text and email sends plus any discount) and converts at 15 to 35 percent depending on recency.
Text Clint: "list customers who had service 18 to 30 months ago and have not booked since, sorted by total revenue"
What to do when a channel has high cost and low ROI
If a channel is running high cost per booked job relative to ticket size, four levers exist before turning it off entirely:
Improve booking rate. High CPL is often a booking-rate problem, not a lead quality problem. If 35 percent of leads are booking and the industry average is 55 to 65 percent, the fix is in the phone room, not the ad account. Record calls, score CSR conversations, and address the gap before cutting the budget.
Tighten the audience. Facebook and Google Display frequently generate cheap clicks from people outside the service area or with no real intent. Tighten geography, dayparting, and audience exclusions. CPL will go up, but booked-job rate usually improves enough to offset it.
Fix average ticket. If the channel is generating the right leads at the right booking rate but the average ticket is low, the issue is in the service call upsell, not the marketing. A $95 tune-up call is a loss leader if the tech has no path to a filter replacement or equipment service agreement conversation.
Cut the channel. If booking rate is at or above benchmark, ticket size is at or above average, and the channel is still running 1x to 1.5x ROAS, the channel is not a fit for this market or trade at current pricing. Redirect that spend to the highest-performing channel until the budget is more efficient.
Text Clint: "rank my lead sources by cost per booked job this year, flag any running over $200"
How Clint Calculates Marketing ROI by Channel
Clint connects to the CRM (Jobber, Housecall Pro, ServiceTitan, Workiz) and reads job records including lead source tags, invoice totals, and booking dates. When asked about marketing ROI, it joins job records to the lead source field to calculate revenue per booked job by channel.
It can answer: "What was my LSA revenue per booked job last quarter compared to this quarter?" Or: "Which lead source had the highest average ticket last month?" Or: "Show me every job booked from referrals in the last 90 days and the total revenue."
It does not pull data from ad platforms directly. The CRM is the source of truth. The lead source tag is the join key. If lead source fields are blank on a high percentage of jobs, Clint will surface that and flag the jobs that need tagging.
Text Clint your marketing ROI question and get the answer in seconds instead of building a spreadsheet.
Sources
Frequently Asked Questions
4 questions home service owners actually ask about this.
01What is a good ROAS for HVAC Google LSA?
Reported benchmarks from Front Range Momentum and Webology put healthy HVAC LSA ROAS at 4x to 8x when calculated on booked jobs and actual revenue, not leads. Markets with higher average tickets or lower competition run higher. Highly saturated urban markets may run 2x to 4x.
02How do I add lead source tracking to my CRM?
In Jobber, add a custom field to the job or client record labeled "Lead Source." In Housecall Pro, use the built-in "Source" field on the job. In ServiceTitan, lead source is a first-class field on the customer record. The discipline is in the booking process: CSRs should ask "how did you hear about us?" on every new call and tag the job before hanging up.
03Does referral ROI include the cost of the referral program?
It should. Platform spend of zero does not mean cost of zero. Add up gifts, referral discounts, program management time (at your billing rate or CSR hourly rate), and any software cost for tracking. Divide by booked jobs sourced from referral. That is your real cost per booked job.
04How often should I calculate marketing ROI by channel?
Monthly is the minimum for paid channels. Quarterly is acceptable for referral and repeat-customer programs if volume is low. Monthly lets you catch seasonal shifts and budget misallocations before they compound. Quarterly catch-ups are too slow for a channel that can spend $5,000 in a month.
See Clint in action
Clint is the pre-built AI for home service shops. Connect your CRM, email, and phone system in minutes and the agents run on your real data.