"$9,990 for one million impressions."
That was the proudest line on a dashboard an HVAC owner forwarded us in February. His agency sent it monthly. A million impressions. He'd been paying for it for over a year. When I asked him how many furnace installs that million impressions had produced, he forwarded the question to the agency. They never answered with a number. They answered with another dashboard.
We audited 14 HVAC marketing setups in Q1 2026. Eleven of them had the same hole: nobody — not the owner, not the agency — could tell us the cost to win one closed job. They could tell us reach. They could tell us click-through rate. They could not tell us the one number that decides whether the marketing is a profit center or a slow leak.
That's not a small gap. That's the whole game, missing.
The One Number HVAC Marketing Is Supposed to Produce
Cost-per-closed-job. Total spend, divided by the number of paying jobs it produced. Spend $4,000, close 16 jobs, your cost-per-job is $250. Now you can actually decide things — whether to scale, whether to cut, whether the agency is earning its retainer.
Everything else an agency loves to report sits upstream of this number and tells you almost nothing on its own:
- Impressions measure how many screens your ad touched. You can't deposit a screen-touch.
- Clicks measure curiosity. Curiosity doesn't replace a compressor.
- Cost-per-lead is closer, but a $12 lead that never books is more expensive than a $60 lead that closes a $9,000 install.
Cost-per-closed-job is the only one that survives contact with your bank account. And 11 of 14 setups we looked at couldn't produce it.
When an agency reports the metrics that always look good and never the one that can look bad, that's not an oversight. That's a choice.
Why So Many Agencies Can't Say the Number
It's not always malice. Reporting cost-per-job means connecting ad spend to your actual closed jobs — which lives in your CRM, your booking software, or a notebook by the dispatcher's phone. That connection takes setup work most agencies skip. So they report what's easy to pull from the ad platform: impressions, reach, "engagement."
But here's the uncomfortable part. The agencies that can report cost-per-job almost always do, because it makes them look good when it's working. The ones who only ever show you reach are usually hiding a bottom-of-funnel number they don't want you to see. If the cost-per-job were great, they'd lead with it.
This is why HVAC churns agencies on a loop. Roughly 49% of businesses drop their PPC agency and 46% drop their social agency — and the reason underneath most of those breakups is the same: the phone wasn't ringing with paying work, and nobody could prove where the money went. The owner doesn't have the words for it, so it comes out as "they just weren't getting results." What he means is: no one ever showed me cost-per-job.
What the 11 Setups Had in Common
Across the 11 that couldn't name the number, the same broken pieces showed up:
| Broken piece | What we found | What it costs you | |---|---|---| | No CRM-to-ad connection | Spend lived in the ad platform, jobs lived in the CRM, nothing tied them | You can never prove ROI, so you can never scale with confidence | | Vanity-metric reporting | Monthly deck led with impressions and reach | The dashboard always looks fine while revenue stays flat | | No service-type breakdown | Tune-ups and installs counted as one blended "lead" | A flood of cheap tune-up leads hides zero install pipeline | | Slow speed-to-lead | Leads called back hours later, sometimes next day | The job is already booked with whoever answered first | | No show-up tracking | Booked counted as won | Half the "booked" jobs were no-shows nobody chased |
None of these are exotic. Every one is fixable in a week. But you can't fix what you refuse to measure, and a dashboard built on impressions is built specifically so the broken pieces stay invisible.
The three setups that could name their cost-per-job, by the way, were the three growing. That wasn't a coincidence. They measured the thing that mattered, so they could improve it.
What Tracking It Properly Looks Like
This is the same chain we build for every client, HVAC or not: spend → leads → booked → closed → revenue, connected end to end, broken out by service type. It's how a med spa in Nice turned €316 in ad spend into 77 leads and 36 booked appointments in 15 days — and could prove every step, because every step was tracked. Different industry, same discipline.
For HVAC specifically, that means:
- Conversion tracking wired from the ad to the closed job, not just the form fill.
- Cost-per-job split by maintenance, repair, and install, because a $250 cost-per-job is a disaster for a tune-up and a steal for a system swap.
- Speed-to-lead under five minutes, because in home services the first responder wins the job most of the time.
- Show-up confirmation, so "booked" actually means "happening."
If your HVAC agency has never said the words "cost-per-closed-job" to your face, that's the audit you need. Book a free audit and we'll tell you your number — even if you don't like the answer, and even if you never work with us.
What This Isn't
This isn't a claim that impressions are worthless. Awareness has a place, and in some markets it matters. But awareness is a footnote, not a headline — and an agency that leads every report with reach is managing your perception, not your pipeline.
It's also not a claim that every agency is dishonest. Most just never built the tracking, so they report what they can see. That's a competence gap, not a conspiracy. But the result on your P&L is identical: money out, no proof of money back.
You hired marketing to make the phone ring with paying jobs. The number that proves it did is cost-per-closed-job. If nobody can say it, nobody's actually managing your money.
30-Second Audit: Can Anyone Name Your Cost-Per-Job?
Three honest yes/no questions:
- If I called your agency right now, could they tell me your cost to acquire one closed install — in dollars, today?
- Does your monthly report show closed jobs and revenue, or does it lead with impressions and reach?
- Is your cost-per-job broken out by service type, so cheap tune-up leads aren't hiding an empty install pipeline?
If any answer was no, book a free audit — we'll pull your numbers and tell you exactly what your marketing is costing per job, even if you never work with us.
A million impressions can't fix a furnace. A tracked cost-per-job can build a company. Eleven of fourteen didn't have it. Make sure you do.