• AWS-native AI integration · ships in 6–10 weeks

HVAC operator books 25% of after-hours callers

  • Voice AI · Home Services
  • Independent HVAC + plumbing — single location, ~$4M revenue, 14 techs, ServiceTitan

The problem

30%+ of after-hours callers never converted — they called a competitor by morning. CSRs were also losing ~3 hours/day to routine status calls ("when is my tech arriving?") that took them off booking new work.

Our approach

What we built

  • Inbound voice agent on Vapi handling new bookings, reschedules, “where’s my tech” status lookups, and after-hours emergency triage.
  • Real-time ServiceTitan integration to read the live dispatch board and write booked jobs — not a “we’ll call you back” message.
  • Hardcoded emergency triage rules: gas leak, no heat in freezing temperatures, water flooding, sewer backup — route directly to the on-call tech’s mobile, no LLM judgement involved.
  • Per-call eval scoring on address, contact, issue capture and ServiceTitan slot availability; confidence-gated handoff to a human if anything is uncertain.
  • Weekly review with the office manager flagging the worst 10 calls.

Caveats

The first two weeks exposed two failure modes: regional accents during a late-summer hiring boom dropped booking accuracy by ~8% (tuned ASR + added confidence-gated handoff), and one CSR resented the agent and kept routing herself back into queues (resolved through coaching and an explicit “agent answers first; you take overflow” SLA). The owner pushed for fully autonomous emergency triage in month two; we refused and re-confirmed hardcoded escalation.

Stack. Vapi for telephony + ASR/TTS · AWS Bedrock Claude for reasoning · ServiceTitan REST · Twilio SMS · Langfuse evals.

Outcome

After-hours booking capture moved from 0% to ~25%. CSR time on routine status calls fell from 3 hours to 45 minutes per shift. ~$24K in net new monthly revenue. Payback under 3 weeks.

25%
after-hours callers booked (was 0%)
$24K
incremental monthly revenue
<3 wks
payback on build cost