Why the "industry standard" percentage doesn't work for HVAC
Generic marketing advice says spend 5 to 10 percent of revenue and call it done. That rule was built for businesses with steady month-to-month demand: a dentist, a law firm, a dry cleaner. HVAC does not work that way. A shop in the Southeast or Southwest can do 40 percent of its annual service call volume in June, July, and August, then watch the phone go nearly silent in October and April. A flat monthly ad budget either overspends during the slow months chasing leads that do not exist, or underspends right when a heat wave hits and every competitor in the Map Pack is bidding the same keywords you are.
That is the core problem with borrowing a percentage from a generic small-business calculator: it treats your revenue as smooth when your revenue is spiky. The right question is not "what percent of revenue" in isolation, it is "what percent of revenue, distributed across which months, toward which service lines." A tune-up campaign in March behaves nothing like an emergency no-cool campaign in July, and they should not share a budget line that never moves.
The other reason flat percentages fail HVAC specifically: your margin structure is bimodal. A $180-$250 service call and a $6,000-$12,000 system replacement are not the same lead. They come from different searches, they close on different timelines, and they justify very different costs per lead. A budget built around a single blended CPL number will overspend on service calls (thin margin, needs to be cheap) or underspend on replacement leads (thick margin, can absorb a much higher acquisition cost). Size your budget around the mix of calls you actually want, not an average that hides the two businesses inside your one business.
- Flat percentages assume steady demand. HVAC demand is not steady, it is seasonal and regional.
- Service calls and system replacements have different margins and need different budget logic.
- The right number starts with your season and your revenue mix, not an industry average.
A revenue-based starting range, by company size
Use gross annual revenue as the starting point, then adjust for season and goals. These ranges assume a company that already has a functioning website, a Google Business Profile, and is not starting from zero.
| Annual revenue | Suggested marketing budget | Typical monthly range |
|---|---|---|
| $500K - $1M | 8-10% of revenue | $3,300 - $8,300/mo |
| $1M - $3M | 7-10% of revenue | $5,800 - $25,000/mo |
| $3M - $8M | 6-9% of revenue | $15,000 - $60,000/mo |
| $8M+ | 5-8% of revenue | $33,000+/mo |
Two adjustments matter more than the table. First, if you are actively growing (adding trucks, opening a second market, chasing a competitor's territory), push toward the top of your bracket or above it. Growth spend is different from maintenance spend, and treating them the same is how companies underfund an expansion. Second, smaller companies typically need a higher percentage, not a lower one, because fixed costs (a functioning website, review infrastructure, basic tracking) do not scale down proportionally. A $600K shop and a $6M shop both need a site that loads under 2 seconds and ranks in the Map Pack; the $600K shop just has less revenue to spread that fixed cost across.
What this budget should already assume is covered elsewhere in your operation: a website that is not actively costing you leads, and a Google Business Profile that is claimed, verified, and reasonably complete. If those are missing, fix them first. No ad budget outruns a broken foundation.
Split the budget by season, not by month
The single biggest lever in an HVAC marketing budget is not the total dollar amount, it is how you distribute it across the year. A flat 1/12th-per-month budget is the most common mistake we see when we take over management from a generalist agency or an owner running their own ads.
Instead, think in three bands: peak season, shoulder season, and off season. Peak season (roughly June through August in most of the country, plus a second smaller peak in December and January for heating) should carry 45-55% of the annual budget. This is when cost-per-click is highest because every competitor is bidding, but it is also when close rates and average ticket are highest, because a no-cool call in a heat wave does not wait for three quotes. Shoulder season (April-May, September-October) should carry 30-35%, aimed less at emergency repair and more at maintenance plan enrollment, tune-ups, and system replacement leads from homeowners who are not in crisis and can shop around. Off season (the deep winter and early spring lulls outside the heating peak) should carry the remaining 15-20%, focused almost entirely on brand visibility, review generation, and content that builds Map Pack and AI-search authority for the season ahead.
This is also where SEO earns its keep against paid ads. Google Ads spend can and should flex hard with the season, dialed up in June and pulled back in October. Organic visibility, the Map Pack ranking and the answer-engine citations that come from a real content footprint, keeps working in the background at a flat cost whether it is July or November. A shop that only pays for clicks resets to zero every shoulder season. A shop that has built organic and AI-search visibility carries momentum through the slow months at no incremental ad spend.
- Peak months: 45-55% of annual budget, mostly paid search and Map Pack ads
- Shoulder months: 30-35%, weighted toward maintenance plans and replacement leads
- Off season: 15-20%, weighted toward SEO, reviews, and content that pays off next peak
Where the dollars should actually go
Once you have a total number and a seasonal curve, split it across channels. For most established HVAC companies, the allocation looks roughly like this: 40-50% Google Ads (Search and Local Services Ads combined), 25-30% SEO and Map Pack optimization, 10-15% review generation and reputation management, and the remainder split between a functioning website/landing pages and tracking so you know what any of this is doing.
Google Ads earns the largest share because it is the only channel that can be turned up the day before a forecast heat wave and turned down the day the calls stop. That responsiveness is worth paying for, especially for emergency no-cool and no-heat searches where the buyer is calling whoever answers first, not comparison shopping. But Google Ads is also the channel that stops producing the second you stop paying. It is rented visibility, and every dollar you put into it this month buys you nothing next month unless you keep paying again.
SEO and Map Pack work is the owned visibility that keeps compounding. For most HVAC companies this means a real site architecture, service-and-city pages that actually distinguish a tune-up lead from a replacement lead, and consistent citation and review signal that keeps you in the 3-pack for "AC repair near me" without paying per click for it. This is slower to build (expect 4-9 months to move on competitive terms) but it is the piece that keeps your cost per lead falling year over year instead of rising with every competitor who joins the ad auction. Increasingly, this is also the piece that determines whether AI answer engines mention your company at all when a homeowner asks a chatbot who to call for AC repair nearby: those tools pull from the same signals that drive Map Pack ranking, not from a paid ad account.
Reviews deserve their own line item because in HVAC, review count and review recency are a direct proxy for trust against the franchise competitors who can outspend you on ads. A homeowner comparing a 4.8-star shop with 340 reviews against a national franchise with 900 reviews at 4.3 stars will often pick the smaller shop. That outcome has to be engineered with a review request system built into your dispatch and invoicing workflow, not left to chance or to whichever tech remembers to ask.
Service calls vs. system replacements: two different budgets in one
The mistake we see most often in HVAC accounts we inherit is a single blended cost-per-lead target applied to every campaign. That number is meaningless because a $180 tune-up call and a $9,000 system replacement lead do not share an economics model.
A tune-up or basic repair lead needs a low cost per lead, because the margin on the call itself is thin and the real value is downstream: a maintenance plan signup, a future replacement when the unit finally dies, a referral. Bidding aggressively here only makes sense if you have the follow-up in place to convert that first call into a plan member.
A system replacement lead can absorb a cost per lead many times higher, because a single closed sale can be worth 20-40x a service call. This is where most HVAC companies underspend out of habit: they set a maximum cost-per-click that made sense for service calls and apply it to campaigns that should be targeting "AC unit replacement cost" or "new HVAC system installation" searches, where the buyer intent and ticket size justify a much higher bid.
Structure your Google Ads account (and your budget conversation with whoever runs it) around this split explicitly: separate campaigns, separate landing pages, separate target cost-per-lead numbers for repair/maintenance versus replacement. A shop that mixes both into one "HVAC leads" campaign is almost always overpaying on one side and underbidding on the other.
- Service/tune-up leads: optimize for volume and low cost per lead, feed the maintenance-plan pipeline
- Replacement leads: bid aggressively, can absorb 10-20x the CPL of a service call
- Never blend the two into a single campaign or a single CPL target
Signs your current budget is wrong (either direction)
Most HVAC owners do not have a budget problem so much as an allocation problem. A few diagnostic signs, in both directions.
You are probably overspending on ads if: your organic Map Pack ranking has not moved in over a year despite steady ad spend, you cannot say what your cost per lead is by service type (repair versus replacement versus maintenance), or you are still running the same flat monthly ad budget in October that you ran in July. That last one is the most common and the most expensive, because it means you are paying peak-season click prices during a month when close rates are lower and buyer urgency is gone. It also usually means nobody has looked at the account settings since the campaign was first turned on.
You are probably underspending, or spending on the wrong things, if: your phones go dead every shoulder season and you have no organic or content presence to fall back on, your review count has been flat for six months while a competitor's has grown, or you are relying entirely on a franchise-style national brand campaign that does not distinguish your local Map Pack listing from three other trucks in your metro. In all three cases the fix is not simply "spend more," it is redirecting dollars from rented clicks to owned visibility that survives the slow months.
The clearest tell of all: if a generalist marketing vendor cannot answer, without checking, whether your best-performing campaign right now is a repair campaign or a replacement campaign, they are not managing your account by the economics that actually matter in this trade. That is a specialization gap, not a budget gap, and no amount of added spend fixes it. A vendor who treats every home-service trade the same way will keep applying a plumbing or roofing playbook to a business whose demand curve looks nothing like either one.
One more test worth running before you touch the budget at all: pull last year's monthly ad spend next to last year's monthly call volume by service type. Most owners have never laid those two columns side by side. When they do, the mismatch between when the dollars went out and when the calls actually came in is usually obvious within thirty seconds, and it is usually the same mismatch described above, flat spend against spiky demand.