Most HVAC operators have been running Meta Ads for the past three to five years with mixed results. Some have built six- and seven-figure monthly revenue lines from the channel. Others have spent six figures over the same period and would struggle to tell you what they got for it. The difference is almost never about creative talent or budget size. It is about a handful of operating decisions that compound, and a few measurement assumptions that quietly mislead the entire program.
This is the longest piece we have written on the channel because the channel itself has gotten quietly harder over the last 18 months. iOS attribution decay forced server-side measurement from "nice to have" to table stakes. LSA caps tightened. Creative fatigue cycles compressed from 8-10 weeks to 5-6. The CPL ranges we used to quote in 2023 are 20-30% higher in 2026 across most US metros. The playbook that won in 2022 will lose money today if you run it unchanged.
What follows is the playbook we run for HVAC operators between $2M and $40M in annual revenue. It is not an introduction to Meta Ads, there are plenty of those. It is the working manual we hand new operators on day one of an engagement.
The state of HVAC Meta Ads in 2026
The category has matured. Three years ago, an HVAC shop running Meta Ads with even moderate competence was unusual. Today the median multi-truck operator in any US metro has been on the platform for at least 18 months, has been through at least one agency, and has a measurement layer that is at minimum 30% inaccurate without anyone realizing.
That last point matters because most operators are not really comparing strategies, they are comparing measurement systems. Two agencies running identical campaigns will report wildly different results depending on which conversions they fire, where they fire them, and how they reconcile them against the operator's actual job database. The first job in every new engagement we take on is to find out which version of the truth we are looking at.
$90-$280
Cost per lead, US 2026
30-45%
Lead-to-job close rate (median)
$4,500-$15K
Average install ticket
55-72%
12-month customer retention
The numbers in the table above are real medians across the accounts we have audited in the last 12 months. The CPL range alone is wide enough that "we're running Meta Ads and CPL is $200" tells you almost nothing about whether the program is healthy.
Why most HVAC Meta accounts plateau
Three patterns explain almost every plateau we have seen:
- Measurement was wrong from month one. The Pixel was firing on form starts instead of booked jobs. CAPI was never installed or pointed at a stale endpoint. The agency reported conversions the operations system never saw. By the time anyone noticed, optimization had been running against fake data for 9-18 months.
- Campaign sprawl absorbed the budget. Most accounts we inherit have 25-50 active campaigns. Three to five are doing the work. The rest are burning $200-$800 per day each on audiences and offers nobody can defend.
- Creative fatigue went unaddressed. Top-spending ads are 12-18 months old, running against a saturated audience at frequency 8+, with CPMs creeping up while CTR slides down. The creative team is "in the queue" to refresh them. The queue is permanent.
We will go deep on all three. The order matters: measurement first, consolidation second, creative third. Reversing the order produces results that look good and aren't.
How HVAC differs from other home services
HVAC operators sometimes get advice from agencies that have run plumbing or roofing accounts and assume the playbooks port over. They do not, and the differences are not academic.
Demand seasonality is brutal and concentrated
HVAC peaks twice a year, late June through August (cooling) and mid-December through February (heating). In Sun Belt metros like Phoenix and Houston, cooling season can drive 60% of annual revenue in those eight to ten weeks. In northern metros, heating season is the bigger spike. In transition months (March-May, September-November), demand can drop 50-70% from peak.
This forces a specific operating discipline on Meta Ads: the budget plan has to flex with demand, not run linearly across the calendar. The shops that flatten their budget burn money in shoulder months and run out of headroom in peak.
The replacement vs. service split is everything
There are two HVAC products from a marketing perspective: replacement installs ($7,500-$22,000) and service calls ($200-$1,500). They convert through different funnels, attract different buyer profiles, and live on completely different timelines.
Replacement buyers are usually in a forced-purchase moment (their system died in a heatwave) or a planned-purchase moment (they've decided this is the year). Service-call buyers are dealing with something that needs to be fixed now. The same ad creative will not convert both, the same landing page will not, and the same lead-routing logic will absolutely fail one or the other.
We run them as two distinct campaigns from day one. Most agencies don't, which is why we are usually fixing exactly this in month one.
Local context matters more than category context
A landscaping ad in Phoenix and Boston can use the same creative with a city swap and convert. HVAC cannot. The pain points are different, the seasonality is different, the licensing rules are different, the typical install scope is different. We tune creative by region, not by ZIP, but by climate band.
Measurement: server-side CAPI is table stakes
Before we make a single campaign change in a new account, we rebuild measurement. Without exception.
The minimum measurement stack we install in week one:
- Meta CAPI routed through Stape or a server-side GTM, deduplicated against the Pixel
- Google Ads Enhanced Conversions for accounts that also run Google
- ServiceTitan or FieldEdge integration that fires "booked job" as a conversion event when an actual job is scheduled, not when a form is submitted
- Offline-conversion uploads that backfill won jobs with the original Meta click ID
- Looker Studio dashboard that pulls platform data, GA4 data, and CRM data into a single source of truth
The thing that fixes is the gap between "Meta says we got 140 leads this month" and "ServiceTitan shows we booked 87 jobs from those leads." Most accounts we inherit have this gap running at 20-40%. Some are worse.
Why this is the highest-ROI two weeks in the engagement
Once measurement is honest, three things happen:
- The campaigns that looked profitable but were lying get killed.
- The campaigns that looked unprofitable but were under-reporting get scaled.
- Every subsequent decision is grounded in something the operations team agrees is real.
We have not seen an engagement where this hasn't moved cost per booked job by 20-40% in the first 60 days, before any creative or audience changes.
The measurement rebuild was the boring two weeks that paid for every quarter since. We can finally make the next call without flying blind.
Audience strategy: who actually books a service call
The default Meta Ads playbook for HVAC is broad targeting in a geo-radius. It works because Meta's algorithm has gotten good enough at finding the right buyer inside a wide audience. But "good enough" is not "optimal," and there is real efficiency on the table in three audience patterns.
Tier 1: Replacement-intent retargeting
Anyone who visited a replacement page on your site or interacted with a replacement ad in the last 60 days. This is your highest-converting audience by a wide margin. The trick is keeping it fresh, the typical brand pool refreshes too slowly to stay below frequency 3-4.
Tier 2: Home-equity proxy audiences
Meta's "homeowner" interest is too broad to be useful, but you can build a Custom Audience based on home value (>$400K typically) and time-since-purchase (3-15 years, the band where systems start to fail). This audience converts 1.5-2x the broad pool.
Tier 3: Life-event triggers
"Recently moved" and "new mortgage" both correlate with HVAC purchases at higher rates than the broad pool. We never bank a program on them, but they make a useful 10-15% slice of the budget.
What not to do
Lookalike audiences off your customer list. They sound smart and consistently underperform in HVAC compared to broad + interest layering. The reason is that your customer list is biased toward whatever channel drove them, modeling on it amplifies the same bias. We have stopped using LALs for HVAC entirely.
Creative angles that book service calls
We covered specific creative patterns in the HVAC Meta Ads creative guide, but the meta-pattern is worth surfacing here: HVAC creative converts when it ladders to a problem the viewer is actively having, not a feature the brand is proud of.
The brands stuck on creative that talks about their truck fleet or their five-star rating are losing share to the brands shipping creative that talks about an AC blowing warm air in July or a furnace clicking but not igniting on the coldest week of January. The first set of creative is brand-led. The second is problem-led. The math favors problem-led by a wide margin.
The five creative angles we run by default
- Seasonal-pain hooks, "Your AC is working harder than it should this week" timed to heatwave days
- Cost-of-delay, "Why a $400 tune-up is the cheapest move you'll make this month"
- Service-area trust, local truck, local family, local license number, counter to private-equity-backed national consolidators
- Maintenance-plan economics, "$22/month covers 80% of what kills a system"
- Replacement decision, "How to tell whether to repair or replace a 14-year-old system"
Each of these is a creative pattern, not a single ad. We typically ship 2-3 variants per pattern per month.
The seasonal demand model
The single biggest mistake we see in HVAC Meta accounts is running a flat monthly budget. Demand is not flat, and your competitors' bids are not flat, running a flat budget means under-spending in peak and over-spending in shoulders.
The model we run is roughly:
- Peak months (Jun-Aug or Dec-Feb depending on climate band): 130-150% of average budget
- Shoulder months: 60-80% of average budget
- True off-season: 40-60%, focused on maintenance plan acquisition and brand awareness
We pre-commit the operator to this curve before the season starts. Without that commitment, what happens in practice is the budget stays flat in June because the bookkeeper hasn't approved the increase, then peak passes, then we are scaling spend into July as competitor bid intensity declines.
LSA + Meta + Google Search: the bid stack
Meta Ads alone is rarely the right answer for HVAC. Google Local Services Ads catches the highest-intent inbound (someone Googled "HVAC repair near me" and is ready to book). Google Search captures the planning shoppers. Meta does the demand-creation and re-engagement work. Each channel has a job; running one without the others is leaving margin on the table.
The bid stack we run for a $20K/month media program in a single metro is approximately:
- LSA: $4-6K, capped by Google verification + service area, but cheapest CPL
- Google Search: $7-9K, branded + non-branded, with separate ad groups by service type
- Meta: $7-9K, replacement + service split campaigns, retargeting, brand defense
Below $10K total monthly spend, we usually recommend starting with LSA + Google Search only. The Meta layer earns its budget when the operator is already getting high-intent volume from the other two and needs to expand the funnel.
Maintenance plan as the LTV lever
If there is one operating insight that distinguishes the HVAC operators who scale from the ones who plateau, it is this: the maintenance plan is not a footnote, it is the entire business model.
A maintenance plan member at $22-$35/month is worth roughly 4-6× a one-off replacement customer over 24 months, they renew, they generate predictable service revenue, they upsell into replacements when their system ages out, and they refer family.
But most Meta Ads programs we audit treat the maintenance plan as a secondary offer. The replacement is what gets pitched in creative; the maintenance plan is what the front desk mentions if there's time. That ordering is backward.
How we structure the maintenance-plan campaign
- A standalone campaign budget of 25-35% of total Meta spend
- Creative that leads with the math (annual cost vs. average covered repair) rather than the feature list
- A landing page that explains the plan in 60 seconds, with a same-week signup option
- Lead-routing that gives maintenance-plan inquiries to a dedicated phone queue separate from emergency calls
Operators we have shipped this with see maintenance-plan member growth of 30-50% in the first 6 months without expanding total spend. That growth compounds.
Common mistakes that compress ROAS
Five mistakes we see in nearly every HVAC Meta audit:
- The booking form is on a generic landing page. One page handles every service type. Mobile load time over 4 seconds. Forms that require 8+ fields including service type, address, and preferred date/time. Each of these alone shaves 10-20% off conversion rate.
- The retargeting pool never refreshes. 90-day lookback window with the same audience for the entire year means frequency climbs while engagement collapses. We rotate retargeting pools monthly.
- CTR is treated as a quality signal. It isn't, by itself. Some of the highest-ROAS ads we run have moderate CTR but exceptional conversion-to-booked-job rate. CTR is a clickbait signal. The metric that matters is cost per booked job.
- The ad copy mentions financing without context. "0% APR available!" drives clicks from price shoppers who never qualify. We mention financing only when the offer requires it, and we qualify financing at the form.
- Brand search is unprotected. Competitors bid on the operator's brand name and steal high-intent traffic for $0.50-$2/click. Defending brand on Google + Meta search is the cheapest insurance in the program.
The first 90 days: a phased approach
For new HVAC engagements, the 90-day plan is roughly:
Anyone promising material lift inside 30 days is either lying or running the campaign at the cost of measurement integrity. We have seen agencies do both, the second is more common and harder to detect.
What to measure (and what to ignore)
The dashboard we hand HVAC clients tracks five numbers, in priority order:
- Cost per booked job (not cost per lead), pulled from CRM, not from Meta
- Booked-job to closed-job ratio, measures intake quality, not media quality
- Maintenance plan attach rate, measures the LTV side of the equation
- Cohort revenue at 90 days, measures whether the lead source converts at scale
- Spend efficiency by climate band + season, measures bid-stack health
Things we explicitly do not track on the main dashboard:
- Click-through rate
- Cost per click
- Ad relevance score
- Frequency
- Reach
Those are diagnostic metrics. They tell you why something is happening when something is wrong. They are not metrics worth optimizing.
Where to go from here
We have linked the three cluster pieces below for the operating details on creative patterns, geo-radius targeting, and the lead-form-vs-landing-page question. If you want to talk about your specific account, send us a 1-page brief with current monthly spend, climate band, and the constraint you are hitting. We respond inside 48 hours with a written audit, no expectation that you hire us to implement it.
In this series:
- HVAC Meta Ads creative: 12 patterns that book service calls
- Geo-radius targeting for HVAC: how to set service area boundaries
- HVAC lead form vs landing page: which converts better
Related services: