Conversational AI Voice System for Real Estate Lead Qualification
This brief proposes a real estate voice AI lead qualification platform built on Retell AI and Twilio: a low-latency conversational stack that would handle inbound seller screening, outbound follow-up and nurturing calls, appointment setting, voicemail detection, and warm transfer to human agents — with structured lead records synced to the brokerage CRM.
Proposed outcome: A production voice pipeline where every call captures seller intent, property context, and timeline in CRM-ready JSON, routes hot leads to available agents within seconds, and leaves compliant voicemails or nurture callbacks when humans are unavailable — with sub-800 ms turn latency on live PSTN calls.
Scenario
This is a proposed solution for a US real estate team or investor operation that needs to scale seller outreach without hiring a full inside-sales floor.
- Business model: Residential brokerage, wholesaler, or iBuyer-style acquisition team qualifying motivated sellers
- Call types: Inbound from ads, yard signs, and portal leads; outbound to aged CRM lists and form abandoners
- Human team: 2–8 licensed agents or acquisition reps; AI handles first touch and scheduling
- CRM: Follow Up Boss, kvCORE, HubSpot, or Salesforce with custom lead stages
- Compliance: TCPA consent tracking for outbound; call recording disclosure per state; DNC list checks before dial
- POC gate: Paid proof-of-concept demonstrating live voice, seller qualification script, and transfer logic before full build
Problem
Real estate teams lose margin when every seller call requires a licensed rep from hello to hang-up. Manual dial-and-qualify workflows do not scale, and generic IVR trees cannot hold a natural conversation about property condition, equity, or timeline.
- Missed inbound leads — portal and ad leads call after hours; voicemail yields dramatically lower contact rates than a live answer
- Rep time on unqualified sellers — agents spend 15–20 minutes per call on curiosity callers with no timeline or equity
- Outbound scale ceiling — manual dialers cannot nurture hundreds of aged leads without burnout or TCPA mistakes
- Fragmented call notes — transcripts live in the voice dashboard or rep memory, not CRM fields reps actually filter on
- Latency kills trust — response gaps above ~1.2 s feel robotic; sellers hang up before qualification completes
- Transfer friction — cold transfers drop context; agents re-ask address and motivation already captured by the AI
- Voicemail inconsistency — reps leave ad-hoc messages; no structured callback scheduling or CRM task creation
- Regulatory exposure — outbound seller outreach without consent logs and time-zone windows creates TCPA risk
Requirements
Functional
- Inbound qualification: Retell agent on Twilio DID answers 24/7; captures address, condition, timeline, motivation, and price expectation
- Outbound follow-up: Campaign dialer triggers Retell outbound calls from CRM segments with consent flags
- Appointment setting: Calendar tool books listing consultation or acquisition call against agent availability
- Lead nurturing: Multi-touch voice sequences (day 1, 3, 7) with script variants by lead temperature
- Warm transfer:
transfer_callto agent ring group with whisper summary (address + motivation + timeline) - Voicemail handling: AMD detects machine; leave compliant 25–30 s message; create CRM task for callback
- Escalation rules: High equity + short timeline → immediate transfer; low intent → nurture queue
- CRM write-back: Post-call webhook pushes structured lead JSON, disposition, and recording URL
Non-functional
- End-to-end turn latency: Target 600–900 ms median (STT + LLM + TTS + telephony buffer)
- Interruption handling: Barge-in enabled; agent stops TTS when caller speaks
- Availability: 99.5% on Retell + Twilio managed services; orchestrator on redundant host
- Audit: Every call logged with
call_id,lead_id, disposition, transfer outcome - Security: PII encrypted at rest; webhook HMAC verification; secrets in vault
- Testability: Staging Retell agent + Twilio test numbers; recorded golden-path regression calls
Architecture
Retell owns the real-time voice loop — STT, LLM reasoning, TTS playback, interruption, AMD, and transfer. A thin orchestrator service sits behind Retell webhooks to enforce business rules, write CRM records, schedule nurture callbacks, and gate outbound campaigns on TCPA consent.
System architecture — Retell handles live voice; orchestrator enforces qualification rules, CRM sync, outbound pacing, and warm transfer routing
Warm transfer sequence — agent hears AI-generated whisper with address and motivation before seller is bridged; no-answer path creates CRM callback task
Component map by integration layer (major services per tier)
End-to-end flow
Happy-path pipeline — low-score leads enter nurture cadence instead of burning agent time; hot leads bypass queue via warm transfer
Indicative turn latency budget — target 600–900 ms median on US PSTN (production-tuned Retell + ElevenLabs turbo)
Expected call disposition mix after qualification tuning (illustrative steady-state outbound campaign)
Recommended stack
Recommendation: Use the stack implied by the requirements — Retell AI as the voice runtime, Twilio for telephony and ring groups, OpenAI GPT-4o mini for live turns (GPT-4o for complex objection handling), and ElevenLabs eleven_turbo_v2_5 with a warm American voice for TTS. A small FastAPI or Node.js orchestrator would own webhooks, CRM adapters, and outbound campaign pacing.
| Layer | Technology | Why |
|---|---|---|
| Voice platform | Retell AI | Native telephony, barge-in, AMD, warm transfer — weeks faster than DIY STT/LLM/TTS glue |
| Telephony | Twilio Voice + SIP | US local DIDs, ring groups, recording, compliance APIs, mature AMD |
| LLM | OpenAI GPT-4o mini (live) / GPT-4o (complex) | Fast structured extraction; function calling for CRM and calendar tools |
| TTS | ElevenLabs eleven_turbo_v2_5 | Most natural American conversational prosody at Retell-compatible latency; strong emotion control for empathy |
| STT | Deepgram nova-2 (via Retell) | Telephony-tuned accuracy; handles seller addresses and numbers reliably |
| Orchestration | FastAPI or Node.js Fastify | Retell webhooks, CRM adapters, campaign scheduler, idempotent writes, HMAC verify |
| Memory | Redis + PostgreSQL | Per-call dynamic variables in Redis; durable lead state and nurture cadence in Postgres |
| CRM | Follow Up Boss API (or HubSpot) | Real-estate-native stages, tags, call logging, lead routing rules |
| Calendar | Cal.com or Google Calendar API | Agent availability for appointment-setting tool |
| Outbound queue | BullMQ or Temporal | Campaign pacing, retry windows, TCPA local-time enforcement |
| Observability | Retell dashboard + Grafana | Latency spans, transfer rate, qualification field completion |
Why Retell over raw Twilio + OpenAI Realtime? Retell ships turn-taking, interruption, AMD, and transfer primitives tuned for phone audio. Rebuilding those behaviors on PSTN typically adds 4–6 weeks and ongoing edge-case maintenance.
Why ElevenLabs over Cartesia or PlayHT? ElevenLabs turbo voices deliver the most convincing US English seller-facing tone at sub-second synthesis. Cartesia is a credible fallback if minute volume exceeds ElevenLabs cost targets; PlayHT is viable but often needs more prompt tuning for natural fillers and pacing.
Why a custom orchestrator over Zapier? Warm transfer whisper payloads, TCPA gating, DNC checks, and idempotent CRM writes require tested code paths — not brittle multi-step Zaps.
Realistic end-to-end latency: On a tuned Retell deployment with GPT-4o mini and ElevenLabs turbo, expect 650–850 ms median turn latency on US mobile PSTN; p95 may reach 1.1 s on poor cell routes. Sub-600 ms is achievable on Wi-Fi WebRTC test calls but should not be promised as a PSTN SLA.
Agent & component design
1 — Retell inbound qualification agent
- Input: Twilio inbound call; dynamic variables from CRM lookup by caller ID (
lead_name,prior_notes,source) - Persona: Professional acquisition coordinator — disclosure line, empathetic tone, concise questions
- Qualification script: Property address → occupancy → condition → motivation → timeline → price expectation → mortgage/liens
- Tools:
update_lead,book_appointment,transfer_to_agent,schedule_callback - Output: Structured JSON + transcript via
call_analyzedwebhook - QA gate: 10 recorded seller personas; all required fields populated; hot-lead fixture triggers transfer within 30 s of score
2 — Retell outbound nurture agent
- Input: Orchestrator-initiated outbound call with
lead_id, attempt number, and temperature band (cold / warm / hot) - Script variants: First touch re-introduces offer; second touch references prior voicemail; third touch final courtesy close
- Compliance gate: Orchestrator refuses dial if consent flag false, DNC hit, or outside 8am–9pm local window
- AMD branch: Machine detected → 28 s voicemail → CRM task; human → full qualification dialog
- QA gate: Staging campaign of 20 numbers including known voicemail boxes; zero dials without consent in audit log
3 — Orchestrator webhook service
Retell posts signed webhooks to the orchestrator. Example handler pattern for post-call CRM sync:
from fastapi import FastAPI, Request, HTTPException
import hmac, hashlib, os
app = FastAPI()
REQUIRED_FIELDS = [
"property_address", "motivation", "timeline_days",
"condition", "price_expectation", "occupancy"
]
def verify_retell_signature(body: bytes, signature: str) -> bool:
expected = hmac.new(
os.environ["RETELL_WEBHOOK_SECRET"].encode(),
body,
hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected, signature)
@app.post("/webhooks/retell/call-analyzed")
async def call_analyzed(request: Request):
body = await request.body()
if not verify_retell_signature(body, request.headers.get("x-retell-signature", "")):
raise HTTPException(status_code=401)
payload = await request.json()
analysis = payload.get("call_analysis", {})
lead = {k: analysis.get(k) for k in REQUIRED_FIELDS}
lead["disposition"] = analysis.get("disposition", "nurture")
lead["recording_url"] = payload.get("recording_url")
await crm_upsert(payload["metadata"]["lead_id"], lead)
if lead["disposition"] == "hot":
await notify_agent_pool(lead)
return {"ok": True}
4 — Transfer router
| Rule | Condition | Action |
|---|---|---|
| Hot transfer | Timeline ≤ 60 days AND motivation ≥ threshold | Warm transfer to on-duty ring group with whisper |
| Book appointment | Interested but timeline > 60 days | Calendar tool → CRM appointment + confirmation SMS |
| Nurture | Low urgency or incomplete info | Schedule outbound attempt +2 days; tag CRM ai_nurture |
| Voicemail | AMD positive on outbound | Leave script variant by attempt #; CRM task due +4 business hours |
| No agent answer | Transfer rings 25 s unanswered | Offer callback slot; SMS summary to assigned agent |
| DNC / opt-out | Caller requests stop | Immediate end; CRM do_not_call; cancel nurture jobs |
5 — Retell agent configuration (illustrative)
{
"agent_name": "seller-qualification-inbound",
"voice_id": "11labs-Adrian",
"language": "en-US",
"response_engine": {
"type": "retell-llm",
"llm_id": "gpt-4o-mini-seller-qual",
"begin_message": "Hi, this is Alex with {{company_name}} — this call may be recorded. How can I help with your property today?"
},
"enable_backchannel": true,
"interruption_sensitivity": 0.8,
"ambient_sound": "call-center",
"post_call_analysis_data": [
{ "name": "property_address", "type": "string" },
{ "name": "motivation", "type": "enum", "choices": ["relocating", "inheritance", "financial", "distress", "curious"] },
{ "name": "timeline_days", "type": "number" },
{ "name": "disposition", "type": "enum", "choices": ["hot", "warm", "nurture", "not_interested"] }
],
"general_tools": [
{ "type": "transfer_call", "name": "transfer_to_agent", "transfer_destination": "{{agent_ring_group}}" },
{ "type": "custom", "name": "update_lead", "url": "https://api.example.com/tools/update-lead" },
{ "type": "custom", "name": "book_appointment", "url": "https://api.example.com/tools/book-appointment" }
]
}
6 — Campaign scheduler
- Source: CRM segment API — e.g. leads tagged
form_abandonoraged_30dwithsms_voice_consent=true - Pacing: Max 8 concurrent outbound Retell calls; exponential backoff on carrier busy signals
- Idempotency:
lead_id + attempt_numberkey prevents duplicate same-day dials on webhook retry
Qualification funnel — illustrative conversion from connected calls to completed field sets, appointments, and hot transfers
Typical inbound call lifecycle — median duration by stage (illustrative, post-tuning)
Implementation plan
Phase 1 — Paid proof-of-concept (week 1–2)
Provision staging Retell agent with ElevenLabs voice and seller qualification prompt. Attach one Twilio number. Implement transfer_to_agent to a test mobile with whisper summary. Record live demo: inbound call → qualification → warm transfer. Deliver POC recording and architecture doc for stakeholder sign-off before production scope.
Risk: Prompt drift causes incomplete field capture — iterate on 5 internal test calls daily. Rollback: Twilio number forwards to owner cell; POC agent disabled in Retell dashboard.
Phase 2 — Inbound production agent (week 3–4)
Production DID, recording disclosure variants by state, CRM caller-ID lookup for dynamic variables, orchestrator webhook with HMAC verify, post-call JSON mapping to CRM custom fields. Load-test 20 concurrent inbound calls on staging.
Risk: CRM API rate limits on peak ad bursts — add queue + retry with dead-letter alert. Rollback: Retell failover number routes to human ring group.
Phase 3 — Outbound + nurture cadence (week 5–6)
Campaign scheduler, TCPA consent + DNC checks, three-touch outbound script variants, AMD voicemail branch, disposition-based routing. Pilot on 200-lead segment before full list.
Risk: Carrier labeling as spam — register SHAKEN/STIR, use local presence DIDs, cap daily attempts. Rollback: pause BullMQ queue; inbound agent unaffected.
Phase 4 — Warm transfer + voicemail hardening (week 7)
Twilio ring group for agents, whisper payload template, 25 s no-answer fallback, callback scheduling tool, opt-out handling. Agent training session on whisper format and CRM task workflow.
Risk: Agents miss whisper if they answer too fast — extend whisper to 8 s or send parallel SMS summary. Rollback: disable transfer; AI books appointments only.
Phase 5 — Reporting, latency tuning, ops (week 8)
Grafana dashboard: turn latency p50/p95, qualification completion %, transfer connect rate, voicemail callback SLA. Tune LLM model split, ElevenLabs stability setting, and Retell interruption sensitivity from production traces.
Risk: Over-tuning for latency sacrifices empathy — A/B test seller hang-up rate vs. response delay. Rollback: revert to prior Retell agent version snapshot.
Phase 6 — Production hardening + handover (week 9–10)
15-persona regression suite in CI, secrets rotation runbook, on-call playbook for Retell/Twilio outages, documented prompt change process, and 30-day hypercare with weekly tuning reviews.
Risk: Undocumented prompt edits in Retell UI — lock production changes behind Git-backed config export. Rollback: blue/green Retell agents with traffic switch via Twilio number config.
Reporting & ops
| Signal | Source | Cadence |
|---|---|---|
| Median turn latency (p50 / p95) | Retell analytics + orchestrator OpenTelemetry spans | Daily during first 30 days |
| Qualification completion rate | Calls with all required fields / connected calls | Weekly |
| Warm transfer connect rate | Transfers answered / transfer attempts | Weekly |
| Hot-lead SLA | Time from hot disposition to agent bridge | Real-time alert if > 45 s |
| Outbound contact rate | Human / machine / no-answer / wrong number | Per campaign |
| Voicemail callback completion | CRM tasks closed within 24 h | Weekly |
| CRM sync failures | Webhook 4xx/5xx + dead-letter queue depth | Immediate Slack alert |
| Cost per qualified lead | Retell + Twilio + ElevenLabs + OpenAI / qualified dispositions | Monthly |
Ops cadence would include a daily 10-minute review of failed webhooks and stuck nurture jobs, plus a weekly 45-minute prompt and script tuning session with acquisition managers. Retell agent changes would flow through staging regression before promotion; Twilio balance and Retell minute quotas would alert at 80% threshold.
Proposed deliverables
Following the phased plan, a build would ship these artifacts:
- Retell production agents — inbound qualification and outbound nurture — with ElevenLabs voice and tool definitions
- Twilio number pool, agent ring group, call recording, AMD, and SHAKEN/STIR registration
- Orchestrator service (FastAPI or Node) with CRM adapter, signed webhook handlers, and nurture scheduler
- Seller qualification prompt pack and JSON schema mapped to CRM custom fields
- Warm transfer runbook with whisper script and agent training one-pager
- Voicemail message templates aligned to state recording-disclosure rules
- Paid POC demo recording and staging environment for stakeholder acceptance
- Grafana dashboard — latency, dispositions, transfer funnel, cost per qualified lead
- 15-persona regression test suite with expected field extractions
- Operator runbook — pause campaigns, rotate API keys, CRM outage mode, blue/green agent promotion
Effort estimate
Indicative effort for POC through production hardening (assumes CRM API access, Twilio account, and stakeholder availability for UAT calls):
| Scope | Hours (range) |
|---|---|
| Phases 1–6 (POC + inbound + outbound + transfer + reporting + hardening) | 180–280 hrs |
| Salesforce custom-object integration (if not Follow Up Boss / HubSpot) | +30–50 hrs |
| Ongoing prompt tuning, new nurture scripts, list segmentation | 4–8 hrs/month |
| Platform costs (indicative monthly at 2–5 k call minutes) | Retell, Twilio, ElevenLabs, OpenAI — typically USD 800–2,500 |
The hour range reflects CRM complexity, number of outbound segments, and how many edge cases appear in live seller conversations during UAT. The paid POC (Phase 1) would be scoped separately — typically 20–35 hrs — to de-risk the full engagement before multi-month buildout.
Glossary
| Term | Meaning |
|---|---|
| Retell AI | Voice-agent platform integrating telephony, STT, LLM, and TTS with transfer, AMD, and analysis webhooks |
| Warm transfer | Handoff to a human agent with AI-provided context whisper before the seller is connected |
| AMD | Answering Machine Detection — signal distinguishing live human from voicemail on outbound calls |
| Turn latency | Time from caller stop-speaking to agent audio start — critical for natural phone dialog |
| Barge-in | Caller interruption while the agent speaks; TTS stops immediately when enabled |
| TCPA | US Telephone Consumer Protection Act — governs outbound call and text consent requirements |
| Disposition | Call outcome label: hot, warm, nurture, not interested, wrong number, transferred |
| Dynamic variables | Per-call Retell context (lead name, address, prior notes) injected into the system prompt |
| Whisper | Agent-only audio summary played before bridging the seller on warm transfer |
| Post-call analysis | Retell structured extraction schema populated after call end for CRM sync |