How to Build a Repeat Customer Pipeline for HVAC

Every HVAC job that gets completed and invoiced represents a customer who already chose your business. They already found you, trusted you enough to let you into their home, and paid you. Getting that customer back for the next service should be easier than acquiring them in the first place. But for most HVAC contractors running 15 to 20 trucks and fielding 20 or more inbound calls a day, it isn’t.

The problem is not the relationship. Most customers who had a good first experience would call the same HVAC company again. The problem is the timing. Six months after the first service, when the other system needs a tune-up, or twelve months later when the maintenance agreement is coming due, the customer doesn’t remember your name specifically. They remember “the HVAC company.” If your operation is stitching together four or more tools across scheduling, CRM, and follow-up, the gap between job close and next contact often falls through entirely. That lost rebooking is revenue your marketing spend already paid to acquire. If you haven’t been in contact since the job closed, the customer who would have called you back will instead start fresh with a Google search, and every competitor in your service territory is running ads into that exact moment.

A repeat-customer pipeline solves this with a sequence of automated contact at the moments that actually matter, not random newsletter blasts, but timely messages that match where the customer is in their service cycle. The result is that your name is the first name they think of when the next need arises because you’ve stayed in their consideration without requiring your team to manage individual follow-up calendars.

TL;DR

  • The gap: Most HVAC businesses deliver a good first service but have no automated system to stay in contact through the customer’s natural service cycle. The customer forgets. A competitor wins the rebooking.
  • What the pipeline does: A sequence of triggers and time-based nodes that fires after job completion, review request at Day 0, maintenance offer at Day 30, seasonal reminder at Day 180, and annual renewal prompt at Day 330.
  • Agreement branching: Customers with active service agreements take a different path than those without, agreement holders get next-visit reminders, non-agreement customers get offers to join.
  • What it produces: Customers who stay active across multiple years without anyone manually tracking their service dates or sending individual follow-up messages.
  • Setup time: One workflow build, under 90 minutes.

What Is an HVAC Repeat-Customer Pipeline?

An HVAC repeat-customer pipeline is an automated sequence of contact points that fires after a completed job and runs through the customer’s natural service cycle. It spans four touchpoints over 330 days: post-job review request, maintenance follow-up, seasonal reminder, and annual renewal prompt, branching by agreement status. ServiceAgent’s Workflow Builder runs this automatically from job close.

Why Do Most HVAC Customers Only Book Once?

It’s rarely because they were dissatisfied. Customer churn in HVAC is driven by one thing more than any other: forgetting. The customer had a fine experience, you fixed their problem, and then six months went by without any contact from your business. When the next need arose, they googled it fresh.

What most HVAC contractors are doing right now: a CSR logs the job notes into Jobber or on paper, the technician closes the ticket, and the customer record sits untouched until something prompts someone to call. In a busy operation dealing with front-desk turnover and a full dispatch board, that prompt never comes. The customer file shows a closed job and a paid invoice. Nothing scheduled for follow-up. That gap costs real revenue, because the next time that customer’s system needs service, you’re starting the acquisition process over.

There are four moments in the typical HVAC customer lifecycle where contact matters, and where most businesses go silent:

Day 0, immediately after the job. This is the moment of peak goodwill. The customer just had a problem solved. They’re the most receptive to leaving a review, the most likely to share your name with a neighbor, and the most open to hearing about maintenance agreements. Most businesses invoice and move on. The goodwill window closes within 48 hours without any additional contact.

Day 30, the first follow-up window. A month after the service, the customer is settled back into normal life. The repair is working. This is a natural moment to check in: is everything still running well? Do they have any questions? Would they like to schedule a seasonal tune-up? Most businesses have no contact at this stage. A simple SMS at this moment has a disproportionate effect on retention because it signals ongoing care rather than a transactional relationship.

Day 180, seasonal transition. Six months after a summer AC service, the heat is coming on. Six months after a winter furnace call, the AC season is approaching. This is when the customer is thinking about their HVAC system again, and when a timely reminder from your company, with a direct scheduling link, turns consideration into a booking.

Day 330, annual renewal. Twelve months from the first service, the customer is in the same place they were when they first called you. If they’re on a maintenance agreement, the renewal window is opening. If they’re not, this is the anniversary moment when a well-timed message about what an agreement covers can convert a repeat customer into a long-term one.

