← All case studies
◆ Case Study  /  CRM & Workflow Automation  /  HVAC & Plumbing

Turning missed calls into booked jobs for an always-on service business.

How I rebuilt the call-to-cash journey for an HVAC & plumbing company, replacing missed calls, manual dispatch, and forgotten maintenance follow-up with an automated GoHighLevel CRM that captures every lead, day or night.

Industry
HVAC & Plumbing
Focus
Call Capture, Dispatch & Recall
Platform
GoHighLevel
Scope
End-to-end build
89%
of missed calls recovered by instant text-back
14/day
calls auto-routed as emergency or routine, no dispatcher juggling
<15s
from missed call to a text landing in the customer's phone
+26%
booked revenue from recovered after-hours & missed-call leads
01

The starting point

The business ran lean: two vans, one office phone, and a dispatcher juggling calls between jobs. Every missed call was a lead gone to the next company in the search results. Emergency callouts and routine maintenance requests were sorted by whoever picked up, jobs were assigned by memory and a whiteboard, invoices were written up after the fact, and seasonal tune-up reminders depended on someone finding time to work through old job records.

The brief: never lose another call to voicemail, and let the system carry every booking, reminder, and follow-up around the two decisions that need a real technician, diagnosing the job and doing the work.

Missed calls, lost leads

An unanswered call during a job meant the customer moved straight to the next company in their search results.

Dispatch by whiteboard

Job assignment depended on the dispatcher's memory of who was free and where, with no live view of the day.

Invoicing after the fact

Invoices were written up back at the office, often a day or more after the job was actually done.

Maintenance reminders forgotten

Seasonal tune-up outreach to past customers depended on someone finding time to dig through old job files.

02

The pipeline I built

I mapped the full job journey from first ring to seasonal repeat business as one connected pipeline. Technicians still diagnose and do the work, and the dispatcher still makes the judgment calls on complex jobs, but everything else now runs itself. Orange stations run automatically; grey stations stay in human hands by design.

Missed-call text-backAutomated

Any unanswered inbound call triggers an instant text asking if it's an emergency and offering a booking link, before the customer calls a competitor.

Emergency vs. routine routingAutomated

Keyword detection ("no heat", "burst pipe", "no hot water") routes emergencies straight to the on-call technician's phone, while routine requests book directly into the calendar.

Dispatcher assigns complex jobsBy design, manual

The judgment call on which technician, skillset and route fits a non-routine job. This stays entirely human.

Routine jobs auto-matchedAutomated

Standard maintenance and service jobs are matched to the nearest available technician automatically, based on live calendar and location.

Booking confirmation & on-the-way alertAutomated

The customer gets an automatic confirmation on booking and an "on the way" text as the technician heads to the job.

Technician diagnoses & completes the jobBy design, manual

The technical judgment call: diagnosing the fault and doing the repair or install. This stays entirely human.

Invoice generated on job completionAutomated

Marking the job complete on a phone or tablet automatically generates and sends the invoice, no paperwork back at the office.

Seasonal maintenance reminderAutomated

Past customers are surfaced automatically ahead of each season for tune-up and maintenance outreach, turning old jobs into repeat revenue.

Review requestAutomated

A Google review request goes out automatically once a job is marked complete and paid, building the business's reputation on autopilot.

03

Before & after

Every call, before

  • Missed call meant a lost lead
  • Emergency vs. routine sorted by whoever answered
  • Jobs assigned from memory and a whiteboard
  • Confirmation texts sent by hand, if at all
  • Invoice written up back at the office
  • Maintenance outreach forgotten between seasons
  • Review request often skipped

Every call, after

  • Missed call gets an instant text-back
  • Emergency vs. routine auto-detected & routed
  • Routine jobs auto-matched to nearest tech
  • Confirmation & on-the-way alerts auto-sent
  • Invoice generated the moment the job's marked done
  • Seasonal maintenance reminder fires itself
  • Review request always fires
04

Under the hood

The build combined a configured CRM with custom logic where off-the-shelf features stopped short.

/ 01

Missed-call text-back engine

The highest-return automation in this build: an instant, always-on text response to every unanswered call, day or night.

/ 02

Emergency keyword routing

Inbound messages are scanned for emergency language and routed to the on-call technician's phone in seconds, bypassing the queue entirely.

/ 03

Location-aware job matching

Routine jobs are matched to the nearest available technician automatically, cutting drive time and idle gaps between calls.

/ 04

Job-complete invoicing

Marking a job complete in the field triggers an automatic, correctly-priced invoice, no manual write-up required.

/ 05

Seasonal recall campaigns

Past job records feed automated seasonal maintenance outreach, turning a one-time customer base into repeat revenue.

/ 06

Custom API logic

Where the platform couldn't natively match records between technicians, jobs and customers, I wrote custom code against the API to solve it properly.

/ 07

Mobile-first for the field

Technicians manage jobs, mark completions and trigger invoices from their phone at the job site, no separate system to check.

Tools & platforms
GoHighLevel Missed-Call Text-Back SMS & Voice Automation Custom Code / API Webhooks Automated Invoicing
05

How I worked

There was no room for a soft launch here, a missed call costs a real job from day one. So the text-back and call-routing logic went live first, tested against live inbound calls during an actual working week, with the owner listening in on how it handled emergency versus routine language before it ran unsupervised.

Every keyword rule and dispatch match was tuned against this company's real call patterns and service area rather than a generic script, and where the platform's native routing fell short, I built custom logic to close the gap.

◆ The outcome

A business that never loses a call, even with two vans on the road.

The tools in the van and the diagnosis at the door are still entirely human. What changed is the phone: it no longer goes to voicemail, jobs no longer get assigned from memory and a whiteboard, and last season's customers no longer disappear until they call back with a bigger, more expensive problem.

We used to lose jobs to whoever answered the phone first. Now our phone is always the one that answers.
Limited-time offer

Know a trade business that needs this? Get paid for the intro.

Point a business owner my way, and if the project goes ahead, you earn 10%+ of the project value as a thank-you, exact rate locked in at the time of referral. This won't run forever, so make the intro while it's open.

◆ Work with me

Still losing jobs to a missed call?

Every call that goes to voicemail is a job for whichever company answers next. If your dispatch, reminders and invoicing still run on memory and a whiteboard, you're probably not short on demand, you're short on capturing it.

Tell me how your calls, dispatch and invoicing work today, and I'll show you exactly where automation turns more of your ringing phone into booked, paid jobs.

Arslan Mumtaz
CRM & Automation Specialist
WhatsApp +92 324 6392706
Free 30-minute consultation

Book a call and see how your business could run itself.

Bring your requirements and walk me through how you work. I'll show you exactly where automation can save you time and make you money.

Book your 30-minute call