The default geo-targeting in most HVAC Meta accounts is a 25-mile radius around the office address. It is also wrong for most operators, and the cost of being wrong is roughly 15-40% of budget burning on leads the operator either can't dispatch to or shouldn't.
This is a tactical piece. Below is exactly how we configure geo-targeting for new HVAC engagements, including the specific decisions we make at each step.
Why the default radius is wrong
Meta and Google's default geo-targeting tools assume your service area is a circle. It almost never is. Your service area is shaped by three constraints the platforms don't model:
- Your truck dispatch capacity by region. You probably have more trucks in the south side of the metro and fewer in the north. A 25-mile radius treats both equally; your operations doesn't.
- Average lot size and home value by ZIP. A $1.4M home with a 4,000 sqft footprint produces a different install AOV than a $250K home with a 1,200 sqft footprint. Both might be 22 miles from your office. Only one supports your unit economics.
- Drive time, not distance. A ZIP that's 18 miles away by distance might be 45 minutes in traffic. Your tech utilization tanks if you're sending trucks across the metro for $300 service calls.
The ZIP-by-ZIP method
For multi-truck HVAC operators, we map service areas at the ZIP level, not the radius level. The workflow:
- Pull your last 12 months of completed jobs from ServiceTitan or your CRM. Group by ZIP and compute: number of jobs, average job AOV, average drive time from dispatch.
- Score each ZIP on three dimensions: volume (jobs/month), value (avg AOV), efficiency (jobs per hour of drive time). Categorize as A (priority), B (worth serving), C (margin-thin), D (do not serve).
- Configure Meta and Google targeting to include all A and B ZIPs explicitly. Exclude C ZIPs unless capacity supports them. Exclude D ZIPs always.
The first time we run this audit on a new account, we usually find 8-15 ZIPs where the operator has been spending ad budget on leads that produce sub-$2,000 jobs at $180+ CPL. Removing those drops cost per booked job by 15-25% in the first 30 days, before any other change.
Income-band and home-value layering
On top of ZIP targeting, we layer two demographic filters that materially improve conversion to high-AOV jobs:
- Income band: minimum $90K household income for replacement campaigns; minimum $60K for service-call campaigns. (Meta no longer offers granular income targeting directly, but you can build a lookalike from your high-AOV customer list as a proxy.)
- Home value: $400K+ home value for replacement campaigns. The data point comes from Meta's Custom Audiences built off public housing data, not always available, but where it is, it works.
The income filter alone increases install AOV by 20-30% on replacement campaigns.
Radius targeting where it still makes sense
For single-truck operators or new HVAC shops with limited operating history, ZIP-by-ZIP targeting is overkill. Radius targeting works fine if you set the radius right.
The radius we recommend:
- Single-truck shops: 8-12 miles from dispatch, not 25
- 2-4 truck shops: 15-18 miles
- 5-10 truck shops: 20-25 miles + ZIP exclusions for low-value areas
- 10+ trucks: full ZIP-by-ZIP configuration
The default 25-mile radius makes sense only when you have the dispatch capacity to actually serve a 25-mile radius. Most multi-truck operators don't, and the budget burns trying.
Drive-time targeting on Google
Google Local Services Ads and Google Search both let you set a drive-time-based service area in addition to or instead of radius. Drive-time is more accurate but slower to update, Google calibrates against typical traffic patterns, which can lag rush hour or seasonal congestion.
We typically configure Google with both: a generous radius (to catch edge-case high-value queries) and ZIP exclusions for the geos we don't want.
Seasonal geo-shifts
Demand is not geographically uniform across seasons. In a Phoenix-area operator we ran in 2025, the south-and-east valley dominated cooling-season demand (older neighborhoods, older systems, higher replacement rates) while the north valley dominated heating-season demand (newer construction, more heat-pump conversions). Targeting both geos equally year-round meant under-spending in the active geo and over-spending in the dormant one.
We now run seasonal geo-weighting for any operator running >$15K/month on Meta. Specifically:
- Cooling season: increase budget in cooling-priority ZIPs by 30-40%; reduce heating-priority ZIPs by similar
- Heating season: inverse
This requires segmenting your ZIP list by climate-band priority, a one-time exercise per metro that pays back monthly.
Exclusions that almost everyone misses
A few exclusion lists we routinely add to HVAC accounts:
- Apartment-heavy ZIPs: most HVAC work in apartment buildings goes through property management, not consumer Meta ads. Excluding apartment-dense ZIPs lifts conversion rate meaningfully.
- New-construction ZIPs: homes under 5 years old rarely need HVAC work outside of warranty channels. Different funnel; exclude from consumer campaigns.
- Out-of-state edges of metros: if you operate in a metro that spans two states (Kansas City, KC; Cincinnati; etc.) and your license only covers one state, exclude the other state's ZIPs. We have seen accounts spending 8-15% of budget on leads they couldn't legally serve.
How to measure whether your geo-targeting is working
Two numbers tell you everything:
- Cost per booked job by ZIP, pulled from the CRM, not Meta. If three ZIPs account for 60% of bookings, your targeting is probably too broad.
- Booked-to-closed ratio by ZIP, if certain ZIPs convert leads to scheduled jobs but don't convert to completed jobs, those are usually no-show or unqualified leads. Either tighten qualification at the form or exclude the ZIP.
The first audit we run on any new HVAC account is this, and it's typically the highest-ROI 4-hour exercise in the entire engagement.
Read next: