All Work
AI AgentsHVAC / Home ServicesDeployed · United States

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.

Client: Goodfellas Air Conditioning & PlumbingVisit siteRead full case study

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

GHLn8nRetell AIZapierServiceTitanPostgreSQLSupabaseOpenRouterOpenAITwilio

Want something like this?

Tell me what you're building. I'll tell you honestly if I can help.