Skip to content

Never lose a job to a missed call again

A missed-call recovery agent that texts back instantly, captures the job details, books the slot, and keeps a busy calendar full.

Missed calls

Every call that rang out on the main line, and what the agent made of it

This week Wed, 09/16/2026KH
Texted back inside 30s
88%Of missed-call leads, captured in the window
Response time
< 10sCall ending → first outbound text
Jobs booked / month
+31Attended, not merely created
Recovered revenue / month
+$42,000Estimate · firm's average job value

This week10 calls rang out

All outcomes Caller or street
Rang outCaller · what they saidFirst textTriageEnded as
8:52 AMWed · cv-4471Renee CastilloNo hot water since this morning 6sPriorityBookedWed 9:30 AM · Marek
8:31 AMWed · cv-4470Tom WhitakerWater through kitchen ceiling 4sEscalateHanded to a personLive call · Luis, 41s
8:07 AMWed · cv-4469Anita BrooksKitchen drain backing up 7sRoutineBookedWed 1:00 PM · Dana
4:48 PMTue · cv-4468Greg HollowaySmell of gas by water heater 5sEscalateHanded to a personSafety script · Sam, 28s
3:15 PMTue · cv-4467Maya LindqvistPrice for 50-gal heater swap 8sEstimateBookedThu 10:00 AM · estimate
11:42 AMTue · cv-4466Derek MensahToilet running nonstop 6sRoutineBookedTue 2:30 PM · Priya
10:19 AMTue · cv-4465Carla JenningsBathroom refit, want a quote 9sEstimateQuote follow-upNudge 2 of 2 due Fri
5:06 PMMon · cv-4464Unknown callerNo reply to text-back 5sRoutineNo replyClosed after 24 hr
12:24 PMMon · cv-4463Jim PrattGarbage disposal jammed 7sRoutineBookedTue 8:00 AM · Jake
9:03 AMMon · cv-4462Lena RuizSump pump not kicking on 6sPriorityBookedMon 11:00 AM · Marek
Seconds are from the call clearing to the first text leaving6 booked · 2 handed to a person · 1 quote · 1 no reply

RC Renee Castillo

cv-4471
Answers, in the order asked
1Address418 Alder Ln2SymptomNo hot water · heater in garage · dry3AccessHome till noon · side gate
Good. How will the tech get to the heater?I'm home till noon, use the side gateMarek can be there today at 9:30 AM. Reply 1 to book it, or 2 for a later time.1Booked: Marek, today 9:30 AM, 418 Alder Ln. He'll text when he's on the way.
Booked · dispatchedfirst text 6sWed 9:30 AM · Marek Dvorak · Van 2No hot water · priority · 2 hr holdOn the schedule at 8:56 AM · no office action needed

The brief, in specifics

Industry
Plumbing Services
Duration
6 weeks
Cooperation model
Fixed price
Services
Missed-call recoverySMS booking agentManaged operations
Integrations
StripeSendGridSegmentSentry
Technologies
PythonFastAPITwilio SMSOpenAI GPT-4oHousecall Pro APINode.js
Team
1 Project lead1 ML engineer1 Backend engineer1 Data engineer

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

The problem

What went wrong, and when

When a call went unanswered, homeowners called the next plumber in the search results, and high-margin jobs went to whoever answered first.

The loss wasn't spread across the day. It clustered exactly when the technicians were busiest, which is also when homeowners with an active problem call. Voicemail didn't help: the owner's own follow-up calls found most people had already booked, and several couldn't remember which firm they'd called.

We built an instant text-back agent that engages callers within 30 seconds, qualifies the job, and books directly onto the technician's calendar.

Process

Phase by phase

  1. Phase 1: Call Drop & SMS Audit

    Missed Call & Lead Loss Analysis

    Audited missed call patterns and job loss during high-volume service hours across the service territory.

    • Call Drop Audit Report
    • Lead Capture Pipeline
    • Response Latency Benchmark
  2. Phase 2: Conversational Scripting

    Sub-30s SMS Recovery Script Engine

    Tuned conversational AI text prompts trained to gather issue severity, location, and preferred appointment window.

    • SMS Recovery Script
    • Qualification Guardrails
    • Triage Rules Matrix
  3. Phase 3: Dispatch Calendar Integration

    Live Booking & Dispatch API Connector

    Integrated directly with the dispatch calendar for live booking and technician assignment.

    • Dispatch Calendar Connector
    • Booking Sync Engine
    • Dispatcher Notification Bridge
  4. Phase 4: Operations & Revenue Tracking

    Managed Launch & Impact Dashboard

    Deployed across all service calls, capturing 88% of missed-call leads within 30 seconds and adding $42k in monthly revenue.

    • Managed Ops Setup
    • Revenue Impact Dashboard
    • Production Sign-off
