HVAC marketing ROI tracking is the practice of tying each booked job back to the channel that produced the call, then judging that channel in revenue rather than in leads. Three records make it possible: a booking source captured at dispatch, a baseline taken before anything changes, and a window long enough for a quoted replacement to close.
None of the three needs new software. A dispatch board, a spreadsheet and twelve months of history are enough to rank your channels honestly. What follows is where each record comes from, what it can prove, and the two comparisons that will lie to you.
Why a lead count cannot tell you which marketing worked
A lead count cannot rank your channels, because leads convert at different rates and are worth different amounts. ServiceTitan's June 2022 platform data, drawn from more than 3,000 US and Canadian trade businesses, put HVAC call booking at 38% of inbound calls, and shops with fewer than five technicians at 24%. Two channels delivering fifty calls each can produce very different schedules.
The revenue side moves further than the booking side. A channel that brings no-cool diagnostics is not comparable to one that brings heat pump replacement quotes, and averaging them into a single cost per lead hides the distinction. Count booked jobs, split by repair and replacement, with revenue next to each.
The one field that does most of the work
A single booking-source field, filled by whoever answers the phone while the customer is still on it, does more for attribution than any analytics install. Give it a short fixed list rather than a text box, make it required before the job can be scheduled, and review the entries weekly so the list matches what customers actually say.
- Keep the list under ten options, and write them the way a customer speaks: Google, Google ad, the map, a neighbour, a past job, the van, Facebook, the mailer, called us before.
- Ask it as a question about how they found you, not which marketing they saw. People answer the first one and guess at the second.
- Require it at booking, not at close-out. By the time the truck is back, nobody remembers.
- Read the free-text entries every week for a month and fold the repeats into the list. A list nobody can fit an answer into gets filled with whatever is first.
What a tracking number proves, and what it does not
A tracking number proves which advertised number rang, and nothing beyond that. Give each channel its own number forwarding to the same line, and the call log shows that a call came from the Local Services ad rather than the van, without asking the customer anything. It cannot see the homeowner who called the number on a neighbour's invoice.
Leave the number your customers already have alone. It is on your invoices, your trucks, your Business Profile and every directory that copied it, and changing it in one place and not the others means months of chasing the mismatch. Put tracking numbers where a swap costs nothing: the ad, the landing page, the mailer.
Local Services Ads keep their own count, and it is a count of leads. Google's Local Services help says leads arrive as phone calls and messages sent through the ad, and that you pay only for leads related to your business and the services you offer. As of September 2026, its page on automated lead credits says leads are assessed when the customer first makes contact, that leads found invalid or low quality are not charged, and that charged leads are reassessed over time and may be credited back automatically. The invoice is a record of leads and credits; which of them reached the schedule is still the booking source field's job.
| Record | What it proves | Where it stops |
|---|---|---|
| Booking source, captured by the person answering the call | What the customer says brought them | Self-reported, and people name the last thing they saw |
| A tracking number per channel | Which advertised number rang | Blind to the invoice magnet, the van and word of mouth |
| The Local Services Ads lead log | What Google charged you for, net of credits | Counts leads, not jobs; you match them back yourself |
| Job type and revenue in the field software | What the work was actually worth | Says nothing about origin unless the source field was filled |
| The same month last year | Movement with the season taken out | Needs twelve months of history and a stable service area |
The baseline nobody takes and everybody needs
A baseline is the history you write down before the first change, because every later claim is measured against it. Record twelve months of booked jobs and calls by month, average ticket split by repair and replacement, your booking rate, and your review count and rating on the day the work starts. It takes an hour.
Skip it and month three becomes an argument nobody can win. The jobs went up, and the explanations on offer are the new campaign, the heat wave, the technicians you hired and the competitor who retired. A baseline does not settle that alone, but without one there is nothing to settle it with.
Two things that make a month-to-month comparison lie
Season and lag both break the obvious comparison. On the first, ServiceTitan's data report on call booking rates is direct: "HVAC booking rates varied with the seasons, with higher booking rates in shoulder seasons and lower booking rates in summer." The same calls convert differently in April and July, so judge a month against the same month last year.
Lag is the second, and it punishes the channels worth keeping. A heat pump replacement quoted in March can sign in May, so a report that counts only jobs closed inside the month under-credits whatever produces quotes and over-credits whatever produces same-day repairs. Group leads by the month they arrived rather than the month they closed, and leave the window open a full quarter before you rank anything.
What attribution honestly cannot tell you
Attribution cannot tell you which single thing caused a job, because most customers touch several. The homeowner who found you in the map pack, read three reviews, passed your van twice and finally called the number on a neighbour's invoice is one job and four channels, and any system that hands the credit to one of them is guessing. Treat the numbers as direction.
- Repeat customers and referrals belong in their own line, not spread across the paid channels that did not earn them.
- A channel can produce searches for your business name and receive no credit for any of them, because the customer arrives by a route that looks organic.
- Small numbers are noise. Ten jobs in a month cannot separate two channels, however confident the percentage looks.
What unit is the report in, and whose name is on the data?
What unit is the report in: booked jobs and revenue by channel, with the calls that produced them, never a blended cost per lead. Whose name is on the data: yours. The Business Profile, the ad accounts, the tracking numbers and the customer records stay in the client's name, so the history survives the end of the relationship.
What that looks like when it runs is a set of systems rather than a dashboard. A missed call gets a text back within seconds with a booking link, so the call that rang out still reaches the schedule and the log. Web inquiries are answered against real availability. Every unbooked quote is chased on a schedule rather than from memory, which is also what keeps the lag window honest. Those systems run in production for Charlotte businesses, and the report they produce opens with booked jobs by channel, including the channels that are not working.
Sources
- ServiceTitan - Data Report: Average Call Booking Rates - Published October 25, 2022 on June 2022 platform data from more than 3,000 US and Canadian trade businesses: HVAC 38% of calls booked, shops with fewer than five technicians 24%, and booking rates higher in shoulder seasons and lower in summer.
- Google Local Services Help - Getting started with Local Services Ads - Leads arrive as phone calls and messages sent through the Local Services ad, and advertisers pay only for leads related to the business and the services it offers.
- Google Local Services Help - About Automated Local Services Ads lead credits - As of September 2026: leads are assessed when the potential customer makes initial contact, leads determined invalid or low quality are not charged, and charged leads are reassessed over time and may be issued credits automatically. Lead disputes and automatic credits are United States and Canada only.