Spending more on leads is not the same as converting more leads. For most HVAC operators, the problem isn’t that they need more calls coming in. It’s that the calls already coming in aren’t making it to the calendar.
TL;DR
- HVAC leads don’t disappear randomly. They escape at five predictable moments: unanswered calls, no post-call confirmation, no follow-up for leads that didn’t book, booked appointments with no dispatch task, and contacts that never entered the CRM correctly.
- Each gap has a matching fix in ServiceAgent‘s Workflow Builder, a visual automation canvas that fires the moment a trigger event occurs.
- The full sequence covers all five gaps: contact.created → AI Extract → Send SMS (confirmation) → Wait/Delay (follow-up timing) → Send SMS (follow-up) → Create Task (dispatch) → Update CRM.
- Operators running this sequence save 10+ hours per week on callbacks, manual CRM entry, and morning dispatch scramble.
- Closing the five gaps doesn’t require more leads. It requires a system that ensures the ones you already have don’t go cold before someone acts on them.
The Lead Generation Trap
The HVAC industry is spending more on lead generation than ever. Google Local Services Ads, paid search, Facebook, review campaigns. The tools exist and most operators are using them. The leads are coming in.
What isn’t improving is the conversion rate.
The reason is structural. Generating a lead creates a contact record. Converting a lead requires a sequence of actions that happen within hours of that first contact: someone answers, someone confirms, someone follows up, someone assigns the job. If any one of those steps doesn’t happen on time, the lead goes cold.
Most HVAC operators handle each of those steps manually. The outcome depends on whether the right person is available, whether they remember to follow up, and whether callbacks get made before the homeowner calls someone else.
The gap isn’t on the marketing side. It’s in the 48 hours between “lead came in” and “job is on the calendar.”
The 5 Moments Where HVAC Leads Escape
Every HVAC lead follows roughly the same path: contact is made, service need is captured, appointment is scheduled, job is dispatched. The gaps appear at the transitions.
- Crack 1: Unanswered call. The lead calls outside business hours, or during a busy patch when the dispatcher is on another line. The call goes to voicemail. The homeowner moves to the next result.
- Crack 2: No confirmation after contact. The call was answered and the appointment was discussed, but no confirmation SMS went out. Eight hours later, the homeowner isn’t sure whether they’re actually booked. They call a competitor to confirm.
- Crack 3: No follow-up on leads that didn’t book. The homeowner wasn’t ready to commit on the first call. They said they’d think about it. No one followed up. Two days later, they’ve forgotten the name of the company they called.
- Crack 4: Booked but not dispatched. The appointment is on the calendar but no task was created for the dispatcher. The morning starts with a scramble to figure out who was assigned to what.
- Crack 5: CRM record missing or incomplete. The contact exists in the system, but the service type, urgency level, or appointment details weren’t entered correctly. The dispatcher has the name but not the job.
Five gaps. Each one loses leads that were already yours. None of them requires more marketing spend to fix.
Introducing the Workflow Builder
The Workflow Builder is a visual drag-and-drop canvas inside ServiceAgent where you build automated sequences that run the moment a trigger event fires. A trigger is the system event that starts the workflow: a new contact created, an appointment booked, or a call completed. Each workflow then runs a chain of nodes, which are individual actions the system takes automatically without staff involvement.
For HVAC lead retention, the trigger is contact.created: it fires the moment the AI voice agent creates a new contact record from an inbound call. From that point, the workflow runs through AI Extract, Send SMS, Wait/Delay, Send SMS again, Create Task, and Update CRM. Each node handles one gap, in sequence, without anyone on your team touching it.
The Lead-Retention Workflow: 6 Nodes, 5 Gaps Closed
This workflow fires the moment the AI voice agent creates a new contact record. It runs on every inbound call, at any hour, regardless of whether the office is open.
Trigger: contact.created
Configure the trigger in the Workflow Builder by selecting “New Workflow” and choosing contact.created as the event. Set a condition to filter for contacts sourced from the AI voice agent so the workflow fires only for leads coming in through that channel.
What to check: create a test contact via the AI voice agent and confirm the workflow activates in the activity log. If it doesn’t fire, verify the source tag condition matches what the AI voice agent writes on new contact records.
Node 1: AI Extract (close Crack 5: Incomplete CRM record)
What it does: Reads the call transcript created by the AI voice agent and pulls out the key details (service type, urgency level, service address, preferred appointment window) then writes each value to the corresponding CRM fields on the contact record.
Why it matters: The AI voice agent captures the conversation as text. Without AI Extract, you have a transcript. With it, you have structured fields your dispatcher can act on. Crack 5 is closed here, at the moment the contact is created, not the next morning when someone manually reviews call logs.
What you do: Configure the node to extract four fields: service type (AC repair, no heat, maintenance, quote), urgency level (emergency, urgent, routine), service address, and preferred appointment window. Set each to write to the corresponding contact field in your CRM. Configure the field mapping once and the node applies it to every incoming contact automatically.
What to check: Open the contact record after a test run and confirm all four fields are populated correctly. If urgency is misclassifying (marking routine calls as emergencies), tighten the urgency definition in the extraction prompt with a few specific example phrases for each level.
Node 2: Send SMS (close Crack 2: No post-call confirmation)
What it does: Sends a confirmation SMS to the lead within 60 seconds of the contact being created, including the service type captured during the call, a callback number, and a clear next step.
Why it matters: A homeowner who called at 8pm and receives nothing until the next business day has hours to call a competitor or assume nothing is happening. A confirmation sent within 60 seconds anchors the interaction while it’s still fresh. Operators running an instant confirmation step see 77% fewer no-shows on leads that came in outside business hours.
What you do: Configure the Send SMS node with a template: “Hi [Name], thanks for calling [Business Name]. We’ve received your request for [Service Type] at [Address]. We’ll confirm your appointment time shortly. Questions? Call or text [Number].” The node populates all fields from the AI Extract output.
What to check: Send a test contact via the AI voice agent and confirm the SMS arrives within 60 seconds. Verify the service type and address match what AI Extract captured. If fields are blank, the AI Extract node is not writing to the correct CRM fields. Fix the field mapping before proceeding.
Node 3: Wait/Delay (close Crack 3: No follow-up for unbooked leads)
What it does: Pauses the workflow for 24 hours from the contact.created timestamp, then triggers the follow-up SMS in the next node. This node runs only for contacts that haven’t booked an appointment after the initial call.
Why it matters: Crack 3 requires consistent follow-up across every unbooked lead, not just the ones someone remembered to call back. The Wait/Delay node makes that timing automatic. Set a condition: if the appointment status is already “booked,” skip Nodes 3 and 4 and go directly to Node 5. Follow-up is only needed for leads that didn’t convert on first contact.
What you do: Set the Wait/Delay node to a fixed offset of 24 hours from the contact.created timestamp. Add a conditional branch at this node: appointment status = booked → skip to Node 5. All others proceed to Node 4.
What to check: Run a test with a contact that has no appointment. Confirm the follow-up SMS fires 24 hours later. Run a second test with a booked contact. Confirm the workflow skips to Node 5 without sending a follow-up.
Node 4: Send SMS (close Crack 3: Follow-up for unbooked leads)
What it does: Sends a single follow-up SMS to leads that haven’t booked within 24 hours of first contact. The message references the service need they originally called about and offers a simple way to book.
Why it matters: A homeowner who called and said they’d think about it is a warm lead, not a lost one. A follow-up sent at 24 hours recovers a share of those contacts that a manual callback stack misses because no one got around to it. The node runs on every unbooked lead, no exceptions.
What you do: Configure the template: “Hi [Name], this is [Business Name] following up on your [Service Type] request. Still need help? Reply here or call [Number]. We have availability this week. Happy to get you scheduled.” Keep it short. One ask. One option.
What to check: Confirm the follow-up goes to the correct number and references the correct service type from Node 1’s AI Extract output. If the message fires for leads that already booked, revisit the conditional branch at Node 3.
Node 5: Create Task (close Crack 4: Booked but not dispatched)
What it does: Creates an assigned job task in your CRM with the contact’s name, address, service type, urgency level, and appointment details. The task appears in the dispatcher’s queue the morning after the contact was created.
Why it matters: A booking on the calendar without a dispatch task requires the dispatcher to read through every overnight contact and manually figure out who goes where. The Create Task node does that assignment work the moment the contact is created. Operators running this node recover roughly 45 to 60 minutes of morning admin per day during peak season.
What you do: Configure the task with the dispatcher’s name in the assigned-to field, the appointment date as the due date, and the contact details from Node 1 in the task body. Set routing rules once (AC repair routes to Field Crew A, heating to Field Crew B) and the node applies them to every contact automatically.
What to check: Confirm the task appears in the correct queue the morning after a test run. Check that the service type and urgency on the task match the Node 1 output.
Node 6: Update CRM (contact status)
What it does: Updates the contact record with a status tag showing where the lead sits in the pipeline: “Confirmed” for booked contacts, “Follow-up sent” for unbooked contacts, with a timestamp of when each status was applied.
Why it matters: Without this node, every contact record looks the same. The dispatcher can’t distinguish a confirmed appointment from a lead still awaiting follow-up. The Update CRM node creates a visible pipeline state so the morning review takes minutes instead of 30.
What you do: Configure two outputs: one that writes “Confirmed” plus timestamp for contacts where an appointment is booked, and one that writes “Follow-up sent” plus timestamp for contacts that went through the 24-hour path. Match the status labels to your existing CRM field values.
What to check: Open two test contacts (one booked, one unbooked) and confirm both show the correct status and timestamp after the full workflow runs.
The complete lead-retention workflow
contact.created → AI Extract (service type, urgency, address, appointment window) → Send SMS (instant confirmation) → [if unbooked] Wait/Delay (24 hours) → Send SMS (follow-up) → Create Task (dispatch assignment) → Update CRM (contact status)
Every lead. Every time. No staff involvement between “call ended” and “task in the dispatcher’s queue.”
What to Track to Know It’s Working?
Three numbers tell you whether the system is performing.
Lead response rate: What percentage of contacts receive a confirmation SMS within 5 minutes of the contact being created? If this is below 95%, check the Node 2 Send SMS configuration and the AI Extract field mapping. Contacts without a confirmation are at highest risk of going cold.
Unbooked lead conversion rate: Of the contacts that went through the 24-hour follow-up path, what percentage booked within 48 hours of the follow-up SMS? Compare this to your historical callback conversion rate. If the follow-up SMS is converting lower than live callbacks, review the message template and reduce friction in the booking step.
Dispatcher queue coverage: What percentage of day-ahead appointments have a Create Task entry in the dispatcher’s queue? This number should be 100%. If it’s below that, contacts are bypassing the workflow trigger. Check the source-tag condition on the contact.created event.
How ServiceAgent Is the 24/7 AI Office Manager?
ServiceAgent’s AI voice agent answers every inbound HVAC call and creates the contact record the Workflow Builder needs to run. The six nodes described here (AI Extract, Send SMS confirmation, Wait/Delay, Send SMS follow-up, Create Task, Update CRM) run on ServiceAgent’s automation platform, connected to your CRM and dispatcher’s queue.
Operators running the full lead-retention workflow convert 75% of AI-handled calls to booked appointments and save over 10 hours per week previously spent on manual callbacks, CRM entry, and morning dispatch review.
The five cracks in your lead pipeline close the moment the workflow goes live. No additional ad spend required. If you’re currently losing leads between first contact and confirmed booking, ServiceAgent is where that sequence gets built.
Frequently Asked Questions
What is the most common reason HVAC leads don’t convert?
The most common reason is response speed. A homeowner who calls and reaches voicemail will call the next company within minutes. For leads that do connect, the second most common dropout is the confirmation gap: no booking confirmation goes out after the call, so the lead has no anchor and reconsiders before the callback arrives. Both problems are structural, not staffing. They happen regardless of how diligent the office team is, because they depend on someone being available at the exact moment the lead contacts you.
How quickly should an HVAC company follow up with a new lead?
Within 5 minutes for the confirmation step, and within 24 hours for a follow-up on leads that didn’t book on first contact. Response past 5 minutes drops conversion significantly on inbound HVAC leads because the homeowner is comparing options and books with whoever responds first. The 24-hour follow-up window applies to leads that were engaged but didn’t commit. Beyond 48 hours, intent has usually faded or they’ve booked elsewhere.
Can this workflow handle leads that come in after business hours?
Yes. The workflow triggers on contact.created, which fires any time the AI voice agent creates a contact record, including calls at 10pm, 2am, or on weekends. The confirmation SMS fires within 60 seconds of the call ending regardless of the hour. The dispatch task sits in the queue until the dispatcher opens it the next morning, already organized by the time they arrive. The only step that requires a person is reviewing the task queue. The workflow has already built it.