Recovered work

Thirty days on the main line: when calls ring out, what they become, and how the figures are counted

Last 30 days Wed, 09/16/2026KH
Captured inside 30s
88%Missed-call leads texted back in the window
Response time
< 10sMissed call ending → first outbound text
Jobs booked / month
+31Created by the agent and attended
Recovered revenue / month
+$42,000Estimate · 31 × $1,355 average job

Missed calls by hour

Bars to shape · 30 days
Techs busiest
7a8a9a10a11a12p1p2p3p4p5p
The loss clusters when all 6 technicians are on jobs, which is when people with an active problem call.

Attended jobs by kind

Shape only
Emergency (after live call)
Priority: no hot water, sump
Routine: drains, toilets, taps
Estimates: heaters, refits
Emergency work is the highest-margin and the most time-sensitive: the reason it's answered fastest.

How these figures are counted

Jobs bookedAppointments the agent created that were attended, not every appointment it created.
Response timeFrom the missed call ending to the first outbound message leaving.
RevenueThe firm's own average job value applied to attended jobs. An estimate, not a measured margin. Before: about 40 missed calls a month.

Landing now

live
Agent → (555) 016-339010:14 AMSorry we missed your call. This is the automated assistant…
Caller · cv-447610:13 AMKitchen faucet dripping all night
Agent → cv-447510:09 AMBooked: Priya, today 1:30 PM, 14 Selby Rd
Handover · cv-447410:02 AMBasement has water on the floor, rising
On screen

Thirty days of recovered work: missed calls clustering in the busiest hours, attended jobs by kind, how each figure is counted, and messages landing while the page is open.

The numbers, before and after

+31

Jobs booked/month

< 10s

Response time

Jobs booked per month counts the appointments the agent created that were actually attended, not every one it created. Response time runs from the missed call ending to the first outbound message. The recovered revenue figure is the firm's own average job value applied to those attended jobs, and it's an estimate, not a measured margin.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

Introduction

The engagement

Techs were under sinks when customers called. We deployed a text-back agent that captures job details and books the appointment on the spot.

A residential plumbing firm with six technicians, all of whom are under a sink when the phone rings. The owner had a month of call logs showing about forty missed calls, and a search-results page showing four competitors above them. In this trade, a caller with a leak works down that list until someone answers, and the first answer usually wins the job.

AI & Managed Ops

How it was handled

  1. 01

    Set up instant SMS triggers on any unanswered inbound call

    The webhook fires the moment the call clears, with no schedule to wait on, and that's what puts the first message inside the window that decides the job.

  2. 02

    Trained the agent to qualify emergency vs. routine work

    Triage classifies the symptom with a deliberate asymmetry: active leaks, no heat and gas escalate to a live call, while routine quotes book into the calendar.

  3. 03

    Integrated live calendar availability for immediate booking

    Bookings write against live technician availability and the drive time from the previous job, so an offered slot is one someone can actually reach.

  4. 04

    Handed over to our managed team for monitoring and tuning

    The retainer exists because thresholds track the calendar. A full week and a quiet one disagree about what's worth interrupting a technician for.

01

Instant SMS Text-Back Agent

Texts callers back within 30 seconds of a missed call to capture emergency details and book service.

A missed call fires a webhook the moment the line clears, and the text goes out inside thirty seconds. That's the window that matters, because a homeowner with a leak calls the next three numbers on the list. The conversation collects address, symptom and access in a fixed order so the answers arrive as fields, and it identifies itself as an automated assistant in the first message.

What shipped
  • Webhook on hang-up; first text inside 30 seconds
  • Fixed question order, so answers arrive as fields
  • Identifies itself as automated in the first message
8:55
Hollis Creek PlumbingAutomated assistant · texts from the main line
Missed call · 8:52 AMText 6 seconds after the line clearedHi, this is the automated assistant for Hollis Creek Plumbing. Sorry we missed your call. Our techs are on jobs. I can book you in by text, or get a person to call you back.First, what's the address for the job?Address418 Alder LnThanks. What's going on?SymptomNo hot water since this morning. Heater is in the garageIs any water leaking from the heater right now?No, it's dryGood. How will the tech get to the heater?AccessI'm home till noon, use the side gate
Text message
On screen

The caller's side: a text six seconds after the line cleared, the assistant saying it's automated, then address, symptom and access asked in that order.

