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.
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). (1) Outbound 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). (2) 5-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. (3) Inbound Kate: same 4-bucket routing and qualification flow, 24/7, with `after_hours_flag` variable changing greeting and downstream routing. (4) Post-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. (5) Text 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. (6) DB 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.
Tech Stack
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