Speed to lead is one of those problems that sounds simple until you actually try to solve it at scale.
A buyer fills a real estate form. Industry data says contact rate drops 400% after the first 5 minutes. Most sales teams are calling leads an hour later. By then the buyer has moved on.
The obvious answer is call faster. The real answer is you cannot do that manually at volume. You need a system.
We built one. This post covers the architecture, the decisions behind it, and what we learned.
The client was a real estate lead generation company. They generate buyer leads through Meta, Google, and TikTok ads and sell those leads to real estate agents.
Three problems kept coming up.
Agents were not calling leads fast enough. Some were not calling at all. And when agents reported leads as unreachable, there was no way to verify whether they had actually tried.
Lead generated β CRM β Agent assigned β Agent calls (maybe, eventually)
β
Lead already went cold
The fix needed to happen between "lead enters CRM" and "agent gets involved." That window needed to be automated.
An AI voice and SMS qualification system that triggers the moment a new lead hits the CRM.
Lead enters CRM (GoHighLevel)
β
Automation triggers (Make.com)
β
VAPI places AI voice call
β
ElevenLabs voice renders conversation
β
AI qualifies lead in real time
β
Outcome returned to Make.com
β
CRM updated automatically
β
SMS fallback if no answer
Simple flow on paper. A few things worth unpacking in each layer.
| Layer | Tool | Role |
|---|---|---|
| CRM | GoHighLevel | Lead storage, pipelines, triggers |
| Automation | Make.com | Integration orchestration between all systems |
| Voice AI | VAPI | AI voice call handling and control |
| Text to speech | ElevenLabs | Realistic voice output |
| Logic layer | Custom prompt + rules | Qualification decision making |
No exotic stack. The interesting work was in the prompt engineering, qualification logic, and CRM state management.
GoHighLevel handles the CRM side. When a new lead hits a specific pipeline stage, it fires a webhook to Make.com.
Make.com acts as the orchestration layer. It receives the webhook, extracts lead data, and fires the VAPI call with the right context attached.
{
"lead_id": "12345",
"name": "Rahul",
"phone": "+919876543210",
"budget": "80L - 1Cr",
"timeline": "3-6 months",
"has_agent": false
}
That context goes into the AI voice agent as part of the call setup. The agent knows who it is calling and what information was already captured before the conversation starts.
The agent is named Sarah. The call has one job: qualify the lead in under 3 minutes.
Three things the call checks:
That is it. No pitch. No property details. No lengthy qualification form read out loud.
The qualification logic is deterministic:
IF still_buying == true AND no_existing_agent == true
β Mark as QUALIFIED
β Capture availability
β Route to agent queue
IF not_buying OR has_existing_agent
β Mark accordingly
β Close lead
IF no_answer
β Trigger SMS fallback
β Retry logic based on time of day
Keeping the logic simple was a deliberate choice. The more conditions you add, the more edge cases you create in the conversation flow. Under 3 minutes means the agent needs to get in, get the answers, and get out cleanly.
A few things that made a real difference in call quality.
Persona consistency. Sarah introduces herself the same way every time. Name, company, reason for calling. No variation. Buyers who answer know immediately who they are talking to and why.
Short questions. The AI asks one thing at a time. Not "are you still looking to buy and do you have an agent and what is your timeline" in one breath. One question. Wait for response. Move to the next.
Natural handling of objections. Buyers sometimes say things like "how did you get my number" or "I already spoke to someone." The prompt has handling for common responses so the conversation does not break when something unexpected comes up.
Hard stop conditions. If the buyer says do not contact, the agent ends the call immediately, logs the outcome, and flags the lead as DNC. No retry. No SMS. Immediate stop.
If the call goes unanswered, Make.com triggers an SMS within a few minutes.
"Hi [Name], this is Sarah from Home Front Connect.
You recently requested information about buying a home.
When would be a good time for one of our partner agents to reach you?"
Short. Direct. Not salesy. The goal is to get a response, not to close anything.
If the buyer replies, the response goes back into GoHighLevel and triggers a notification to the assigned agent. The agent follows up with context from both the call attempt and the SMS exchange.
Every outcome maps to a specific pipeline stage in GoHighLevel.
Qualified β Move to "Qualified Leads" pipeline
Not Interested β Move to "Closed - Not Interested"
Has Existing Agent β Move to "Closed - Has Agent"
Do Not Contact β Move to "DNC" + flag
No Answer β Stay in "New Lead" + SMS sent tag
This is important for two reasons. Agents only see leads in the qualified pipeline. They are not manually sorting through outcomes. And the full history of every contact attempt is visible in the lead record without anyone needing to update it manually.
Accountability problem solved. Every call attempt has a timestamp, an outcome, and a recording.
Phase 1 handles first contact and qualification. Phase 2 adds live transfer.
When a buyer answers the call and qualifies, instead of just booking a callback time, the AI can transfer the call directly to the assigned agent in real time.
Buyer answers β AI qualifies β Live transfer to agent
β
Agent receives warm transfer
with lead context already loaded
This requires agent routing logic. Each lead maps to a specific agent based on CRM tags and conditional logic in Make.com. If the agent does not pick up within a defined window, the call falls back to voicemail or an alternative agent.
Transfer attempts, agent responses, and call recordings all get logged. If an agent later claims a lead was unreachable, the transfer log shows exactly what happened.
The SMS timing needed more thought than we gave it initially.
Our first version sent the SMS almost immediately after a missed call. Some buyers found it too fast. It felt like a pile-on rather than a helpful follow-up.
We adjusted to a short delay after the missed call before the SMS fires. Small change. Noticeably better response rate.
The other thing we underestimated was edge cases in the conversation flow. Buyers say unexpected things. "I filled this for my brother." "I already visited the site." "Is this the developer calling?" Each of these needs handling or the conversation stalls awkwardly. We iterated on the prompt more than expected to cover the most common ones.
Keep the call short and focused. Under 3 minutes is achievable if you resist the urge to ask too many questions. Qualify intent. Capture availability. Hand off.
Deterministic qualification logic beats fuzzy AI judgment. The AI should understand the conversation. The qualification decision should follow clear rules. Mixing the two creates inconsistency.
CRM state is everything. If the outcome of every call does not flow back into the CRM cleanly, the system breaks down fast. The CRM update step is as important as the call itself.
Test with real phone numbers early. Voice quality, call pickup rates, and conversation flow all behave differently in production than in testing. Get real calls happening as early as possible in development.
SMS copy matters more than you expect. The SMS fallback is often the first thing the buyer reads from you. Keep it short, human, and low pressure.
This was not a complicated system to build technically. The stack is conventional, the integration points are well-documented, and the call logic is simple by design.
What made it worth building was the clarity of the problem. A lead is most valuable the moment it is created. Every minute of delay reduces that value. A system that closes that gap automatically, consistently, at any hour, at any volume, solves a real problem.
The technology for this has been available for a while. Most real estate companies just have not built it yet.
Built by the team at CIZO. We build AI systems, mobile apps, and IoT solutions. Say hi: hello@cizotech.com