How to Win Back HVAC Customers with an SMS and Email Campaign

Every HVAC contractor has a segment of customers who used their business once or twice, had a fine experience, and then quietly disappeared. No complaint, no bad review, no cancellation call. They just stopped calling. At a $2M+ HVAC operation running 15 or more trucks and fielding 20 or more inbound calls per day, that segment can be hundreds of contacts sitting in Jobber or Housecall Pro with an active record and a last booking date from two seasons ago. The CRM shows them as active contacts even though they are functionally lapsed. They may have moved to a competitor, found a handyman, or simply not had an HVAC need since their last visit. Without a systematic process to flag and reach those contacts, you keep paying to acquire new customers while recoverable revenue sits untouched.

The challenge with lapsed customers is that they represent real value that has not been permanently lost. An HVAC customer who had two positive experiences with your operation has residual trust that a cold prospect does not have. Re-engaging them costs a fraction of what it costs to acquire a new customer, and a successful win-back produces a customer who is likely to maintain a longer relationship going forward because they have now chosen your business twice.

This article covers how to build an automated win-back sequence that activates the moment a customer is tagged as lapsed, sends a personalized SMS referencing their actual service history, follows up with an email if there is no response, and routes the outcome through a branching decision that either closes the win-back, assigns a personal call for high-value lapsed customers, or moves them to a long-term check-in queue. The whole system runs automatically and reaches every lapsed customer rather than the few the owner happened to think of.

TL;DR

  • lapsed HVAC customers, those with no booking in 12 or more months, are the most cost-effective segment to win back.
  • Most operators have no systematic win-back process: lapsed customers leave CRM records but never receive proactive outreach.
  • The win-back workflow triggers when a contact is tagged “Lapsed” and begins a two-touchpoint, two-channel sequence.
  • Day 1 SMS references the customer’s actual last service and system type to demonstrate that the business remembers them.
  • Day 6 email uses a different angle: seasonal relevance or price incentive, not a repeat of the SMS message.
  • High-value lapsed customers with two or more prior visits receive a personal CSR call task if both touchpoints go unanswered.
  • HVAC contractors handling 20 or more inbound calls per day get the clearest return from this workflow; at that volume, manual win-back efforts break down entirely.

How Does an Automated Multi-Channel Win-Back Sequence Work?

An automated multi-channel win-back sequence detects when a customer crosses a defined inactivity threshold and triggers personalized outreach across SMS and email, with branching logic routing each contact based on response. Every lapsed contact enters the sequence without manual initiation. In ServiceAgent, this runs through the Workflow Builder using AI Generate, Send SMS, and AI Decision nodes.

Why Lapsed Customers Are Worth More Than Cold Prospects

Acquiring a new HVAC customer through advertising costs between $150 and $400 in most local markets, depending on channel and competition. Winning back a lapsed customer who has had prior positive experiences with your operation costs the time to send two targeted messages and make one personal call. The economics are dramatically different, but the customer base most operators have stopped reaching out to is exactly this lapsed segment.

Most HVAC contractors handle lapsed customer outreach manually, if they handle it at all. A CSR might notice a familiar name during a slow week and fire off a quick text, or the owner pulls a Jobber report at year-end and identifies a handful of names to call. There is no consistent trigger, no personalized message referencing service history, and no follow-up if the first outreach goes unanswered. Those gaps are not a motivation problem. They are a volume problem: with 20 or more inbound calls per day, no one has the margin to run a disciplined win-back program manually.

The reason lapsed customer re-engagement is so consistently underinvested in HVAC is that there is no natural forcing function to do it. New customers require active prospecting. Active customers require service delivery and follow-up. Lapsed customers sit quietly in the CRM and generate no urgency because they are not complaining, not canceling, and not asking for anything. Out of sight, out of mind.

The research on lapsed customer win-back in service businesses consistently shows that somewhere between 20 and 40 percent of lapsed customers who receive a personalized outreach referencing their specific service history will respond positively. That number drops significantly when the outreach is generic. The personalization variable is the single biggest driver of win-back success, which is exactly why most operator win-back attempts underperform: they send a generic “we miss you” message that gives the customer no reason to feel specifically recognized.

What Makes a Win-Back Message Work

