Every new lead needed the same first call: what is the budget, what is the timeline, what are you actually looking for. Every one of those calls took an agent's time, and the answers still had to be typed back into the sheet.
- manual dials in the workflow's design
- 0
- fields per call: intent, budget, timeline, objections, follow-ups
- 5
- n8n flows: a dialing loop and a call-result webhook
- 2
From the delivered workflow, 2025. No call volumes or conversion figures are claimed.
Real-estate sales team working leads from a shared Google Sheet, Delivered 2025
Before the build.
The team kept its leads in a Google Sheet that worked as a lightweight CRM. They wanted every pending lead called and qualified without an agent dialing.
What I built.
n8n loops the pending leads, Retell AI places each call, and OpenAI turns the transcript into five fixed fields.
Three parts: the loop, the voice, and the step that makes a conversation sortable.
- A dialing loop in n8n
- A voice agent that asks the qualifying questions
- Summaries the CRM can use
What is true today.
- The workflow gives every pending lead a first call without an agent dialing.
- Each call lands in the sheet as the same fields: intent, budget, timeline and the next step.
- Budget and timeline land in fixed fields, so agents can sort which leads to call back first.
He's very skilled with n8n, communicates clearly, and delivers fast. If you need automation work done, he makes the process easy and reliable.
How I build voice agents for clients
Updated
The details, when you need them.
A dialing loop in n8n
An HTTP request asks Retell AI to place the call, passing the phone number, the lead's name, source and property interest, and a callback webhook.
A voice agent that asks the qualifying questions
The Retell agent talks to the lead about budget, timeline and property interest, then posts the transcript and the call metadata (duration and outcome) to an n8n webhook.
Summaries the CRM can use
An OpenAI summarisation chain turns each transcript into compact JSON, and n8n writes it into the lead's row.
- Works the pending list, paced
- Runs in the team's own n8n and sheet
- Writes five fixed fields, nothing else
lead-qualification-call
Get pending leads from Google Sheets
Loop over the leads
Check eligibility
IF node
POST the call to Retell AI
phone, lead context, callback URL
Wait between calls
pacing and no-answer handling
Webhook receives the result
transcript, duration, outcome
Summarise with OpenAI
intent, budget, timeline, objections, follow-ups
Update the lead's row
status, last contact, summary, next step
Two flows / zero manual dialing
What happens when it fails?
- Calls are paced with wait nodes, so the list is worked through at a steady rate instead of all at once.
- No-answers are handled and re-queued instead of dropped.
- Call results come back through their own webhook, so a long call never blocks the dialing loop.
- The summary is structured JSON with fixed fields, so every row in the CRM has the same shape.
What I could not show you
- No lead, phone number, recording or transcript appears on this page.
- Call volumes and conversion are not claimed. The client's own public review is quoted verbatim and is the only outcome statement here that is not mine.
Measurements and project details
- Client
- Real-estate sales team working leads from a shared Google Sheet
- Industry
- Real estate
- Region
- Remote
- Timeline
- Delivered 2025
- Role
- AI engineer: workflow, voice agent and CRM integration
Stack
- n8n
- Retell AI
- OpenAI API
- Google Sheets
- Webhooks