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.
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.
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.
Phase by phase
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
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
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
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
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.
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
- 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.
- 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.
- 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.
- 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.
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.
- 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
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.
Direct Dispatch Calendar Sync
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.
- Slots checked against availability and drive time
- Conversation-keyed idempotent writes
- Jobs arrive already dispatched
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.
- Symptom classifier with deliberate escalation bias
- Active leaks, no heat and gas escalate to a live call
- Routine quotes book into the ordinary calendar
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.
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
- 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.
- 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.
- 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.
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.
- 01 · TriggerUnanswered call webhookFires the moment the line clears, not on a schedule, so the first text goes out inside 30 seconds.
- 02 · ConversationSMS agent, fixed question orderAddress, symptom, access in that order, so answers arrive as fields. Identifies itself as automated on the first message.
- 03 · TriageSymptom classifier + rulebookBiased toward escalation: water escaping, no heat in freezing weather and gas smell go to a live call immediately.
- 04 · BookingDispatch calendar writeSlots checked against live availability and drive time from the previous job; writes idempotent, keyed on the conversation.
- 05 · OperateOffice 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 buildNearby engagements
Web PlatformsA dispatch platform that keeps crews moving
A scheduling and dispatch platform with a technician mobile app, instant quoting, and routing that fits more jobs into every day.
Home & Field Services · 16 weeks
Web PlatformsMatching by who covers the address, not by who is nearest to it
A two-sided marketplace for lawn care where providers draw the area they actually serve, so a job is offered to the people who'll genuinely travel to it.
Landscaping & Lawn Care · 18 weeks
Mobile AppsA field inspection app that keeps working when the signal doesn't
A native inspection app that keeps working with zero signal in the field, syncing photos and checklists the moment a connection returns, with push alerts routed through each platform's store-approved channels.
Home & Field Services · 10 weeks
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.