The first message in a win-back sequence has to do something that generic promotions almost never do: prove to the customer that the business actually knows who they are. An HVAC customer who had their furnace replaced two winters ago should receive a message that references the furnace, not a message that sounds like it went to a thousand people at once. “Hi [Name], your furnace installation was two years ago this November. Here is a good time to make sure everything is running efficiently before this heating season” is specific, relevant, and demonstrates that the business has a record of the relationship.

The second message, delivered via a different channel after the first goes unanswered, needs a different angle. Repeating the same message through a different channel provides no new reason to respond. If the first message focused on service continuity, the second should focus on a concrete offer: a price incentive tied to the current season, or a specific efficiency concern relevant to the system type and time of year. The channel switch from SMS to email also allows for a longer explanation that can address objections the customer may have had that were not addressable in a 160-character text.

The personal call, reserved for high-value lapsed customers who have not responded to either automated touchpoint, is the highest-investment step and should not be wasted on low-engagement contacts. A customer with two or more prior visits who has not responded to a personalized SMS and a targeted email is either very busy or genuinely uncertain. A personal call from a CSR who references the service history and asks if there is anything the team can help with, without a hard sell, can convert this customer where automated outreach could not.

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. For win-back campaigns, the trigger is a contact being tagged as “Lapsed” in the CRM, either manually by the CSR team during a monthly review or automatically by a separate workflow that monitors booking recency. The win-back workflow fires immediately when that tag is applied, without waiting for a scheduled campaign date, so every lapsed customer enters the sequence the moment they are identified.

Trigger What fires What it does
contact.tagged “Lapsed” AI Generate, Send SMS (Day 1), Wait 5 Days, AI Decision, then Path A or Path B Sends a personalized SMS on Day 1, checks for a response or booking after 5 days, then routes to a follow-up email and, if needed, a personal CSR call task for high-value contacts.

What Does the Win-Back Workflow Look Like?

Win-Back Initiation

Trigger: contact.tagged “Lapsed” (12+ months no booking)

What it does: Fires when the Lapsed tag is applied to a contact record, initiating the win-back sequence immediately regardless of what day or time it was applied.

Why it matters: A trigger based on contact tagging rather than a scheduled date means win-back outreach happens on an individual contact timeline, not on a mass campaign cycle. Each customer enters the sequence when they are identified as lapsed, not when a monthly batch decides to run. This approach is more responsive and avoids clustering all win-back messages on a single send date that can overwhelm a CSR team with responses.

What you do: In the Workflow Builder, add a trigger set to contact.tagged with the tag value “Lapsed.” Ensure your team has a defined process for applying the Lapsed tag: either a monthly CRM audit of contacts with no booking in 12 or more months, or an automated rule in ServiceAgent that applies the tag when last booking date exceeds 12 months. Both approaches work with this trigger.

What to check: Apply the Lapsed tag to a test contact and verify the workflow fires within one minute of tag application. Check that the trigger does not fire on contacts who already have the Lapsed tag from a prior cycle that was not removed. Set a condition to exclude contacts who currently have an active workflow instance in progress.

Node 1: AI Generate

What it does: Creates a personalized win-back SMS for the specific contact, referencing their last service type, the system type if available in the CRM (e.g., central AC unit, gas furnace, heat pump), the approximate service date, and a soft offer tied to the current season or the upcoming seasonal need.

Why it matters: The first touchpoint in a win-back sequence is the highest-leverage message in the entire workflow. Personalization at this stage determines whether the contact experiences the message as specific and relevant or generic and forgettable. The AI Generate node has access to all CRM fields on the contact record, which means it can reference details that no manual mass campaign would include at scale.

What you do: Configure AI Generate to pull the following fields from the CRM: Contact Name, Last Service Type, Last Service Date (month and year approximation only, not exact date), System Type if available, and current season context from the trigger date. The prompt should instruct the AI to open with the contact’s name, reference the last service with the system type if available, frame the win-back as a natural next step based on time elapsed, and include a single clear offer (discounted service call or tune-up at a named flat rate price). Keep the output to 140 to 155 characters to ensure it renders as a single SMS.

What to check: Generate 10 sample messages for test contacts with varying service histories. Verify that the system type field is being correctly pulled and that messages for contacts without system type data still read naturally without a placeholder error. Also verify that the date reference sounds natural (“around November 2023,” not “11/2023/00:00:00”).

Node 2: Send SMS (Day 1)

What it does: Delivers the AI-generated personalized win-back SMS to the lapsed contact on Day 1 of the sequence.