Most HVAC businesses cover Day 0 with an invoice. That’s the full pipeline. The gap between Day 0 and the next service call is an uncontested space where your competitors are running ads and knocking on doors.

Why Manual Follow-Up Doesn’t Scale

The usual answer to “how do we follow up with past customers?” is to assign the task to a CSR, create a spreadsheet of past customers with their last-service dates, and call or text them periodically. This works at low volume. It stops working when you have more than a few hundred past customers, more than one CSR managing the list, and the normal churn of a busy service operation.

Manual follow-up fails at scale for three reasons. First, the list is never complete. Jobs that are invoiced but not correctly tagged don’t make it onto the follow-up list. Customers who moved but kept the same number don’t get removed. The list drifts from reality.

Second, the timing is always wrong. A CSR working through a follow-up list is not reaching customers at Day 30, they’re reaching them at “whenever I got to your row on the spreadsheet.” Timing is the variable that determines whether a follow-up message feels relevant or random.

Third, follow-up is always the first thing to stop when call volume is high. The days your CSR is busiest, peak season, bad weather events, a wave of inbound calls, are exactly when past-customer follow-up drops off. The pipeline shrinks when business is good and revives when business slows. The ideal is the opposite: a consistent follow-up cadence that runs regardless of how busy the office is.

Automated pipelines solve all three problems. The list is built from trigger events, not manual entry. Timing is defined by node configuration, not whoever’s desk the task landed on. And the pipeline runs whether the office is busy or quiet.

Introducing the Workflow Builder

The Workflow Builder is a visual drag-and-drop canvas inside ServiceAgent where you build automated sequences that fire the moment a trigger event occurs. Each workflow starts with a trigger (the event that kicks everything off) and moves through a series of nodes (individual actions the system takes without any human involvement).

For a repeat-customer pipeline, the trigger is a completed job. The workflow runs through a sequence of time-based nodes, review request, maintenance follow-up, seasonal reminder, annual renewal prompt, branching based on the customer’s agreement status. Every past customer gets the right message at the right moment in their service cycle, without anyone on your team tracking individual service dates or scheduling individual follow-ups. HVAC contractors running this pipeline see 20% higher customer retention through the second-year service cycle, the direct result of consistent, timely follow-up that doesn’t depend on a busy CSR remembering to make the call. You build it once. It runs for every completed job from that point forward.

Trigger What fires What it does
ticket.created (job complete) Send SMS → Wait 30d → AI Decision → Send SMS (Path A or B) → Wait 150d → Send Email → Wait 150d → AI Generate → Send Email → Wait 7d → AI Decision → Create Task Sends four automated touchpoints over 330 days, branching by agreement status, and creates a CSR follow-up task only if the customer has not engaged with any automated message.

What Should the Automated Pipeline Look Like?

This is the complete repeat-customer pipeline. It starts the moment a job is completed and runs through a full year of the customer’s service cycle.

Stage 1: Post-Job (Day 0)

The trigger: ticket.created (job complete)

What it does: Fires immediately when a job ticket is created or marked complete in ServiceAgent after the technician has finished the work. Passes the customer contact, job type, and technician name to the first node.

Why it matters: This is the signal that the relationship has just entered its follow-up phase. Everything that happens next depends on this trigger firing consistently for every completed job, not just the ones someone remembers to tag.

What you do: Ensure technicians close job tickets in ServiceAgent at the end of every service call, not later that evening or the next morning. The pipeline timing starts from this event, a 12-hour delay in ticket closure translates to a 12-hour delay in the review request SMS.

What to check: Complete a test job ticket and confirm the ticket.created event fires in the activity log with the correct customer and job type attached.

Node 1: Send SMS (Day 0 review request)

What it does: Sends an SMS to the customer within 10 minutes of the job ticket being created. Thanks them for the business, names the technician, and asks for a review with a direct link to your Google Business Profile or preferred review platform.

Why it matters: Review request response rate drops sharply after 24 hours. A customer who just had a good experience is far more likely to leave a review now, while the technician’s name is still in their mind and the system is working, than they will be next week. This SMS also establishes the pattern: your business follows up. That expectation shapes how the customer receives future messages.

