Full-Stack AI Lead Engine: 2 Voice Agents + SMS Text Engine + DB Reactivation + 5-System Booking Chain
Six interconnected systems turning inbound calls, web form leads, and a 4,000-contact database into confirmed ServiceTitan bookings — zero dispatcher involvement from form fill to booked job. Live in Tucson, AZ since December 2025.
6
Systems built
24/7
Call coverage
4K+
Contacts reactivated
<10s
Form fill to ServiceTitan booking
The Problem
- Goodfellas AC was losing HVAC leads to competitors who called faster.
- Web form submissions sat uncontacted for hours.
- Inbound calls during peak season went unanswered.
- A database of thousands of dormant contacts had never been re-engaged.
- Every qualification call required a dispatcher manually walking through 5 data points before ServiceTitan could be touched — capping throughput and creating a bottleneck.
- After-hours calls hit voicemail and were never recovered.
- No call analytics existed: no sentiment tracking, no routing decisions logged, no visibility into why leads didn't convert.
The Solution
Built six interconnected systems on self-hosted n8n (Coolify/VPS).
01Outbound Kate
- GHL form
- n8n normalises phone to E.164
- Retell AI call fires within minutes using a 5-question qualification script (issue type, unit type, duration, urgency, preferred day) with 4-bucket routing (billing/warranty, frustrated customers, general CS → immediate human transfer; service requests → qualification).
025-System Booking Chain
- Retell
- n8n
- GHL (find/create contact, book natively)
- Zapier webhook
- ServiceTitan (HomeBuddy provider, non-job appointment in Unassigned status with full dispatcher notification) — completes in under 10 seconds.
03Inbound Kate
- same 4-bucket routing and qualification flow, 24/7, with `after_hours_flag` variable changing greeting and downstream routing.
04Post-Call Analytics
- every call logged to PostgreSQL with 15+ fields — duration, recording URL, customer sentiment, routing category, issue type, unit type, urgency, booking status, disconnection reason — with 7-branch GHL follow-up routing on outcome.
05Text Engine
- 4 n8n workflows pulling 60-message conversation history from PostgreSQL, routing to 4 AI agent types (Website, Engagement, Follow-up, KB-only) with 6 booking functions (get slots, book, get/cancel/reschedule appointments, timezone check) — KB stored as vector embeddings in Supabase.
06DB Reactivation
- CSV upload triggers a 26-hour per-lead sequence: SMS
- AI call 10 minutes later
- SMS #2 two hours post-call
- email at 26 hours;
- any reply exits the sequence.
Results
Zero dispatcher time on lead qualification — every booking arrives in ServiceTitan Unassigned queue fully pre-qualified with all 5 data points, service address, and contact record already created
Inbound and outbound calls handled 24/7 with after-hours detection changing agent greeting and routing flags automatically
4,000+ dormant contacts cycled through a structured 26-hour multi-touch sequence: SMS → AI call → SMS → email, with any reply triggering immediate exit
5-system booking chain (Retell → n8n → GHL → Zapier → ServiceTitan) completing in under 10 seconds with 2-minute timeout fallback to direct booking link
15+ fields of call intelligence logged to PostgreSQL per call — sentiment, routing category, issue type, unit type, urgency, booking status, recording URL
Text engine routing conversations to 4 specialist AI agents with 60-message memory from PostgreSQL and 6 live booking functions including slot retrieval and cancellation
Tech Stack
Want something like this?
Tell me what you're building. I'll tell you honestly if I can help.