How to read your HVAC marketing ROI without a data person
If you run an HVAC or plumbing business, you already know the uncomfortable question: of all the money you spend on Google, Meta, and the local directories, which of it actually comes back as booked jobs? Most owners can’t answer it, not because they’re careless, but because the numbers live in three different places and none of them were built to talk to each other.
Here’s how to think about marketing ROI honestly, without hiring an analyst.
Why marketing ROI is hard for trades shops
The math looks simple, revenue divided by ad spend, but the trap is in the word “attributed.” To divide revenue by spend per channel, you have to know which jobs came from which channel. And that link is weak in most field-service setups:
- Lead source is self-reported. The “how did you hear about us?” field is filled in by a customer who genuinely doesn’t remember, or by an office manager guessing.
- Campaign tags are sparse. The clean way to attribute, tagging each job with the campaign that produced it, is rarely done consistently in Jobber or Housecall Pro.
- Ad-platform IDs don’t match your job IDs. Google’s campaign IDs and your FSM’s campaign records are different systems. They only line up at the channel level (Google vs. Meta vs. TikTok), not job-by-job.
So any single ROI number is built on shaky attribution. The fix isn’t a fancier model, it’s honesty about what you can and can’t know.
Read two views, not one
The most useful thing you can do is look at marketing ROI two ways and pay attention to the gap:
- The attributed view: revenue from jobs you can tie to a specific campaign, divided by that channel’s spend. This is precise but understates ROI, because untagged jobs are excluded.
- The spend view: revenue attributed through the broader, coarser lead-source field, divided by spend. This is more generous and can over-attribute.
Neither is “the” answer. The distance between them tells you something more valuable: how well your jobs are actually being tagged. A huge gap means your attribution is mostly guesswork, which is itself worth fixing before you make any budget decisions.
The one number worth watching: cost per booked job
If you only track one marketing metric, make it cost per booked job: total ad spend divided by jobs booked in the period. It blends paid and organic demand, so don’t read the absolute number too literally. But the trend is gold: when cost per booked job climbs while your close rate holds steady, your advertising is getting less efficient, and it’s worth a look before you spend more.
The trap: don’t reallocate budget on ROI alone
Here’s the part most “AI marketing dashboards” get dangerously wrong. Say Channel A shows a higher ROI than Channel B today. The tempting conclusion, “move money from B to A”, does not follow. High ROI at current spend tells you nothing about ROI at double that spend. Diminishing returns and attribution noise mean the channel that looks best at $1,000/month can be your worst at $3,000/month.
Marketing ROI is a diagnostic signal, a prompt to look closer, not a prescription to reallocate budget. The right move when a channel’s cost per job spikes is to review the campaigns, not to blindly cut or pour more in.
A simpler way to keep an eye on it
This is exactly what Guidepost was built to handle for trades shops. It reads the numbers already in your Jobber or Housecall Pro and QuickBooks accounts, shows both ROI views with their caveats, watches cost per booked job as a trend, and writes you in plain English when something shifts, every figure traced to its source. It won’t pretend last-click attribution is precise, and it won’t tell you to move budget on a noisy month; that call stays yours.
If that sounds useful, see it on your own numbers: a 20-minute walkthrough on your real data. There’s more on how it works for an HVAC shop.
See it watch your numbers
Guidepost reads your Jobber, Housecall Pro, and QuickBooks numbers and tells you what needs attention, in plain English. Want to see the output first? Look at a sample digest.