600 homeowners qualified in a week, with site visits booked on the call

A regional solar installer paid a call centre to work cold lists, and most qualified leads went stale before a consultant rang back. We built an outbound voice agent that dials within compliant hours, holds a real conversation about roof age, utility bills and timeline, scores each lead as it talks, and books the site visit or routes the hot ones to a live consultant while the homeowner is still on the line.

4x
More leads qualified per day
38%
Qualified to site visit
0s
Wait for a callback

What they came with

Cold lists went out to a call centre, and the homeowners who said yes sat in a queue until a consultant had time to ring back. By then the interest had cooled and the site visit was never booked. Whoever did the qualifying could not put a slot in the diary themselves, so every good conversation had to turn into a second conversation, and often it did not. Paid dialling that ends in a callback nobody makes is a cost with no output.

What the engagement covered

  • Qualification checklist filled live from the conversation, with every answer timestamped to the recording
  • Warm transfer to an available consultant the moment a lead crosses the score threshold
  • TCPA calling windows, consent capture and do-not-call suppression enforced before each dial

Technical detail

Dialling inside legal call windows

Celery schedules the list in batches and each number is checked against the do-not-call file and the calling window for its area before the task is allowed to place a call. Numbers outside the window are requeued for the next permitted slot rather than dropped from the campaign.

Streaming audio with barge-in

Twilio media streams carry call audio to transcription and back to ElevenLabs, with synthesis starting as the model's first tokens arrive so the gap between turns stays short. Playback is cancelled the moment the homeowner speaks over the agent, which keeps the call from talking across an objection.

Qualification as a typed schema

Roof age, bill size and ownership are captured as typed fields rather than free text, and the booking step only runs once all three are filled. A half-finished conversation therefore cannot put a visit in a consultant's diary.

Idempotent write-back to the CRM

Disposition, recording and transcript are posted to the CRM keyed on the call identifier, so a retry after a failed write replays the same key instead of creating a second record. Failed writes are held in the queue and replayed rather than lost with the worker.

The stack

Telephony

Twilio Programmable VoiceTwilio Media Streams

AI

GPT-4oElevenLabsWhisper

Backend

PythonFastAPICeleryRedis

Data

PostgreSQLS3
Practice
Outbound Voice Agent
Sector
Residential Solar
Shape
Client engagement
Stack
Twilio, Deepgram, OpenAI