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
AI
Backend
Data
- Practice
- Outbound Voice Agent
- Sector
- Residential Solar
- Shape
- Client engagement
- Stack
- Twilio, Deepgram, OpenAI
Something like this to build?
Tell us what runs today and where it hurts. An engineer reads it and replies.