What you do: Configure the SMS template: “Hi [Name], thanks for having us out today. [Tech Name] is glad the [job type] went smoothly. If you have a minute, a Google review really helps us, here’s the link: [URL]. Just reply here if anything comes up., [Business Name].” Keep it personal and specific. Do not send a generic “We hope you’re satisfied” message.

What to check: After a test job closure, confirm the SMS arrives within 10 minutes with the technician name and job type correctly populated.

Stage 2: First Follow-Up (Day 30)

Node 2: Wait/Delay (30 days)

What it does: Pauses the workflow for 30 days from the job completion timestamp before the next node fires.

Why it matters: Thirty days is long enough for the customer to be past the immediate post-job period and settled back into normal life, but not so long that your business has faded from their awareness. It’s also the natural window for a customer to have noticed a secondary issue or started thinking about the other system in the house.

What you do: Set the Wait/Delay node to 30 days from the ticket.created timestamp.

What to check: After a test workflow run, confirm the activity log shows the workflow paused at Node 2 with the correct resume timestamp.

Node 3: AI Decision (has active service agreement?)

What it does: Checks the customer’s CRM profile for an active service agreement tag. Routes agreement holders to Path A and non-agreement customers to Path B.

Why it matters: The 30-day message for an agreement holder and a non-agreement customer should be completely different. Agreement holders should hear about their included services. Non-agreement customers should hear about what an agreement covers. Sending an agreement pitch to someone who already has one, or a next-visit reminder to someone who hasn’t signed up, damages the relevance of the message.

What you do: Configure Path A condition: customer tag includes “Service Agreement Active.” Path B condition: customer tag does not include “Service Agreement Active.”

What to check: Run a test with two customer profiles, one with the agreement tag and one without. Confirm each routes to the correct path.

Node 3A: Send SMS (agreement holder, next service reminder)

What it does: Sends an SMS to agreement-holder customers reminding them that their next included maintenance visit is available and providing a direct scheduling link.

Why it matters: Agreement customers who don’t use their included visits are the most at-risk for non-renewal. A reminder that frames the upcoming service as already paid for (“your spring tune-up is included in your plan”) makes scheduling the obvious next step rather than a discretionary purchase.

What you do: Configure the SMS template: “Hi [Name], your [agreement tier] plan includes a [season] tune-up. Slots are opening now, here’s your booking link: [URL]. Book before [date] to get your pick of times., [Business Name].”

What to check: After a test agreement-holder workflow run, confirm the correct SMS fires with the correct agreement tier and seasonal framing.

Node 3B: Send SMS (non-agreement customer, maintenance offer)

What it does: Sends an SMS to non-agreement customers with a brief overview of what a maintenance agreement covers and a link to learn more or schedule a consultation call.

Why it matters: The 30-day follow-up is the second-best moment (after the initial post-job window) to introduce an agreement to a first-time customer. They’ve had a month to see the system running well. A short message that connects the dots between “the system we just fixed” and “how to protect it going forward” is contextually relevant in a way that a cold outreach never is.

What you do: Configure the SMS template: “Hi [Name], one month since [job type], how’s the system running? Our maintenance plans cover two visits a year, priority scheduling, and 15% off repairs. Worth a look: [link]. Happy to answer questions too., [Business Name].”

What to check: After a test non-agreement workflow run, confirm this SMS fires (not 3A) and that the job type is correctly referenced in the message.

Stage 3: Seasonal Reminder (Day 180)

Node 4: Wait/Delay (150 days from Node 3)

What it does: Pauses the workflow for 150 days after the Day 30 follow-up, bringing the total elapsed time to approximately 180 days (6 months) from the original job.

Why it matters: Six months after a summer service, the customer is heading into heating season. Six months after a winter service, they’re heading into cooling season. The timing is not arbitrary, it’s calibrated to the moment when customers are naturally thinking about the system that was last serviced.

What you do: Set the Wait/Delay node to 150 days from the Node 3 timestamp.

Node 5: Send Email (seasonal tune-up reminder)

What it does: Sends a short email reminding the customer that seasonal system preparation is a standard practice, linking the previous service to the upcoming season, and providing a direct scheduling link for a tune-up appointment.

