March and October are the months HVAC operators dread looking at the calendar. Spring has not quite arrived, summer is still weeks away, and the phone rings maybe a quarter as often as it will in July. For an HVAC contractor running 15 to 20 trucks, the math is unforgiving: payroll is the same, the truck payment is the same, and the slow season is not a surprise but it still feels like one every year because most operations have not built a systematic way to generate demand during it.
The instinct is to run a promotion. A discounted tune-up, a referral bonus, a package deal on parts and labor. The problem is not the promotion itself. The problem is execution. The customer data is already sitting in Jobber or Housecall Pro, but pulling the right segment, writing a message that references each customer’s actual service history, scheduling the SMS, and tracking follow-up all require time that front-desk staff and owners rarely have during a week already compressed by slower call volume. By the time it is all done, the owner has spent most of a day on a campaign that might have been better spent doing three invoiced jobs, and the operators who skip it entirely leave hundreds of dormant customer relationships untouched through the shoulder season.
This article walks through how to build a slow-season promotion workflow that fires automatically on the first day of each shoulder season, identifies exactly which customers have not booked in six or more months, generates a personalized outreach message referencing their last service, and follows up with non-responders without any manual involvement. You run promotions every slow season without having to remember to run them.
TL;DR
- The HVAC slow season falls in the shoulder periods: roughly March and October in most markets.
- The best slow-season promotion targets customers who have not booked in 6 or more months and have no active agreement.
- A scheduled workflow fires at the start of each shoulder season, segments the inactive contact list, and sends personalized outreach.
- Messages reference the customer’s last service by type and approximate date, which dramatically increases response rate over generic blasts.
- Non-responders receive a follow-up email five days later with a different offer framing or urgency element.
- Customers with two or more prior visits who still have not booked receive a personal CSR call task.
How Does an Automated Slow-Season Outreach Sequence Work?
An automated slow-season outreach sequence segments lapsed customers, generates personalized offer messages from their service history, and delivers them across SMS and email in a timed series. A scheduled trigger fires at the shoulder season start, filters inactive contacts, and routes non-responders through a follow-up. ServiceAgent builds this as a repeating workflow, configured once.
Why the Slow Season Is Actually the Right Time to Reach Out
There is a common misconception that slow-season promotions only work if the promotion is aggressive enough to manufacture urgency where none exists. This is not quite right. The slow season does not mean customers do not have HVAC needs. It means their needs are not urgent yet. A homeowner whose system ran hard all summer and has not had a tune-up since the previous spring has a legitimate reason to book maintenance in March or October. They just have not felt the pressure to act.
Right now, most HVAC contractors handle slow-season outreach manually: a CSR pulls a list from Jobber filtered by last invoice date, exports it to a spreadsheet, and sends a batch message through whatever SMS tool is available. There is no personalization, the filtering misses anyone whose last job was logged inconsistently, and follow-up depends entirely on whether the CSR remembers to check back. That process takes two to three hours to run even for a 200-contact list, and it runs differently every time depending on who is in the office that day.
A slow-season promotion is not manufacturing fake urgency. It is creating the prompting event that causes a customer to act on a need they already have but have not prioritized. The framing matters enormously here. “Book now before our schedule fills” in March is not credible because customers know your schedule is not full. “Your system ran hard last summer. Before the next season hits, here is a good time to get ahead of any issues” is accurate and useful, and it frames the promotion as a service to the customer rather than a revenue generation exercise for the business.
The customers most likely to respond to slow-season outreach are those who have already used your business and had a positive experience. First-time emergency customers who came to you under stress have a weaker relationship with your brand. Repeat customers who have booked maintenance or repairs in prior years have established trust. Targeting the slow-season campaign at the inactive subset of your repeat customer base, rather than your entire contact list, is what separates a high-performing slow-season promotion from a generic mass blast.
What Makes a Slow-Season Promotion Actually Convert
The single biggest variable in slow-season promotion performance is message specificity. A generic message, “We’re offering 20% off tune-ups this March,” performs significantly worse than a message that references the customer’s actual history: “Your last AC tune-up was in May 2024. Before this summer, here’s a good time for a system check at a discounted rate.” The personalized version outperforms the generic version in home services because it signals that the business knows who the customer is and values the specific relationship.
The second variable is offer clarity. Slow-season promotions fail when the offer is vague (“Ask about our spring specials”) or buried behind multiple steps (“Call us to learn about our seasonal pricing”). A specific offer with a clear price point, a defined booking window, and a direct booking link or phone number removes all friction. The customer should be able to read the message and book in under two minutes without needing to call for details.
The third variable is appropriate follow-up. A customer who received your SMS promotion but did not respond is not necessarily uninterested. They may have been driving, at work, or planning to respond later and forgotten. A single follow-up via a different channel, email in this case, with a different message angle, captures a meaningful portion of those delayed responders. The key is one follow-up, not three. Two touchpoints across two channels is enough for a shoulder-season promotion. More than that moves from helpful reminder to pestering.
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 slow-season promotions, the trigger is a scheduled date at the start of each shoulder season: March 1 for the spring shoulder and October 1 for the fall shoulder. The workflow filters your contact list to inactive customers, generates personalized messages from their service history, sends the promotion, and routes non-responders through a follow-up sequence. You configure it once and it runs automatically at the start of every shoulder season.
| Trigger | What fires | What it does |
|---|---|---|
| Scheduled (March 1 / October 1) | AI Analyze, AI Generate, Send SMS, Wait 4 Days, AI Decision | Segments inactive contacts by booking history and agreement status, sends a personalized SMS promotion, and routes non-responders through an email follow-up and optional CSR call task. |
What Does the Slow-Season Promotion Workflow Look Like?
Promotion Launch
Trigger: scheduled (March 1 for spring / October 1 for fall)
What it does: Fires on the first day of each shoulder season and initiates the slow-season outreach sequence for all qualifying inactive contacts.
Why it matters: March 1st is early enough in the shoulder season to capture bookings before the spring marketing noise picks up, while being close enough to cooling season to make the tune-up framing feel timely. October 1st similarly falls before the heating season rush, giving customers time to book in a non-urgent window. Automating the trigger means the campaign runs whether or not the owner thought about it that week.
What you do: Create two workflow instances: one with a trigger set to March 1 at 8:00 AM and one set to October 1 at 8:00 AM. Both can use the same node structure but with season-appropriate message content in the AI Generate node. Set both triggers to repeat annually.
What to check: Run a test trigger execution one week before the first live date to confirm the workflow initiates correctly. Verify the contact filtering logic in the next node is pulling the right audience before going live.
Node 1: AI Analyze
What it does: Filters the full contact list to identify qualifying targets: contacts with no booking in the past six months, no active maintenance agreement, and at least one prior completed job on record.
Why it matters: Sending a slow-season promotion to maintenance agreement holders is redundant and potentially confusing. Sending it to contacts who have never used your business before is a cold outreach campaign, not a re-engagement campaign, and requires different messaging and a different conversion expectation. The filter isolates the segment most likely to respond: customers with prior experience who have simply lapsed into inactivity.
What you do: Configure AI Analyze with three filter conditions: Last Booking Date is more than 180 days ago, Agreement Status is not Active, and Visit Count is greater than or equal to 1. Output the filtered list with each contact’s last service type, last service date, and visit count for use in the AI Generate node. Also flag contacts with Visit Count of 2 or more separately for the downstream call task routing.
What to check: After the first test run, review the contact count in the filtered list. If the list includes contacts with active agreements, check the Agreement Status filter condition. If the list includes contacts with no prior visits, check the Visit Count filter. Both errors would result in sending the wrong message to the wrong audience.
Node 2: AI Generate
What it does: Creates a personalized SMS promotion message for each contact referencing their last service type and an approximate service date, framing the slow-season discount as a proactive next step based on their specific system history.
Why it matters: Personalization at this level, referencing the actual service type the customer last had done, is what differentiates a professional HVAC contractor from a mass-marketing blast. It demonstrates that your business has a record of the customer’s system and is proactively monitoring their service timeline. That impression, even from an automated message, builds trust and dramatically improves response rate.
What you do: Configure AI Generate to produce one message per contact, pulling the Last Service Type and Last Service Date fields from the AI Analyze output. The message template should follow this structure: [Customer name], your last [service type] was in [approximate month and year]. Before [upcoming season] hits, here is a good time for a [service type] check at [discount, e.g., $30 off]. [Booking link]. Slots fill fast in [month]. Keep the total message under 160 characters including the booking link.
What to check: Sample 10 generated messages and verify that service type and date references are accurate. Check that no message contains a field placeholder like “[service type]” that failed to populate. Also verify the discount amount is consistent across all messages unless you have configured segment-specific pricing.
Node 3: Send SMS
What it does: Delivers the personalized slow-season promotion message to each qualifying contact via SMS.
Why it matters: SMS is the right opening channel for slow-season promotions because it is immediate and personal. Email has a lower open rate for promotional content. A well-crafted personalized SMS reads like a message from a business that knows the customer, not a mass promotional blast, which is exactly the right tone for a re-engagement campaign.
What you do: Connect the Send SMS node to the AI Generate output. Set the send time to 9:00 AM local time to avoid early or late delivery. Confirm opt-out compliance language is included, typically as a short footer (“Reply STOP to opt out”). Do not include promotional language that could trigger spam filters, such as “FREE,” “ACT NOW,” or “$$$.”
What to check: Send a test message to your own phone or a team member’s phone before the live campaign. Verify the personalized fields render correctly in the actual SMS received. Check that the booking link is functional and directs to the correct service type and booking calendar.
Node 4: Wait 4 Days
What it does: Holds the workflow for 96 hours after SMS delivery before checking response status.
Why it matters: Four days is the right wait period for a slow-season promotion. It is long enough to allow contacts who received the message during a busy moment to circle back and respond. It is short enough that a follow-up email can still arrive while the initial message is relatively fresh.
What you do: Add a Wait node set to 96 hours. No additional configuration required.
What to check: Verify the wait countdown starts from SMS delivery, not workflow trigger time. If there is a delay between workflow initiation and SMS delivery, the actual wait may be slightly less than 96 hours for the last contacts in the send queue.
Node 5: AI Decision
What it does: Checks whether each contact has booked an appointment or responded to the SMS in the 4 days since delivery. Routes bookers to Path A (close) and non-responders to Path B (email follow-up).
Why it matters: The decision node prevents contacts who already booked from receiving a follow-up email with an urgency frame, which would be confusing and unprofessional. Routing correctly at this step keeps the experience appropriate for each contact’s status.
What you do: Configure AI Decision to check for a new appointment booking or an SMS reply from the contact within the past 4 days. If either condition is met, route to Path A. If neither is met, route to Path B.
What to check: Test the decision node with both a contact who booked and one who did not. Verify Path A fires correctly for the booker and Path B fires correctly for the non-responder.
Path A: Booked
What to do: Close the workflow for this contact. No further automated messages are sent.
Send SMS → Wait 4 days → AI Decision (booked) → close workflow
Path B: No Response (Email Follow-Up)
Node 6B: Send Email
What it does: Sends a follow-up email to non-responders with a different offer framing than the SMS: either a different price angle (emphasizing savings over time from preventative maintenance) or an availability urgency angle (noting that spring booking slots are filling earlier than usual this year).
Why it matters: Email allows for more explanation than a 160-character SMS. A customer who did not act on the SMS offer may respond to a longer explanation of why now is the right time, supported by a specific example of what a missed tune-up can cost in emergency repairs. The different channel and longer format gives the promotion a second chance with a different hook.
What you do: Configure Send Email with a subject line referencing the season and the customer’s service history (“Your [system type] check before [season]”). The body should open with a reference to the SMS (do not pretend the SMS did not happen), then pivot to the educational angle: “Here is why pre-season maintenance saves most homeowners between $200 and $800 in emergency repair costs.” Close with the booking link and offer terms. Length: 180 to 220 words.
What to check: Test the email with both a desktop and mobile preview. Confirm the subject line renders cleanly on mobile, where subject lines over 40 characters are truncated. Verify the booking link in the email points to the same calendar as the SMS link.
Node 7B: Wait 5 Days
What it does: Holds the workflow for 5 days after the email send before the final response check.
What you do: Add a Wait node set to 5 days.
What to check: Confirm the wait period calculates correctly from email delivery time.
Node 8B: AI Decision
What it does: Checks whether Path B contacts have responded or booked after the email follow-up. Routes to close for responders, and to two outcomes for non-responders: Create Task for contacts with 2 or more prior visits, and workflow archive for contacts with a single prior visit.
Why it matters: Not every non-responder deserves the same final step. A contact who has had three service visits with your company but has not responded to two promotion touchpoints is worth a personal call. A contact who came once for an emergency repair two years ago and has not engaged since is not worth that same investment of CSR time.
What you do: Configure AI Decision with the same booking and reply checks as Node 5. For non-responders, add a conditional split based on the Visit Count field from the AI Analyze output: contacts with 2 or more visits route to Create Task, contacts with 1 visit route to an archive tag and workflow close.
What to check: Verify the Visit Count split is reading the correct field from the AI Analyze output. Pull up three contacts from each outcome after the first live run to confirm they were routed correctly.
Node 9B: Create Task (Warm Leads, 2+ Visits)
What it does: Creates a personal CSR call task for multi-visit contacts who did not respond to the SMS or email promotion, with their service history and both prior touchpoints noted in the task.
Why it matters: A customer who has been to your business two or more times and has not called recently is not a lost customer. They are a quiet one. A personal call from someone who references their service history and asks if there is anything they can help with, without a hard sell, often reactivates these customers better than any automated promotion.
What you do: Configure Create Task with the text: “Personal call: [contact name] received slow-season SMS and email promotions with no response. [Visit count] prior visits, last service: [last service type] in [last service date]. Call to check in, offer slow-season rate, and hold a slot if they are interested. No aggressive sales pitch.” Assign to the CSR. Due within 3 business days. Priority: Medium.
What to check: Verify the task includes the contact’s visit count, last service type, and last service date populated from the CRM data. If these fields appear as blanks or placeholders, check the data passing from the AI Analyze output to the Create Task node.
Full slow-season workflow summary:
scheduled → AI Analyze → AI Generate → Send SMS → Wait 4 days → AI Decision → [Path A: close] | [Path B: Send Email → Wait 5 days → AI Decision → Create Task (2+ visits) | archive (1 visit)]
What Changes After Running Slow-Season Promotions for Two Cycles?
The most immediate change is that the slow season stops being unpredictable. After the first automated promotion cycle, you will have concrete data on response rate by segment, which message angle produced higher conversion, and how many bookings came from the SMS versus the email follow-up. That data directly informs how you configure the next cycle: which offer to lead with, which follow-up angle works best, and whether to extend the wait periods.
Booking distribution in the shoulder months becomes more stable over time. Operators who run this workflow for two full years typically see their March and October calendars filling to 40 to 60 percent of peak-season capacity, compared to 15 to 25 percent before automated promotions. HVAC contractors running automated confirmation and reminder sequences alongside this workflow see 77% fewer no-shows, the result of contacts receiving timely follow-up after booking rather than a single confirmation they forget about. That improvement has a direct effect on dispatch board stability and technician retention: slower seasons with more consistent bookings mean fewer hours of unpaid downtime and fewer techs looking for supplemental work during the slow period.
The CRM data quality also improves as a side effect of running the promotion. Every contact who responds to the promotion, books a job, or replies to the CSR call gets updated activity data that refines their segment placement for the next campaign cycle. The system becomes more accurate over time simply by running.
Why ServiceAgent Handles This for HVAC
Slow-season promotions fail most often not because the offer is wrong but because the execution is late, incomplete, or inconsistent. An owner who intends to run a March promotion but does not get to it until March 20th has already lost three weeks of the best booking window. An operator who sends a generic blast without segmenting out agreement holders creates confusion and potential customer service issues. ServiceAgent’s Workflow Builder removes both failure modes by automating the timing and the segmentation.
The personalization capability of the AI Generate node is what makes the workflow worth building rather than using a generic SMS blast tool. Referencing a customer’s actual last service type and approximate service date in a slow-season promotion is the kind of specific detail that transforms the message from promotional to personal. Most HVAC operators know this kind of outreach works when done well but cannot do it at scale manually. The workflow makes it automatic at any contact list size.
For HVAC specifically, the shoulder seasons represent genuine revenue opportunity that most operators leave on the table. Pre-season tune-ups completed in March and October are not just revenue for those months: they reduce the emergency call load in peak season by ensuring that customer’s system is serviced and functioning before the stress of extreme temperatures. A well-run slow-season promotion is simultaneously a revenue tactic and a service quality strategy.
Frequently Asked Questions
What discount level works best for slow-season HVAC tune-up promotions?
In most markets, a $25 to $50 discount off a standard tune-up rate generates strong response without significantly eroding margin. If you are running flat rate pricing, anchor the promotion discount to the flat rate line item so the savings feel concrete to the customer. The personalized message framing is often more influential on conversion than the discount size. Avoid discounts above 30 percent of the standard rate because they can trigger price anchoring issues when customers return at full price.
Should I send slow-season promotions to customers who opted out of agreements after previously holding one?
Yes, but with a modified message. Former maintenance agreement holders who opted out are worth targeting with a message that references their prior agreement and offers a trial reactivation. They already understand the value of covered maintenance. Segment them separately with AI Analyze using an “Agreement Status = Lapsed” filter.
How do I know if the slow-season campaign is working if response rates are lower than peak-season campaigns?
Response rates for slow-season outreach are typically lower than in-season campaigns, often 8 to 15 percent versus 15 to 25 percent, simply because the urgency is lower. Evaluate success by comparing shoulder-season job volume against the same period in prior years before the automation was running, not against peak-season campaign benchmarks.
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 slow-season outreach either gets skipped entirely or goes out as a generic blast because no one has time to segment and personalize across hundreds of contacts. Smaller operations can run it with fewer nodes, the trigger logic stays the same, the output volume is lower.