Dispatch diary

Live technician availability, synced both ways with the dispatch calendar · 6 technicians

Open full calendar Wed, 09/16/2026KH
Mon 09/14Tue 09/15Wed 09/16Thu 09/17Fri 09/18 Booked by the agent Handed to a person Drive time Booked by the office
MDMarek DvorakVan 2 · 3 of 6 shownDWDana WhitfieldVan 4 · 3 of 6 shownLOLuis OrtegaVan 1 · 3 of 6 shown
7 AM8 AM9 AM10 AM11 AM12 PM1 PM2 PM3 PM4 PM
Heater flush12 Pine Hollow Rd Drive · 14 minNo hot water418 Alder LnBooked by the agent · arrived dispatchedRepipe estimate90 Kestrel WaySump pump install61 Wexford Ln
Main line snake300 Bellamy StShower valve swap7 Juniper Ct Drive · 18 minKitchen drain backing up1203 Ferris AveBooked by the agent · arrived dispatchedToilet rebuild48 Marlow Dr
Faucet cartridge25 Rowan PlWater through ceiling77 Birchwood CtEscalated · live call, then dispatchedHose bib repair5 Tanner RdDisposal install815 Cotter Dr

Written by the agent

8:56 AM
Priority · no hot waterDispatchedWed 9:30 – 11:30 AM · Marek 418 Alder Ln · Renee CastilloThe office saw it on the schedule, with nothing to action
Why this slot
Marek free 9:30 – 11:30 AMRead live from the dispatch calendar at 8:56 AM
14 min from 12 Pine Hollow RdDrive from his previous job fits before 9:30
2 hr hold for no hot waterHold length comes from the rulebook row
Dana nearer, but not freeOffered slots must be reachable, not merely open
Caller replied 1Booked on the reply, in the same conversation
One conversation, one jobwrite key · conv/cv-4471/booking8:56:02 AM job created8:56:09 AM duplicate “1” · no-op
02

Direct Dispatch Calendar Sync

On screen

Wednesday across three technicians, with the no-hot-water job the agent wrote onto Marek's schedule, the availability and drive time that chose the slot, and the duplicate reply that didn't create a second job.

Puts confirmed emergency bookings straight onto the dispatch calendar, with no office delay.

Bookings write into Housecall Pro against live technician availability and the drive time between the previous job and this address, so the slot offered is one someone can actually reach. Writes are idempotent and keyed on the conversation, so a duplicated inbound message can't produce two jobs. The office sees the booking already dispatched, with nothing left to action.

What shipped
  • Slots checked against availability and drive time
  • Conversation-keyed idempotent writes
  • Jobs arrive already dispatched
03

Lead Qualification & Triage

Tells an urgent plumbing leak apart from a routine maintenance quote.

Triage is a classifier over the symptom text with a deliberate asymmetry: water actively escaping, no heat in freezing weather and a gas smell all escalate to a live call immediately, while a quote for a replacement unit books into the ordinary calendar. The agent errs toward escalation, because an over-escalated quote costs a phone call and an under-escalated leak costs a floor.

What shipped
  • Symptom classifier with deliberate escalation bias
  • Active leaks, no heat and gas escalate to a live call
  • Routine quotes book into the ordinary calendar
Rulebook

One row per job type: what the agent may quote, how long a slot to hold, and when it must stop

Add job type Wed, 09/16/2026KH
Errs toward escalationAn over-escalated quote costs a phone call. An under-escalated leak costs a floor. When a message could be either, it goes to a person.Rev. 3 · liveSet week 1 · revised 2× on real conversations

Job types

10 rows · managed by the ops team
Job type · words it listens forTriageMay quoteHoldAlways a person
Active leak / burst pipeleaking, pouring, ceiling, burst, floodingEscalateNever—Live call now
Gas smellgas, rotten egg, hissingEscalateNever—Live call now
No heat, freezing weatherno heat, boiler out, frozenEscalateNever—Live call now
Water heater leakingheater leaking, water on floorEscalateNever—Live call now
No hot waterno hot water, pilot outPriorityCall-out fee2 hrBooks into calendar
Sump pump failuresump, basement pumpPriorityCall-out fee2 hrBooks into calendar
Blocked drainclogged, slow drain, backing upRoutineCall-out fee1.5 hrBooks into calendar
Running toilet / dripping taprunning, dripping, won't stopRoutineCall-out fee1 hrBooks into calendar
Water heater replacementreplace, new heater, price forEstimateOn site only1 hrBooks into calendar
Bathroom / kitchen refitrefit, remodel, quoteEstimateOn site only1.5 hrBooks into calendar
Water escaping, no heat in freezing weather, gas: always a live callQuotes book into the ordinary calendar