Why it matters: Email is the right channel for seasonal reminders because it can carry more context than SMS without being intrusive. A customer who gets this email while browsing their inbox on a weekend morning, sees your name, and reads that it’s time to get the system checked before the season hits has everything they need to book in one click.

What you do: Configure the email subject line: “[Name], your [system type] heading into [season].” Body: two paragraphs, the first connecting their previous service to the upcoming season, the second framing the seasonal tune-up as standard practice with a booking link and a brief note on what’s included. Keep it under 120 words. Include the technician’s name from the original visit if possible.

What to check: Confirm the email arrives in the correct inbox, that the system type and season are correctly populated, and that the booking link routes to the correct scheduling page.

Stage 4: Annual Renewal (Day 330)

Node 6: Wait/Delay (150 days from Node 5)

What it does: Pauses the workflow for another 150 days, bringing the total to approximately 330 days from the original job, 5 weeks before the one-year anniversary of the first service.

Why it matters: Reaching the customer 5 weeks before the anniversary gives them time to book the annual service, consider an agreement renewal, or schedule a conversation with your team before the anniversary date passes without contact.

Node 7: AI Generate (personalized annual summary and renewal prompt)

What it does: Reads the customer’s CRM service history from the past year and generates a short, personalized message: what was done at the original job, any follow-up services completed during the year, and a seasonal or annual service recommendation based on the system type and current service status.

Why it matters: A generic “it’s been a year” message is easy to ignore. A message that references the specific job from 11 months ago, mentions the capacitor that was replaced, and notes that the system will be 12 years old next spring is not generic. It signals that you know this customer’s system and that the annual reminder is not a mass email, it’s a specific recommendation for this unit.

What you do: Configure the AI Generate node with the following output structure: Opening line referencing the specific job from 11 months ago. One sentence on the system’s current profile (age, type, condition rating if logged). One recommendation (annual tune-up, replacement consult, or agreement renewal). Closing line with a scheduling link. Total: under 100 words.

What to check: Generate a test output for a customer with a logged service history. Confirm the correct job details appear and the recommendation matches the system’s condition rating from the last visit.

Node 8: Send Email (annual renewal prompt)

What it does: Sends the AI Generate output as an email to the customer, with a scheduling link and a soft agreement renewal prompt for non-agreement customers.

Why it matters: The annual touchpoint is the decision point for whether this customer becomes a multi-year account or a one-time visit. A timely, specific, personalized email at this moment does more to drive the renewal than any amount of general marketing.

What you do: Use the AI Generate output as the email body. Add a P.S. line for non-agreement customers: “P.S. If you’d like to lock in priority scheduling and two included visits for next year, reply to this email or click here to see the plan options.” Do not add this line to agreement-holder emails, they already have a plan.

What to check: Confirm the email sends with the AI-generated content and that the P.S. line appears only for non-agreement customers.

Node 9: Wait/Delay (7 days)

What it does: Pauses for 7 days after the annual renewal email to check for a response.

Node 10: AI Decision (has the customer responded or booked?)

What it does: Checks whether a new appointment has been created or an inbound reply received for this customer in the past 7 days. If yes, the workflow closes cleanly. If no, routes to Node 11.

Node 11: Create Task (CSR follow-up)

What it does: Creates a task for the CSR team to place a personal follow-up call, with the customer name, contact number, job history summary, and a note that three automated touchpoints have already been sent in the past year.

Why it matters: The personal call is the exception, not the rule, it only fires for customers who haven’t engaged with any of the automated touchpoints and haven’t rebooked on their own. By this point in the pipeline, the CSR making this call has full context: what was done at the original job, that the customer has received three messages in the past year, and exactly what conversation to have about renewal.

What you do: Configure the task with the customer’s full service history in the task body, CSR assigned, and due date set to the next business day. Task note: “[Name], last service [date], [job type]. Three automated touchpoints sent (Day 0, Day 30, Day 180). No engagement. Recommend personal call re: annual service or agreement.”

What to check: After a test workflow run with no engagement simulated, confirm the task appears with the correct history and is assigned to the correct CSR queue.

Complete pipeline summary:

ticket.created → Send SMS (Day 0, review) → Wait 30d → AI Decision (agreement?) → [Path A: Send SMS (next visit) | Path B: Send SMS (agreement offer)] → Wait 150d → Send Email (seasonal reminder) → Wait 150d → AI Generate (annual summary) → Send Email (renewal prompt) → Wait 7d → AI Decision (responded?) → Workflow end (if yes) | Create Task (if no)

