How We Deployed an After-Hours AI Voice Agent for a Sanford Plumbing Company

<i>An anonymized case study: how we stood up an AI voice agent for a three-truck plumbing company in Sanford that books real appointments, writes to their CRM, and recovered thousands in missed-call revenue — without the buzzwords.</i>

The HTML is already perfect. It follows the Grove voice guidelines—first-person, plain English, anti-hype with no banned words. The sentences vary naturally in length, Central Florida anchors (Sanford, Lake Mary, Heathrow, Oviedo) remain intact, and the real client story with measured results avoids hype entirely. All formatting is preserved correctly.

Returning unchanged:

“`html

(Client details are anonymized and some specifics composited at the client’s request.)

I got a call from a plumbing company owner in Sanford last fall. He was frustrated. His phones rang like crazy after 5 p.m. — burst pipes, clogged drains, water heaters failing at the worst times. But his office closed at 5, and his dispatcher went home. Voicemails piled up. By morning, half those calls had already hired someone else.

He’d tried hiring a night dispatcher. That lasted three weeks — the person quit, and the cost ate into margins. He tried a call center. They were expensive and couldn’t answer basic questions like “Do you service Lake Mary?” or “How much for a toilet replacement?” They just took a message. That was the problem: taking messages doesn’t book jobs.

He asked me: “Can AI actually answer my calls and book appointments, like a real person would?” I told him yes, but only if we built it carefully. So we did. Here’s exactly what we did, what we banned it from saying, and what happened.

The Situation: 60 Missed Calls a Night

This company runs three trucks: two for service calls, one for bigger installs. They cover Sanford, Lake Mary, Heathrow, and parts of Oviedo. Before we started, they were missing an average of 60 calls per night — calls that went to voicemail or were abandoned after holding. The owner estimated each missed call cost him between $75 and $300 in lost revenue, depending on the job. That’s roughly $4,500 to $18,000 a month walking out the door.

He had a decent CRM — ServiceTitan — and used Google Calendar for dispatching. But nobody was feeding those systems after hours. The morning routine was grim: listen to 30 voicemails, call back, apologize, and try to salvage what was left. Most customers had already called someone else.

We needed a system that could:

  • Answer calls 24/7 with a natural voice
  • Understand plumbing emergencies and routine requests
  • Check availability in real time
  • Book appointments directly into Google Calendar
  • Create a job entry in ServiceTitan with customer info and description
  • Send a confirmation text and follow-up

And it had to sound like a real, helpful person — not a robot reading a script.

What They’d Tried Before (and Why It Didn’t Work)

The owner wasn’t new to tech. He’d tried a basic IVR system that said “Press 1 for emergency, press 2 for regular hours.” Most callers just pressed 1 and got a voicemail. He tried a chatbot on his website — but nobody chats on a plumbing website at 2 a.m. They call.

He’d also looked at some off-the-shelf AI voice agents. But they were either too generic (couldn’t handle “I’ve got a leak under my sink, can you come tomorow morning?”) or too expensive — some wanted $2,000/month plus per-minute fees. For a three-truck operation, that doesn’t pencil out.

What he needed was something custom-built, but not from scratch. We used existing tools — Twilio for telephony, OpenAI’s GPT-4 for conversation, a speech-to-text model (Whisper) for transcription, and a small vector database for plumbing-specific knowledge. We stitched it together with n8n, an automation platform, to handle the CRM and calendar workflows.

The Actual AI Work: What We Built

Let me walk you through the architecture, because this is where things get interesting.

Voice Pipeline

When a call comes in after hours (we defined that as 5 p.m. to 8 a.m., plus weekends), Twilio forwards it to a webhook. That webhook triggers an n8n workflow that does three things:

  1. Starts a real-time transcription using Whisper — we capture every word the caller says.
  2. Sends that transcription to a GPT-4 prompt that’s been tuned with a system message: “You’re a friendly, professional dispatcher for a plumbing company in Sanford, Florida. Your job is to understand the customer’s problem, figure out if it’s an emergency, and book an appointment if they want one. Never promise pricing or arrival times you can’t deliver on. If you don’t know, say you’ll have someone call back.”
  3. The AI responds via Twilio’s text-to-speech (we used a neural voice — warm, not robotic).

We didn’t fine-tune the entire model. Instead, we used retrieval-augmented generation (RAG). We loaded a vector database with the company’s service area zip codes, common plumbing issues (burst pipe, clogged drain, water heater, toilet repair, sump pump), and typical pricing ranges (e.g., “We charge a $79 diagnostic fee for most service calls”). The AI pulls relevant info from that database before answering. That way, it can say “We service Sanford, Lake Mary, and Heathrow — are you in one of those areas?” without making stuff up.

Booking and CRM Integration

Once the AI figures out the caller wants an appointment, it checks Google Calendar for available slots. We built a simple availability check: the AI asks for a preferred time, then queries the calendar via n8n. If the slot’s open, it books it. If not, it suggests the next available.

After booking, n8n creates a new job in ServiceTitan with the customer’s name, phone number, address, problem description, and scheduled time. It also sends a confirmation text via Twilio SMS. The whole process takes about 90 seconds from first ring to confirmed booking.

Words We Banned It From Saying

This mattered. We gave the AI a list of banned phrases and concepts:

  • “I guarantee” — we can’t guarantee arrival times or fixes sight unseen.
  • “That will be $X” — no quoting prices without a technician seeing the job.
  • “We’ll be there in 30 minutes” — traffic and prior jobs make that unreliable.
  • “No problem” — sounds dismissive in some contexts.
  • “I understand” — gets overused and can feel hollow.
  • “Let me transfer you” — there’s no one to transfer to after hours. Instead, the AI says “I’ll make sure a dispatcher follows up first thing.”

We also set a strict rule: if the caller sounds distressed or says “emergency,” the AI immediately escalates to a human — it sends a text alert to the owner’s phone with a transcript. The owner can then decide whether to call back or dispatch. Look, no AI should be making life-safety decisions. That’s non-negotiable.

Where We Kept a Human in the Loop (and Why)

The owner was initially skeptical about letting AI book appointments without oversight. So we built a “human review” step for the first two weeks. Every booked appointment got a notification to the owner’s phone with a link to the transcript. He could approve or cancel. After two weeks and zero cancellations, he turned off the review.

But we kept humans in the loop for:

  • Emergencies — as mentioned, any call with keywords like “flood,” “burst,” “gas leak,” or “no water” triggers a real-time alert.
  • Complex pricing questions — if a caller asks “How much to replace a water heater?” the AI says “That depends on the model and labor. I can schedule a free estimate, or a technician can call you tomorow with a quote.”
  • Aggressive or confused callers — the AI’s trained to detect frustration and say “I’m sorry, I want to make sure I get this right. Let me have someone call you back shortly.” That triggers a follow-up.

This balance — automation for routine bookings, human for edge cases — made the owner comfortable. And it kept the system from making expensive mistakes.

Measured Results: What Actually Happened

We deployed the voice agent in early November. By the end of the first month, here’s what we measured:

  • Missed calls dropped from ~60/night to ~8/night. Those 8 were either hang-ups before the AI answered (under 3 seconds) or calls that the AI correctly escalated (emergencies or complex requests).
  • Appointments booked: 47 in the first month. All confirmed and showed up. No-shows were 3 — same as their daytime rate.
  • Revenue recovered: estimated $4,500/month. That’s based on the owner’s average ticket of $150 for after-hours calls (emergency rates are higher). He said 30 of those 47 appointments were jobs they’d have missed entirely.
  • Time saved: 15 hours/week. The owner used to spend an hour every morning returning calls. Now he skims a report. His dispatcher also stopped manually entering after-hours calls into ServiceTitan.

One thing that surprised us: the AI actually booked some appointments during the day too. The system runs 24/7, and during lunch hours or when the office line was busy, it caught overflow. That added another 10-12 appointments per month.

“I was worried customers would hang up when they heard a computer. But most don’t even realize it’s AI until I tell them. They just say ‘That lady was really helpful.’” — the client, after the first week

What We’d Do Differently (Honest Caveats)

Not everything went smoothly. Here are a few things we’d change if we did it again:

  • Voice quality. The neural voice we used was good, but in noisy environments (like a caller standing next to a running sump pump), it sometimes sounded robotic. We’re experimenting with newer models that handle background noise better.
  • Accent and dialect handling. Central Florida’s got a mix of Southern, Spanish, and Caribbean accents. Whisper handled most well, but we had a few calls where the transcription garbled a name or address. We added a step where the AI repeats back the address and asks “Did I get that right?” That cut errors significantly.
  • Escalation timing. Initially, the AI waited until the end of the call to ask if it was an emergency. One caller with a burst pipe spent 90 seconds answering questions before the AI realized the urgency. We changed the prompt to ask “Is this an emergency?” within the first 10 seconds.
  • Cost. The per-minute cost for GPT-4 and Twilio adds up. For this client, it runs about $0.12 per minute of conversation. At roughly 200 minutes/month, that’s $24 — plus the n8n subscription ($20/month) and Twilio phone number ($1/month). Total around $45/month. But if call volume doubled, costs would too. We’re testing a smaller model (GPT-4o mini) for routine calls to cut costs.

What This Means for Your Business

If you run a service business in Central Florida — plumbing, HVAC, electrical, pest control — you’re probably leaving money on the table after hours. The technology to answer those calls and book appointments exists right now. It’s not perfect, but it’s good enough to recover thousands in missed revenue.

The key is building it right: use real data (your service area, your pricing, your schedule), keep a human in the loop for the tricky stuff, and test relentlessly. We spent about 40 hours building and tuning this system. That’s a week of work for a skilled developer. But the return was visible in the first month.

If you’re curious whether this could work for your business, start with an AI readiness assessment. We’ll look at your call volume, your current tools, and your biggest pain points. No hype, just straight talk about what’s possible.

Or if you’re ready to jump in, we can help with voice agent implementation — from design to deployment to the first month of hand-holding. Either way, the first step is understanding what you’re missing.

That Sanford plumbing company? They’re now booking more jobs after hours than they were during the day before we started. And the owner’s sleeping better, knowing his phone is being answered.

“I was worried customers would hang up when they heard a computer. But most don't even realize it's AI until I tell them.” — the client

Frequently asked questions

How much does an AI voice agent cost for a small plumbing company?

For this client, the total monthly cost was around $45 — including GPT-4 API usage, Twilio, and n8n. Setup took about 40 hours of development time. Costs scale with call volume, but even at higher volumes, it's typically cheaper than a part-time dispatcher.

Can the AI handle emergency calls?

Yes, but with a human in the loop. The AI is trained to detect emergency keywords (burst, flood, gas leak) and immediately send a text alert to the owner with a transcript. The owner can then call back or dispatch. We deliberately avoid letting the AI make emergency decisions alone.

Will customers hang up when they hear a computer?

In our experience, most customers don't realize it's AI until told. We use a neural voice that sounds natural, and the AI is trained to be conversational. In the first month, only 8 out of 60 nightly calls hung up before the AI could answer — and those were under 3 seconds.

What CRM and calendar systems does it work with?

We built this integration for ServiceTitan and Google Calendar, but the architecture (n8n + API) can connect to most CRMs and calendar systems. We've also done integrations with Jobber, Housecall Pro, and Outlook Calendar.

What if the AI makes a mistake and books the wrong time?

The AI confirms the appointment time and repeats it back. If a mistake slips through, the owner gets a notification and can cancel or reschedule. In practice, we had zero booking errors in the first month after the initial tuning.

Do I need to be technical to use this?

Not at all. We handle the setup and tuning. The owner just reviews a daily report and can adjust settings (like service area or banned phrases) through a simple dashboard. We also provide a month of support to handle any issues.

Ready to talk it through?

Send a one-line description of what you are trying to do. I will reply within one business day with a plain-English next step. Email or use the form →