Test a message

against rev. 3
Symptom text“there’s water coming through the kitchen ceiling, not sure from where”
Escalate · live callrow 1Active leak / burst pipeMatched water + ceiling. “Not sure from where” could be a slow drip; bias sends it to a person anyway.
Gas smell · what the agent sends
1If you smell gas, leave the house now. Don't use switches or flames.2From outside, call your gas utility's emergency line.3A Hollis Creek technician is calling you now.
The agent stops after this. No questions, no quote, no slot.
On screen

The rulebook, one row per job type: what the agent may quote, how long a slot to hold, and which jobs always go to a live call, with a ceiling leak tested against it and the gas-smell script.

Ways of working

Working inside their operation

A cross-functional team of 4 worked on a fixed price basis over 6 weeks, covering Missed-call recovery, SMS booking agent, Managed operations. We held a standing mid-week checkpoint and wrote decisions down in place of status meetings. Nothing shipped without a live demo first.

Six weeks, fixed price, with the escalation thresholds set with the owner in week one and revised twice against real conversations. After launch the work continued as a managed retainer, because the triage rules track the firm's own capacity: what counts as an emergency worth interrupting a technician for changes with how full the calendar is.

What changed in the runbook

  1. 01

    An instant 30-second text-back recovered 88% of missed caller inquiries.

    Thirty seconds is the whole mechanism. The same conversation started an hour later reaches someone who has already booked, and the firm had measured exactly that.

  2. 02

    Automated qualifying and booking generated +$42,000 in monthly recovered revenue.

    The revenue was concentrated in emergency work, which is both the highest-margin and the most time-sensitive: the two reasons it was worth answering fastest.

  3. 03

    Booking straight onto the dispatch calendar ended the phone tag between dispatchers and homeowners.

    Phone tag disappeared because the calendar was part of the conversation. The old flow ended with a promise to call back, and that's where people had been dropping off.

One missed call, replayed

Text back, qualify, then book it or hand it to a person

Three callers from the same stretch of a busy week: one that books, one that must never be booked by text, and one quote. Pick a caller and a step to see what the agent did and why. Use the arrow keys once a tab is focused.

The caller
The step
Renee Castillo · line cleared6s
0s · call ends, webhook fires30s window
First text · sent at 6sHi, this is the automated assistant for Hollis Creek Plumbing. Sorry we missed your call. I can book you in by text, or get a person to call you back. First, what’s the address for the job?
Seconds are illustrative for this call. Recorded: first text inside 30s, response time under 10s.
Why the agent did this
Fires on hang-up, with no schedule to wait onThe webhook fires the moment the line clears. A poll every few minutes would already be outside the window that decides the job.
Thirty seconds is the whole mechanismA homeowner with a problem calls down the search results until someone answers. The same text an hour later reaches someone who has already booked.
Says it's automated, first messageThe caller knows who they're talking to before they give an address, and is offered a person from the start.
Architecture

From a call that rang out to a job on the schedule

The old flow ended with a promise to call back, and that's where callers dropped off. Each stage here keeps the conversation going until the calendar is part of it, or a person is.

  1. 01 · Trigger
    Unanswered call webhookFires the moment the line clears, not on a schedule, so the first text goes out inside 30 seconds.
  2. 02 · Conversation
    SMS agent, fixed question orderAddress, symptom, access in that order, so answers arrive as fields. Identifies itself as automated on the first message.
  3. 03 · Triage
    Symptom classifier + rulebookBiased toward escalation: water escaping, no heat in freezing weather and gas smell go to a live call immediately.
  4. 04 · Booking
    Dispatch calendar writeSlots checked against live availability and drive time from the previous job; writes idempotent, keyed on the conversation.
  5. 05 · Operate
    Office view + managed tuningJobs arrive already dispatched. Thresholds are tuned on retainer, because what's worth interrupting a tech for tracks the calendar.

So the agent never makes the wrong call

Escalation first, bookings that hold

Emergencies go to a person

Triage errs toward escalation. Water actively escaping, no heat in freezing weather and a gas smell stop the agent and go to a live call immediately; routine work books by text.

Only slots someone can reach

A slot is offered against live technician availability and the drive time from the previous job to this address. A gap in the calendar alone isn't enough.

One conversation, one job

Calendar writes are idempotent and keyed on the conversation, so a duplicated inbound message can't put two jobs on a technician's day.

How many jobs rang out while your techs were under a sink? Scope your build in 3 minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.