Why it matters: SMS is the correct opening channel for win-back because it is immediate, personal, and likely to be seen. Email open rates for lapsed customer win-back run significantly lower than SMS read rates. Getting the first touchpoint into the customer’s phone where it registers as a direct message rather than promotional email is worth the channel prioritization.

What you do: Connect Send SMS to the AI Generate output. Set the delivery time to business hours only: Monday to Friday 9:00 AM to 5:00 PM, Saturday 9:00 AM to 12:00 PM. If the workflow trigger fires outside business hours, the send should queue to the next business hour slot. Include compliance opt-out language.

What to check: Confirm the scheduling logic correctly queues weekend or after-hours triggers to the next business hour delivery window. Send a test message to verify the personalized fields render correctly in the actual SMS.

Node 3: Wait 5 Days

What it does: Holds the workflow for 5 days after the Day 1 SMS before checking whether the contact has responded or booked.

Why it matters: Five days is enough time for a lapsed customer who is genuinely interested to respond without an artificial sense of urgency. It also positions the Day 6 email to arrive while the SMS is still within short-term memory, rather than feeling like a disconnected message from a different campaign.

What you do: Add a Wait node set to 5 days. No additional configuration required.

What to check: Verify the wait is 5 days from SMS delivery, not 5 days from workflow trigger time.

Node 4: AI Decision

What it does: Checks whether the lapsed contact has responded to the SMS or booked an appointment in the 5 days since delivery. Routes responders to Path A (win-back success) and non-responders to Path B (email follow-up).

Why it matters: The decision at this stage ensures that contacts who have already re-engaged do not receive the follow-up email, which would undermine the sense that the business is communicating thoughtfully rather than running a mass sequence.

What you do: Configure AI Decision to check for: an SMS reply from the contact in the past 5 days, or a new appointment booking for the contact in the past 5 days. If either condition is true, route to Path A. If neither is true, route to Path B.

What to check: Test with both a contact who replied to the SMS and one who booked an appointment. Verify both correctly route to Path A. Test with a contact who took no action and verify they route to Path B.

Path A: Responded or Booked

Node 5A: Update CRM

What it does: Removes the Lapsed tag, applies a “Re-engaged” or “Win-Back Success” tag to the contact record, and closes the win-back workflow instance for this contact.

Why it matters: Removing the Lapsed tag prevents the contact from triggering the win-back workflow again in the future before the tag is manually reapplied after another 12-month absence. Applying the Win-Back Success tag allows you to analyze which contacts were successfully won back and track their subsequent booking behavior over the next 12 months.

What you do: Configure Update CRM to remove the Lapsed tag and add the Win-Back Success tag. If the contact booked but did not remove the Lapsed tag prior to the booking, the workflow should still apply the update on the next booking confirmation event.

What to check: Verify the Lapsed tag is fully removed from re-engaged contacts, not just overwritten. Check that the Win-Back Success tag appears on the contact record and is visible to the CSR team.

Path A workflow summary:

contact.tagged Lapsed → AI Generate → Send SMS (Day 1) → Wait 5 days → AI Decision (responded/booked) → Update CRM (remove Lapsed, tag Win-Back Success)

Path B: No Response (Email Follow-Up)

Node 5B: AI Generate

What it does: Creates a follow-up email with a different angle from the Day 1 SMS: either a seasonal relevance frame (why this specific season is a relevant time for their system type) or a price incentive frame (a named discount tied to a clear booking deadline).

Why it matters: The email must bring a new reason to act, not a repeat of the SMS message. A contact who received a service history reference in the SMS and did not respond may be more receptive to a concrete financial reason or a specific seasonal concern relevant to their system. Changing the angle is what makes the second touchpoint feel like additional information, not badgering.

What you do: Configure AI Generate for the email variant, pulling the same CRM fields as the SMS generation but with a different prompt framing. If the current date is within 60 days of peak cooling season, use a seasonal urgency frame: “Your heat pump has not been serviced in [time period]. Before temperatures climb, here is why it matters.” If the current date is off-peak, use a price incentive frame: “This [month] only, we’re offering [dollar amount] off a system check for customers who have not visited us in over a year.” Email length: 150 to 200 words. Subject line: “Your [system type] check before [season] (and a discount for you).”

What to check: Generate 5 sample emails for test contacts in different seasonal contexts. Verify the seasonal vs. price framing is being applied correctly based on the current date. Also check that the subject line is under 60 characters for mobile rendering.

