A maintenance plan sold only at the kitchen table stops growing. Sell it to your own list first.
Your techs can offer the plan only in houses where something broke. The other signups can come from your customer list and from the tune-up and price searches people already make.
TL;DR
- Advertise an HVAC maintenance agreement to your own customers first. In a Dallas account we run, existing customers reached by email and social cost the least per signup, customers dormant over two years came next, and cold search ads selling the plan cost the most and were stopped after five weeks.
- A plan your techs sell only after a repair grows only as fast as things break. The member count levels off at new members a year divided by the share of members you lose each year, and a summer with fewer repair calls lowers the first number.
- On Google, showing ads only to your customer list needs 90 days of history and more than $50,000 in lifetime spend. Below that, the list works for exclusions and "Observation". Meta's page names account permissions, not a spend minimum.
- In that Dallas account, searches for the plan itself were a trickle. Google autocomplete (checked September 24, 2026) shows tune-up cost, flush cost and "worth it" searches around the plan: send those to a page with the one-off price and the plan price side by side.
Why does a plan sold only at the kitchen table stop growing?
If your plans are sold by a tech who finishes a repair or an install and offers the plan before packing up, the moment is a good one: the household has just paid for a failure and is listening. But that moment happens only in houses where something went wrong, so new members a year can't outgrow your repair and install calls.
Every plan has a ceiling, whoever sells it. Members move, sell the house or don't renew. Once the members you lose in a year equal the members you add, the count stops rising:
Ceiling = new members a year ÷ share of members lost a year
An illustration with made-up numbers, not data from any account or a benchmark. Say a shop runs 2,400 repair and install visits a year and its techs sign one household in ten: 240 new members a year. A quarter of members leave each year.
| Members at year end | Year 1 | Year 2 | Year 3 | Year 5 | Year 10 | Ceiling |
|---|---|---|---|---|---|---|
| Kitchen table only, 25% lost a year | 240 | 420 | 555 | 732 | 906 | 960 |
| Same, plus 120 a year from your own list | 360 | 630 | 833 | 1,098 | 1,359 | 1,440 |
| Kitchen table only, 20% lost a year | 240 | 432 | 586 | 807 | 1,071 | 1,200 |
The model adds each year's signups at year end and applies the loss rate to members from earlier years.
In year two the kitchen-table plan grows by 180 members. In year ten the techs still sign 240 households and the count grows by 18; losses take the rest. Two things move the ceiling: keeping more members, or adding signups that don't depend on something breaking. If a mild summer brings a fifth fewer repair and install visits, signups fall to 192 a year and the first row's ceiling drops from 960 to 768.
What the plan does for a company that sells two trades
Cody & Sons has been plumbing in Dallas since 1969, added heating and cooling in 2014, and has shops in Dallas and Plano. Its maintenance plan had a page and a price, was sold essentially only by techs at the end of a repair, and was advertised nowhere.
A plumbing customer on the plan meets a tech twice a year with nothing broken, and during one of those visits somebody looks at the air conditioning, because the tech is already in the house. For a company whose heating and cooling side was forty-five years younger than its plumbing, our reading is that the plan was the cheapest introduction to the newer trade, though nobody had described it that way out loud.
Cody & Sons Plumbing, Heating & Air, Dallas and Plano. The plan was advertised as its own product. Members buying the second trade, +16 points. Window: Within 12 months of joining. Source: Client CRM.
Limit: the twelve-month follow-on figure necessarily includes signups from before this work, because twelve months of history is longer than the window we changed anything in.
The budget side of a second trade is in how two trades in one budget play out.
Who should see a maintenance plan ad first?
In the Cody & Sons account, cost per plan signup ranked the audiences like this, cheapest first (call tracking and Meta Ads, two quarters after the change):
- Existing customers without the plan, reached by email and social.
- Customers with no job in over two years. More per signup than step 1, less than strangers.
- Strangers on search, sold the plan itself. The most expensive per signup. Those ads did badly, and we stopped them after five weeks.
Our reading of why: a plan asks a household to pay before anything is wrong, and a customer whose house your techs have already been in has a reason to say yes that a stranger reading an ad doesn't.
Tune-up and price searches carrying the plan aren't broken out in those figures; attaching the plan to them is our recommendation, further down.
Cody & Sons Plumbing, Heating & Air, Dallas and Plano. The plan was advertised as its own product, to the company's own customers first. Maintenance plan signups, +38 to +45%. Window: Two quarters against the two before. Source: Client CRM.
Limit: plan signups grew from a base that was already healthy after fifty-plus years of trading, so the percentage is smaller in absolute terms than it sounds.
Cody & Sons Plumbing, Heating & Air, Dallas and Plano. Same work, same period. Cost per signup, −23%. Window: Two quarters against the two before. Source: Call tracking.
Limit: we cannot separate the effect of advertising the plan from the effect of splitting the two locations. They happened in the same quarter in the same account.
How do you get the plan in front of your own customers?
Email goes first: no platform sits between you and the list. Then load the same list into Meta and Google, each with its own rules.
Meta. You upload identifiers such as email, phone and address, and Meta hashes them before matching them to profiles. It shows a match score out of ten, "calculated by dividing matched rows by uploaded rows", and marks a list not updated in over 30 days Outdated, which may affect delivery. Meta's page names ad account permissions as the requirement, not a spend minimum, though a new account may wait a few weeks. Prohibited information, financial information included, can't be the basis of a list. Our reading: don't build one out of who financed a system.
Google. Customer Match is Google's name for uploading your own customer list, and Google's example use is to "advertise a new loyalty program to your existing customers". What your account may do with the list depends on its history:
| Good policy and payment history | Plus 90 days of history and over $50,000 lifetime spend | |
|---|---|---|
| Exclude the list | Yes | Yes |
| "Observation": watch the list without changing who sees the ads | Yes | Yes |
| "Targeting": show the ads only to the list | No | Yes |
| Manual bid adjustments | No | Yes |
For illustration, an account spending $10,000 a month on Google Ads goes past $50,000 in its sixth month. The rest of Google's rules that matter for a contractor's list:
- Size. Every uploaded file needs at least 100 user records, and Google recommends lists of "at least 100 users to prevent ads from not serving", since not everyone is signed in all the time.
- Radius. The Customer Match policy doesn't allow a list combined with geographic limits when the result is "a relatively small number of users". A list of local customers is already local, so our reading is to keep that campaign's location setting wide.
- Ad text. The same policy bans ad content that implies you know personal or sensitive information about the customer. Our reading: sell the plan and leave the age of their system out of the ad.
- Your privacy policy must say you share customer data with third parties that perform services for you.
Once a household joins, it moves to the list you exclude from repair searches; paying for clicks from your own customers covers that exclusion.
Which searches can carry an HVAC maintenance agreement?
"Almost nobody searches for a maintenance plan" is how the Cody & Sons case file puts that account's search terms. Your report may understate even the trickle: Google says some search terms that don't have enough query activity are omitted from the search terms report, for privacy.
We checked Google autocomplete on September 24, 2026, for plan and tune-up phrases in US English:
| You type | Autocomplete adds, among others |
|---|---|
| hvac maintenance plan | near me, cost, worth it, template, flyer, pdf |
| hvac membership | plans, prices, worth it, near me, programs |
| ac tune up | near me, cost, specials near me, car, home depot |
| water heater flush | cost, service near me, kit, tool, valve, hose |
| hvac service agreement | cost, near me, template, software, sample |
| hvac maintenance agreement | template, software, pdf, form, cost, near me |
Autocomplete shows that a phrase gets searched, not how often or in which town. The table mixes homeowners pricing a visit or a plan with do-it-yourselfers after a kit or a hose and other contractors after a template or software. What it adds to "hvac maintenance agreement" reads mostly as other contractors. Contractor and do-it-yourself words go on your negative list; negative keywords for contractors has the risk of each.
What the Cody & Sons account did with the plan-adjacent searches it got:
| Search term | Decision | Why |
|---|---|---|
| ac tune up dallas | Moved to the plan page, tune-up priced inside it | The closest thing to searchable plan intent |
| water heater flush cost | Moved to the plan page | The flush is part of the plan, so the page shows both prices |
| plumbing maintenance plan | Kept | Tiny volume, almost free, converted better than anything else in the account |
| hvac service contract cost | Kept | A comparison shopper, where the published price is the whole argument |
| free ac inspection | Cut | "Free" draws the one customer a plan can't survive |
The page those searches land on does one job: the tune-up at its one-off price, the plan at its price, and what the two visits include. The searcher was about to make that comparison anyway (publishing a price range covers the price side). It is not the repair page: HVAC advertising for repair, replacement and maintenance lists them as separate searches with separate intent.
Google's price assets can put the same comparison in the ad: up to 8 cards under a Search ad, at least 3 items (Google recommends 5 or more), 25 characters each for header and description. Prices go in the price field, not in the header or description, and Google's requirements say the items should be "priced accurately, easily found at the ad's destination". Our reading for a contractor: AC tune-up, furnace tune-up, water heater flush and the plan, each linking to the plan page.
What this doesn't cover
- What to charge for the plan, what to put in it, and the tech's pitch. Our cases don't measure plan pricing or scripts.
- A Google Customer Match campaign for the plan. Cody & Sons reached its list by email and social. We have no figure for a Google campaign aimed at a customer list.
- The location split Cody & Sons made in the same quarter (two shops in one account covers it).
Do this in your account
- Find your ceiling. From your CRM: plan signups in the last twelve months, the share sold on a repair or install ticket, and members who didn't renew. New members a year ÷ share lost a year is where the plan stops.
- Build two lists. Customers with a completed job in the last two years and no plan; customers with no job in over two years. Leave out current members and open estimates.
- Email the first list with the plan, its price and what the two visits include. Then the second.
- Load both lists into Meta as customer list custom audiences, note the match score, and update them monthly so they don't go Outdated.
- Before any Google upload, add the data-sharing line to your privacy policy and check the account's history and lifetime spend against the table above.
- Build the plan page and a price asset. Tune-up price and plan price on one page, at least three priced items in the asset, every price matching the page.
- Pull twelve months of search terms and filter for tune, flush, plan, agreement, membership and contract. Send the pricing searches to the plan page. In the campaigns that carry the plan, add template, software, pdf, flyer, kit and free as negatives where they appear.
FAQ
How do you advertise an HVAC maintenance agreement? By email to your customers, then as a customer list on Meta or Google, then on tune-up, flush and plan-price searches landing on a page with both prices.
Is it worth running Google Ads for a maintenance plan? Not for ads selling the plan to strangers: in the Dallas account we run, those were the most expensive per signup and were stopped after five weeks. Our reading is that tune-up and price searches landing on a page with both prices can carry the plan, but that account's figures don't measure it separately. Check your own search terms first: Google omits some terms without enough query activity from the report.
How many customers do I need for a Google customer list? Google's troubleshooting page says uploaded files must have a minimum of 100 user records and recommends "at least 100 users to prevent ads from not serving". The Customer Match policy also requires at least 100 members added or updated within the last 540 days, so re-upload the list at least that often.
Membership program, maintenance agreement or service agreement: which name do customers search? All three turned up in Google autocomplete on September 24, 2026, each with "cost" or "near me", though "maintenance agreement" came mostly with template and software phrases. Autocomplete doesn't show volume, so check which one appears in your own search terms before renaming anything.
Sources
- Google Ads Help, "About Customer Match", https://support.google.com/google-ads/answer/6379332
- Advertising Policies Help, "Customer Match policy", https://support.google.com/adspolicy/answer/6299717
- Google Ads Help, "Fix Customer Match issues with list upload, small list size, or low volume", https://support.google.com/google-ads/answer/7474166
- Google Ads Help, "About 'Targeting' and 'Observation' settings", https://support.google.com/google-ads/answer/7365594
- Google Ads Help, "About the search terms report", https://support.google.com/google-ads/answer/2472708
- Google Ads Help, "About price assets", https://support.google.com/google-ads/answer/7065415
- Advertising Policies Help, "Price asset requirements", https://support.google.com/adspolicy/answer/7048464
- Meta Business Help Center, "About customer list custom audiences", https://www.facebook.com/business/help/341425252616329
- Meta Business Help Center, "Create a customer list custom audience", https://www.facebook.com/business/help/170456843145568
- Our autocomplete check: Google autocomplete, US English, queried September 24, 2026, for eleven plan and tune-up phrases.
All pages read in full on September 24, 2026. Every quotation above is from these pages, except the one from the Cody & Sons case file and the autocomplete phrases from our own check.