Total workflow duration from first trigger to final node: 337 days. Total automated touchpoints: 4. Manual CSR involvement: only if the customer has not engaged after all 4 automated contacts.

What Changes After Six Months Running This Pipeline?

Your rebooking rate for first-year customers increases. The majority of HVAC churn happens in the first year, customers who had a fine first experience but were never contacted again before the next service need arose. Four timely, specific touchpoints over the course of the year close that gap for a significant share of those customers.

Agreement conversion from non-agreement first-timers becomes a predictable metric. The Day 30 message, the seasonal reminder, and the annual prompt all include a maintenance agreement reference for non-agreement customers. HVAC contractors who structure their agreements around flat rate pricing often see faster conversion, since the cost-per-visit is transparent from the first touchpoint. Over a full year, the percentage of first-time customers who convert to agreement holders becomes measurable, and improvable.

Your CSR team’s manual follow-up load drops significantly. The create-task node at the end of the pipeline only fires for customers who haven’t engaged with any automated touchpoint. That’s a much smaller list than the full past-customer follow-up list your CSR team is currently trying to manage manually.

Your brand stays present between service visits. The customer who calls the same HVAC contractor twice is one who remembered you when the next need arose. The pipeline keeps your name in front of them at the moments when they’re thinking about their system, not at random intervals, not on your schedule, but on theirs.

Why ServiceAgent Handles This for HVAC

Most HVAC marketing tools send generic emails on a schedule. ServiceAgent builds the pipeline from the job data. When a ticket closes, the workflow knows the customer’s name, the system type, the technician who did the work, and what was found. Every touchpoint in the repeat-customer sequence draws from that data, which is why the Day 0 review request mentions the technician by name, and the Day 330 annual prompt references the specific job from 11 months ago.

For HVAC operators, the seasonal service cycle means the timing of outreach matters as much as the message. A six-month trigger that fires in late September reaches an AC-service customer just as they’re thinking about heating season. A 330-day trigger reaches them just before the anniversary of their last service, before any competitor’s seasonal campaign runs.

The pipeline doesn’t require a marketing team or a campaign calendar. You build it once in the Workflow Builder, set the timing, and it runs for every customer from that point forward. Visit serviceagent.ai to see how to configure the full four-touchpoint sequence.

Frequently Asked Questions

How many follow-up messages is too many for HVAC customers?

The line between helpful and excessive is relevance and timing. Four messages over the course of a year, Day 0, Day 30, Day 180, Day 330, are not too many because each message is tied to a natural moment in the customer’s service cycle. A fifth or sixth message sent without a clear reason (system lifecycle event, seasonal transition, agreement renewal) starts to feel like a volume send rather than a relevant communication. The rule is one message per natural touchpoint, not one message per available calendar slot.

What if the customer’s equipment changes between the first service and the annual follow-up?

The AI Generate node at Day 330 reads from the customer’s CRM service history. If a second visit happened during the year and the technician logged updated equipment details (model confirmation, age update, condition rating), the annual message will reflect the current state of the system. This is one of the reasons keeping the CRM updated through the service-history workflows matters, the follow-up messages are only as specific as the records they draw from.

Can the pipeline pause if the customer calls or books before the next scheduled touchpoint?

Yes. Configure each Wait/Delay node to check for a recent booking before firing the next message. If the AI Decision node at Day 30 detects an upcoming appointment on the customer’s calendar, the pipeline can skip or defer the outbound message. This prevents sending a maintenance offer to a customer who already scheduled one independently, which is exactly the kind of message that makes customers opt out of future communications.

Is this workflow right for my size of HVAC operation?

HVAC contractors handling 20 or more inbound calls per day and running 10 or more trucks get the clearest return from this workflow. At that volume, the manual follow-up load across hundreds of past customers outpaces what any CSR team can handle consistently, and the cost of lost rebookings compounds fast. Smaller operations can run it with fewer nodes, the trigger logic stays the same, the output volume is lower.

Shambhav Reviews CRM and AI-calling software for service businesses. Tests every platform hands-on before recommending it. 24 min read · Last updated July 12, 2026. View profile

Read next