Node 6B: Send Email (Day 6)

What it does: Delivers the AI-generated win-back email to the non-responding lapsed contact on Day 6 of the sequence.

Why it matters: Email allows the win-back message to be longer, more detailed, and more visually formatted than SMS. For lapsed customers who may be considering several HVAC options, a professional email with clear service information, a named technician or team member, and a direct booking link can convert where a short text could not.

What you do: Connect Send Email to the AI Generate output. Include the business’s logo or a simple text header with the business name. Add a P.S. line referencing the personal call option: “If it is easier, you can also just call us directly at [phone number] and we will get you sorted in two minutes.” Set send time to 10:00 AM local time for optimal open rate.

What to check: Send a test email and review rendering in Gmail, Apple Mail, and one mobile client. Verify the subject line, preview text, and body all render correctly. Confirm the booking link and phone number are accurate.

Node 7B: Wait 7 Days

What it does: Holds the workflow for 7 days after the email send before the final routing decision.

Why it matters: Seven days gives email responders adequate time to act on the offer. Email win-back responses are slower than SMS responses, and some contacts will read the email and take action days after receipt.

What you do: Add a Wait node set to 7 days from email delivery.

What to check: Verify the 7-day period calculates correctly. Confirm this Wait node is distinct from the 5-day wait after the SMS.

Node 8B: AI Decision

What it does: Final routing check after the email follow-up wait period. Contacts who responded or booked go to close. High-value non-responders (2 or more prior visits) route to Create Task. Single-visit non-responders route to a “Long Lapse” tag and a quarterly check-in cadence.

Why it matters: The final routing is a resource allocation decision. Not every non-responder warrants a personal call. Customers with two or more prior visits represent significantly more lifetime value than single-visit customers, and the personal touch of a CSR call is reserved for the segment most likely to convert and most worth converting.

What you do: Configure AI Decision to check for booking or reply in the past 7 days. For non-responders, add a conditional branch: if Visit Count is 2 or more, route to Create Task. If Visit Count is 1, route to Update CRM with the “Long Lapse” tag and add to a quarterly check-in list.

What to check: Verify the Visit Count condition reads the field correctly. Confirm that contacts with Visit Count of exactly 2 route to Create Task, not to the Long Lapse path.

Node 9B: Create Task (High-Value Lapsed, 2+ Visits)

What it does: Creates a personal CSR call task for multi-visit contacts who did not respond to either automated win-back touchpoint.

Why it matters: A customer with two or more prior service visits who has gone 12 or more months without booking is worth a personal conversation. The CSR call, handled correctly, is not a sales pitch: it is a check-in from a business that remembers the customer. That distinction, a service call rather than a sales call, is often what converts a long-lapsed customer who has been passively avoiding the outreach.

What you do: Configure Create Task with the following text: “Win-back personal call: [contact name] has not booked in 12+ months. [Visit count] prior visits, last service: [last service type] in [last service date]. Received win-back SMS (Day 1) and email (Day 6) with no response. Personal call script: check in without a hard sell, ask how the system has been running, mention the current seasonal offer and invite them to book at a priority rate. If they mention they are using another provider, thank them and leave the door open for the future. Do not reference the automated campaign.” Assign to the CSR. Priority: Medium. Due within 5 business days.

What to check: Verify the task body includes the contact’s service history details, not blank field placeholders. Confirm the due date calculates correctly from task creation, not from the workflow initiation date.

Node 10B: Update CRM (Long Lapse)

What it does: Applies the “Long Lapse” tag to single-visit non-responding contacts and adds them to a quarterly check-in list for low-frequency automated outreach on a 90-day cycle.

Why it matters: Writing off single-visit non-responders entirely is leaving potential future revenue on the table. A quarterly check-in message, a short non-promotional touchpoint referencing seasonal relevance, maintains a minimal presence with these contacts at very low cost. Some will convert months or years down the line when they have an HVAC need and your business appears in their phone history.

What you do: Configure Update CRM to apply the “Long Lapse” tag and set a “Next Check-in Date” field to 90 days from the current date. This field can be used by a separate scheduled workflow to trigger the quarterly check-in sequence without manual tracking.

What to check: Confirm the “Long Lapse” tag is distinct from the “Lapsed” tag so that the win-back workflow does not re-trigger for these contacts unless the Long Lapse tag is manually reviewed and replaced with Lapsed after a new qualifying period.

