An HVAC marketing plan is a one-year document with three goals (calls, booked jobs and maintenance agreements), a calendar built around your cooling and heating peaks, a budget split by channel, and one sheet where you track the results each month. It should fit on a page or two, and whoever opens it on the first of the month should know what to do. Download the free template (CSV, opens in Excel or Google Sheets, no sign-up): one row per month with focus, channels, offer, budget, targets and blank columns for what actually happened.
This page is about building the plan. For the tactics that go into it, see our 15 HVAC marketing ideas; for search, see HVAC SEO. Every budget and target below is an example to replace with your own.
The plan on one page
Copy this table, or use the first rows of the template. Fill in last year from your phone system, your field-service software and your Google Business Profile, then set this year's numbers.
| Line | Last year | This year's target | Where the number comes from |
|---|---|---|---|
| Calls from marketing | ____ | ____ | Call tracking, Google profile calls, your phone system |
| Booked jobs from those calls | ____ | ____ | The source field on each job in your software |
| New maintenance agreements | ____ | ____ | Your agreement list |
| Agreements renewed | ____ | ____ | Your agreement list |
| Marketing spend | ____ | ____ | Invoices and ad accounts |
| Cost per booked job | ____ | ____ | Spend divided by booked jobs |
| Cooling peak (months) | ____ | ____ | Last year's calls by week |
| Heating peak (months) | ____ | ____ | Last year's calls by week |
| Who owns the plan | ____ | One named person |
If you can't find last year's numbers, that is your first job. A plan with blank "last year" boxes can still work, but the first three months are really about measuring.
1. Set three goals
Most plans fail by trying to grow everything at once. An HVAC company needs three numbers, because each one does a different job:
- Calls tell you whether people are finding you. They are the top of the funnel.
- Booked jobs tell you whether you are converting those calls. A month with lots of calls and few jobs points at the phone, the price or the lead source, not at marketing reach.
- Maintenance agreements fill your shoulder seasons and bring back the same homes twice a year. They are the steadiest number on the sheet.
Give each a number and a date, such as "950 booked jobs from marketing this year, and 130 new agreements". Those are the template's example figures, not a benchmark. Set yours from last year plus what you can actually serve: a goal of more calls in July is pointless if your crews are already booked out.
2. Map your seasons
HVAC demand follows the weather, so the plan does too. ENERGY STAR tells homeowners to "check the cooling system in the spring and the heating system in the fall", because "contractors get busy once summer and winter come" (ENERGY STAR). That gives every HVAC year four parts:
- 1Spring shoulder: sell coolingAC tune-ups, new agreements, replacement quotes while crews have room.
- 2Cooling peak: answerEvery call picked up, reviews asked for daily, paid spend cut if the schedule is full.
- 3Fall shoulder: sell heatingFurnace and heat pump tune-ups, agreements, follow-up on the summer's open quotes.
- 4Heating peak: answerNo-heat calls first, accurate hours on Google, renewals, and next year's plan.
How big each peak is depends on where you work. The US Energy Information Administration found 88% of households use air conditioning, and two-thirds use central AC or a central heat pump as their main equipment (EIA), so cooling matters almost everywhere. Heating peaks vary much more by climate. Pull last year's calls by week from your phone system or software, and mark where they rise and fall. Your own dates beat any calendar, including ours.
3. Split the budget by channel
We found no reliable published figure for what share of revenue an HVAC company should spend on marketing, so we don't give one. Start from what you spent last year and what each source booked, then divide the year by channel. Here is how an example $36,000 year might split:
| Channel (example) | Share | A year, on an example $36,000 | What it pays for |
|---|---|---|---|
| Google Local Services Ads | 35% | $12,600 | Pay-per-lead ads at the top of many repair searches |
| Google search ads | 20% | $7,200 | Replacement, heat pump and tune-up searches |
| Website, Google profile and SEO upkeep | 20% | $7,200 | Service pages, photos, seasonal page refreshes |
| Email, text and review tools | 10% | $3,600 | Pre-season reminders, quote follow-up, review requests |
| Social media boosts | 5% | $1,800 | Dated offers only, such as a tune-up week |
| Trucks, door hangers, local sponsorship | 5% | $1,800 | Measured with a dedicated number |
| Reserve for tests | 5% | $1,800 | One new thing a quarter, stopped if it does not pay |
| Total | 100% | $36,000 |
This is a labelled example, not a recommendation for your shop. Two rules matter more than the percentages. First, weight spend toward the weeks before each peak, when you can still serve the calls. Second, keep each line's money and results separate, so you can see which source books jobs at a profit. Our home service marketing cost guide has published prices for each line.
Check your Local Services Ads line against Google's own advice before you start. Google says "you only pay when you get a lead", and for its Maximize leads setting, "it is recommended to set a minimum budget of 10 leads per week" (Google). At an example $60 a lead, that is about $2,600 a month, more than this example's LSA line. If your line is smaller, expect fewer leads and a slower read on whether it works. Our Local Services Ads guide explains how ranking and bidding work.
4. Fill in the 12-month calendar
Give each month one focus, its main channels and one offer. This is the template's example year for a mixed climate:
| Month | Focus | Main channels | Offer (example) |
|---|---|---|---|
| January | No-heat calls, agreement renewals | Local Services Ads, Google profile, email and text | Renewal reminder |
| February | Book spring cooling tune-ups early | Email and text, Local Services Ads | Spring AC tune-up |
| March | Sell cooling tune-ups and agreements | Email and text, LSA, search ads | Tune-up or agreement sign-up |
| April | Tune-ups, follow up replacement quotes | Email and text, LSA, search ads, social | Replacement financing (approved terms only) |
| May | Last tune-up push | LSA, search ads, Google profile | Pre-summer tune-up |
| June | Answer every call, ask for reviews | LSA, Google profile, review requests | None if booked out |
| July | Answer every call, ask for reviews | LSA, Google profile, review requests | None if booked out |
| August | Book fall heating tune-ups | Email and text, LSA | Fall tune-up |
| September | Sell heating tune-ups and agreements | Email and text, LSA, search ads, social | Tune-up or agreement sign-up |
| October | Replacement quotes before winter | Email and text, LSA, search ads, social | Replacement financing (approved terms only) |
| November | Last tune-up push, first no-heat calls | LSA, Google profile, email and text | Pre-winter tune-up |
| December | No-heat calls, plan next year | LSA, Google profile, review requests | None if booked out |
The CSV adds a budget, call target, booked-job target and agreement target to each row, plus empty columns for the actuals. Notice what happens at each peak: the offer column goes quiet. In July you rarely need more leads; you need to answer and book the ones you get, which is why the plan cuts paid spend if the schedule is full. Price your offers from your real cost per visit; the HVAC flat-rate pricing calculator helps with that.
Plan each offer backwards. A spring tune-up reminder that goes out in late February needs its price set, its booking slots opened and its text written in early February. Put those prep tasks in the notes column of the month before.
5. Plan the maintenance agreements
Agreements deserve their own line because they behave differently from calls. You sell them in the shoulder seasons, at every tune-up and repair, and they book visits into the weeks you would otherwise struggle to fill. Our HVAC marketing ideas guide covers how to design one and what it can add up to. For the plan, decide four things:
- When you sell them: the template puts most new-agreement targets in March to May and in September and October.
- Who asks: usually the technician at the end of a visit, with a one-page explanation they can leave behind.
- When you renew them: a reminder a month before each agreement's anniversary, sent by whoever runs the office.
- What you count: new agreements and renewals separately, since a year of strong sales can hide a year of quiet cancellations.
6. Track it every month
A plan nobody measures is a wish list. On the first working day of each month, fill in the template's actual columns and spend half an hour on what they say.
- Actual calls, booked jobs and new agreements entered for the month
- Actual spend entered for each channel, from invoices and ad accounts
- Cost per booked job worked out for each paid source
- Google profile calls, website clicks and directions noted
- Missed calls by hour checked, and gaps covered
- Renewals due next month listed, with who sends the reminders
- Next month's offer priced, its slots opened and its message written
- One change decided, written in the notes column
Know what each number really counts. Google Business Profile shows calls, messages, bookings, directions, website clicks, searches and views, but its call count is "the number of times a customer clicked on the call button" (Google), so customers who dial your number by hand don't appear. Add tracking parameters to links you control, such as the link in a text reminder or a social post. Google Analytics says "you should always use utm_source, utm_medium, and utm_campaign" (Google). And put a source field on every job in your software, so booked jobs can be tied back to where they came from.
Then do the arithmetic that keeps the plan honest: what each paid line can book in a month, against the target.
| Local Services Ads line: 35% of an example $36,000 a year | $1,050 a month |
| Leads at an example $60 each | about 18 |
| Booked at an example 40% | about 7 jobs |
| Search ads line: 20% of the same year | $600 a month |
| Leads at LocaliQ's $128 AC average | about 5 |
| Booked at an example 40% | about 2 jobs |
| Booked jobs from paid lines | about 9 a month |
| Average monthly booked-job target in the template (example) | 79 a month |
In this example, the paid lines book about 9 jobs a month against an average target of 79. That gap is normal, and it is the most useful thing a plan shows you: most booked jobs have to come from past customers, your Google profile, referrals and repeat agreement visits, not from ads. It also shows why search ads at LocaliQ's average AC lead price of $128 (LocaliQ) need a good landing page and quick answering to earn their place. Run your own figures through the shared-lead cost calculator.
When to change the plan
Look at the same month last year as well as last month, because HVAC numbers swing with the weather. Then change one thing at a time:
- A source books jobs well below your profit per job: give it more money in the next pre-season window.
- A source hasn't booked jobs after a full season: cut it, and move the money to the reserve.
- Calls are up and booked jobs are flat: fix the phone first, with overflow answering and quicker follow-up on quotes.
- Agreements sold but renewals falling: look at what the visits deliver before spending more to sell new ones.
- A heatwave or cold snap breaks the calendar: move the next offer, not the whole plan.
Rewrite the plan once a year, in December or January, using the year's actuals as next year's "last year" column.
Start this week
Download the template, fill in last year's three numbers and mark your peaks from your call history. Then write one offer for the next shoulder season and put its prep date in the month before. If you'd rather have this run for you, see what we run for HVAC companies and the plans and pricing. The template is yours either way.
