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.
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.
An unanswered call during a job meant the customer moved straight to the next company in their search results.
Job assignment depended on the dispatcher's memory of who was free and where, with no live view of the day.
Invoices were written up back at the office, often a day or more after the job was actually done.
Seasonal tune-up outreach to past customers depended on someone finding time to dig through old job files.
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.
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.
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.
The judgment call on which technician, skillset and route fits a non-routine job. This stays entirely human.
Standard maintenance and service jobs are matched to the nearest available technician automatically, based on live calendar and location.
The customer gets an automatic confirmation on booking and an "on the way" text as the technician heads to the job.
The technical judgment call: diagnosing the fault and doing the repair or install. This stays entirely human.
Marking the job complete on a phone or tablet automatically generates and sends the invoice, no paperwork back at the office.
Past customers are surfaced automatically ahead of each season for tune-up and maintenance outreach, turning old jobs into repeat revenue.
A Google review request goes out automatically once a job is marked complete and paid, building the business's reputation on autopilot.
The build combined a configured CRM with custom logic where off-the-shelf features stopped short.
The highest-return automation in this build: an instant, always-on text response to every unanswered call, day or night.
Inbound messages are scanned for emergency language and routed to the on-call technician's phone in seconds, bypassing the queue entirely.
Routine jobs are matched to the nearest available technician automatically, cutting drive time and idle gaps between calls.
Marking a job complete in the field triggers an automatic, correctly-priced invoice, no manual write-up required.
Past job records feed automated seasonal maintenance outreach, turning a one-time customer base into repeat revenue.
Where the platform couldn't natively match records between technicians, jobs and customers, I wrote custom code against the API to solve it properly.
Technicians manage jobs, mark completions and trigger invoices from their phone at the job site, no separate system to check.
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 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.
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.
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.
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