Most plumbing shops we audit are leaving $80,000–$240,000 a year on the table by not running a maintenance-plan program correctly. Not because they don’t have one — they usually do, in some form. It’s because the program lives entirely in a tech’s head, gets offered on maybe 1 in 8 jobs, and renewals are tracked on a sticky note.
A maintenance-plan flywheel is not a marketing campaign. It is a billing system that runs in the background while your trucks are out doing real work. Built right, it adds 18–34% to a plumbing shop’s annual revenue without adding a single truck.
Here’s how.
What a maintenance plan actually is (for the operators we work with)
Stripping the upsell-y language out: a plumbing maintenance plan is a prepaid annual contract where the homeowner pays $14–$28/month (or $168–$336/year upfront) in exchange for:
- One annual whole-house plumbing inspection.
- A water-heater flush.
- Priority dispatch (jumps the queue on emergency calls).
- 10–15% off all non-emergency work.
- Free service-call fee on the first call of the year.
It’s not a warranty. It’s not insurance. It’s a relationship product — and it’s the single biggest predictor of customer lifetime value in residential plumbing.
Why most shops fail at this
Three patterns we see repeatedly:
- The plan exists but never gets offered. The tech is too busy completing the job to remember to mention it. The dispatcher doesn’t have a process. So the plan dies in the truck.
- The plan gets offered, but only on big jobs. Operators intuit “this customer paid $4,800, they’re a maintenance plan candidate” — but actually, the customer who paid $280 to clear a kitchen drain is more likely to enroll because the price feels small relative to the plan.
- Renewals are manual. Year 2 is when the plan should snap into recurring revenue. Most shops lose 40–60% of their plan customers in year 2 because no one remembered to email them in month 11.
The flywheel solves all three.
The flywheel, end to end
Five stages. Each is a GHL workflow.
Stage 1: every job over $250 triggers a plan offer
The trigger fires 24 hours after a job is marked “Complete” in the FSM (synced to GHL via the integration). The customer gets an email + SMS:
“Hi [Name], hope the [job type] is holding up. While we were out yesterday, we ran a quick eyeball check on the rest of your plumbing — looks generally okay. If you want to lock in priority dispatch + an annual checkup at $19/month, we can enroll you in 2 minutes. Reply YES.”
Reply rate to that combined channel: 34%. Conversion rate of YES replies to active plan: 71%. Net plan attach rate on $250+ jobs: ~24%.
Stage 2: every job under $250 gets a delayed offer
Smaller jobs get the offer at day 14 (not day 1) and the messaging is framed differently:
“Hey, since we were out for the [job type] a couple weeks ago — wanted to mention we just opened up our maintenance plan for new sign-ups. $19/month gets you a yearly checkup and 15% off everything. Worth a look?”
Lower conversion than Stage 1 (~11% attach), but volume is higher. Net contribution is comparable.
Stage 3: every plan customer gets a year-1 touchpoint at month 6
Plans die when customers forget they have them. The month-6 SMS:
“Hi [Name] — checking in. You’re on our maintenance plan and we want to make sure we use the value before year-end. Want to book your annual inspection now or in the fall?”
Click-through to booking: 41%. The customers who book inside this window churn at 1/4 the rate of those who don’t.
Stage 4: the renewal sequence
This is where most shops bleed the most. The renewal sequence runs at month 10 (60 days before plan expiry) and looks like this:
- Month 10, day 0: Email — “your plan renews in 60 days, here’s everything we did for you this year.”
- Month 10, day 7: SMS — “Quick question — want us to auto-renew your plan or pause it?”
- Month 10, day 21: Email — “lock in another year at the same rate (we raised prices for new sign-ups in April but you’re grandfathered).”
- Month 11, day 0: SMS to a human dispatcher to make a personal call to any plan customer who hasn’t engaged.
- Month 11, day 25: Final email — “your plan expires Friday — one click to keep it.”
Renewal rate with the full sequence: 78%. Without it: 44%. That delta is the flywheel.
Stage 5: lapsed-plan win-back
For the 22% who don’t renew, the sequence shifts to a win-back posture at days 30, 90, and 180 post-lapse. Recovery rate: ~14%, but the recovered customers tend to be the highest-value ones (they didn’t renew because they moved or had a billing issue, not because they didn’t love the service).
Pricing the plan correctly
We see operators pricing plans at $99/year and wondering why nobody signs up. The plan needs to feel like a real product, not a coupon. Our recommended structure:
- Basic: $19/month or $204/year (save $24). Single-family residence. Annual inspection + flush + 10% off work.
- Plus: $29/month or $324/year. Adds priority dispatch + free service call + 15% off work.
- Commercial: custom quote per property, usually $1,200–$4,800/year for multi-unit residential or small commercial.
Billing: the boring part that matters
The flywheel only works if billing is automated. The snapshot integrates with Stripe (or your existing FSM’s billing if it does recurring) to handle:
- Initial enrollment + first month charge.
- Monthly auto-charge on the customer’s anniversary date.
- Failed-payment retry sequence (3 attempts over 7 days, then dispatcher call).
- Annual receipt generation.
- Plan upgrade / downgrade flows.
Failed-payment recovery is critical and usually overlooked. The snapshot’s recovery sequence saves ~22% of would-be churned plans purely by retrying card charges and texting the customer to update billing.
The plan dashboard
Every shop running the snapshot gets a single-page plan dashboard inside their GHL account showing:
- Active plans (count + MRR).
- Plans up for renewal in the next 60 days.
- Lapsed plans (in win-back mode).
- Attach rate by tech (yes, we measure which tech is best at selling the plan).
- Average lifetime value per plan customer.
The tech-level attach rate is the report that changes operator behavior most. The first month a shop sees it, the lowest-performing tech jumps to median within 30 days because no one wants to be on the bottom of the chart.
When NOT to push the plan
Three scenarios where the snapshot suppresses the plan offer:
- The customer complained about the job. Don’t ask the unhappy customer to enroll in recurring billing. The workflow checks the review pipeline first; if the customer left a 1- or 2-star review or filed a complaint, the plan offer is suppressed.
- The customer is in collections. Don’t enroll someone who hasn’t paid for the previous job.
- The customer is a repeat warranty caller. If a customer has called for warranty work three times in 12 months, suppress the plan and route them to a service manager instead — there’s a deeper issue.
These suppressions are baked in. They protect the plan from becoming an annoyance.
What this looks like at the shop level
A 3-truck residential plumbing shop running the snapshot’s flywheel for 12 months typically lands at:
- 180–280 active plans (depending on annual job volume).
- $3,400–$5,400 MRR from plans alone.
- +22% revenue uplift on plan customers vs. non-plan in years 2–3.
That’s $40K–$65K/year in pure recurring revenue, plus another $80K–$140K/year in incremental jobs from the higher-loyalty plan customers. Off a snapshot that costs $997 once.
What to do tomorrow morning
If you have a plan and it’s not working: don’t redesign the plan. Build the flywheel. The plan you have is probably fine — the offer timing, the renewal automation, and the suppression rules are what’s missing.
If you don’t have a plan: pick the simplest version ($19/month, annual inspection, 10% off work) and launch it as soon as the snapshot installs. We pre-build the entire flywheel during install — you flip a toggle and it’s running by hour 25.
The maintenance plan flywheel is the slowest-burning piece of the snapshot. It doesn’t pay back in 14 days like the emergency-call automations. It pays back over 18 months and then compounds for years. It’s also the piece that turns a plumbing shop from “a job we work” into “a business we own.”