Path B workflow summary:

AI Decision (no response) → AI Generate (email) → Send Email (Day 6) → Wait 7 days → AI Decision → Create Task (2+ visits) | Update CRM Long Lapse (1 visit)

Full win-back workflow summary:

contact.tagged Lapsed → AI Generate → Send SMS (Day 1) → Wait 5 days → AI Decision → [Path A: Update CRM Win-Back Success] | [Path B: AI Generate → Send Email (Day 6) → Wait 7 days → AI Decision → Create Task or Update CRM Long Lapse]

What Changes After Running Win-Back Campaigns for Six Months?

Six months of continuous win-back automation produces a measurable shift in the composition of your active customer base. Contacts that were quietly lapsing are now being caught and re-engaged at a consistent rate, which means the percentage of your CRM that is genuinely active grows over time rather than slowly eroding as new customers come in and old ones silently fall off. HVAC operators running this workflow see up to 20 percent higher customer retention, the result of consistent follow-up that reaches every lapsed contact rather than the handful a busy owner remembered to call.

The CSR call task outcomes are particularly valuable to review at the six-month mark. Contacts who converted via personal call after two automated touchpoints went unanswered often reveal something useful: they may have had a pricing concern, a scheduling frustration from a prior visit, or a competitor offer that felt compelling. Those insights, gathered from a handful of personal calls, can improve the automated message framing for the next campaign cycle.

The “Long Lapse” contact segment, managed through quarterly check-ins, occasionally produces surprise re-engagements 12 to 18 months after the initial win-back attempt. These are contacts who were not ready to re-engage during the automated sequence but came back when they finally had an HVAC need and remembered receiving outreach from your business. Low-frequency, non-promotional check-ins maintain that brand memory at minimal cost.

Why ServiceAgent Handles This for HVAC

HVAC customer relationships are not as high-frequency as subscription services. An HVAC contractor might interact with a maintenance agreement customer twice a year and a single-service customer once every two to three years. That low contact frequency means that customers who drift do not stand out immediately. The win-back workflow addresses this by operating at the contact level rather than the calendar level, firing automatically for every customer who hits the 12-month lapsed threshold rather than waiting for a quarterly campaign review.

The AI Generate personalization is the component that makes this workflow viable at scale. Manually writing personalized win-back messages for 50 to 200 lapsed contacts per quarter would take more CSR time than most HVAC operations can spare, especially operations where front-desk turnover means institutional knowledge about past customers walks out the door with each departing employee. The AI Generate node produces a personalized message for each contact in seconds, incorporating the actual service history that makes the message feel specific rather than templated.

For HVAC specifically, customer lifetime value makes win-back economics favorable. An HVAC customer who books a system replacement, a maintenance agreement, and annual tune-ups over five years is worth between five and fifteen thousand dollars in total revenue depending on the market. Re-engaging even one in four lapsed customers who has that profile more than justifies the automation investment.

Frequently Asked Questions

How do I determine which contacts should receive the Lapsed tag?

Set a CRM rule or a separate scheduled workflow that checks all contacts monthly and applies the Lapsed tag to any contact whose Last Booking Date field is more than 365 days ago and who does not have an active maintenance agreement. Run this check on the first of each month to ensure the win-back workflow fires consistently.

What if a lapsed customer responds to the SMS but is not ready to book yet?

Any SMS reply triggers the AI Decision routing to Path A, which closes the automated sequence for that contact. The CSR should receive an alert of the reply and handle the conversation manually. Do not leave an SMS reply unattended: a lapsed customer who initiates a response is in a re-engagement moment that requires a human reply within the hour.

Can the win-back workflow also target customers who cancelled a maintenance agreement?

Yes. Add an additional trigger for contact.tagged “Agreement Cancelled” or create a separate workflow for that segment with slightly different message framing that acknowledges the agreement specifically. Maintenance agreement lapsed customers often need to understand what they are missing, not just be reminded of the business relationship.

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, manual win-back efforts break down entirely: lapsed contacts accumulate faster than any CSR can track them, and the booking conversion rate on sporadic outreach is too low to make a dent in the lapsed segment. Smaller operations can run it with fewer nodes, the trigger logic stays the same and the output volume is lower, but the personalization benefit applies regardless of fleet size.

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

Read next