Zappio Team
AI & Real Estate Experts · 27 June 2026 · 12 min read
Zappio Team
AI & Real Estate Experts · 27 June 2026 · 12 min read
A significant portion of India's largest real estate developer groups do not run their sales operations on Sell.Do, LeadSquared, or Salesforce. They run on proprietary, internally-built CRM systems — custom-developed platforms built by their in-house technology teams or external software vendors, often years ago, and evolved through layers of customization to serve specific business workflows. These bespoke systems cannot use pre-built CRM connectors. They require a custom webhook architecture that connects the AI Calling Agent to the developer's proprietary lead management infrastructure.
This article is written for the solution architects, engineering leads, and CTO-level technologists at real estate developer groups who need to build and maintain this integration themselves. It covers the complete webhook + API architecture, the data contract between systems, error handling and retry logic, and the security considerations specific to voice AI integrations handling PII in real estate sales contexts.
Before writing a single line of code, the AI Calling Agent platform and the custom CRM must establish a data contract — a shared agreement on the format, schema, and timing of data exchange. Getting this contract wrong creates silent data corruption: leads are called but disposition data writes to the wrong fields; site visits are booked but the CRM shows no record; DNC flags are set but the system re-dials the next day.
The data contract covers three interaction points:
The CRM fires a webhook to the AI Calling Agent's inbound endpoint upon lead creation or when a lead enters the "to be called" queue. The webhook payload must be minimal, complete, and idempotent.
{
"event": "lead.created",
"timestamp": "2026-07-01T14:32:00+05:30",
"idempotency_key": "CRM-LEAD-20260701-001234",
"lead": {
"id": "CRM-LEAD-001234",
"phone": "+919800000000",
"phone_alt": "+919700000000",
"name": "Arjun Kapoor",
"source": "99acres",
"campaign_id": "META-JUN26-DWK",
"project_interest": "Dwarka Expressway 3BHK",
"project_id": "PROJ-DWK-PHASE2",
"language_preference": "hindi",
"created_at": "2026-07-01T14:31:55+05:30",
"call_priority": "high"
}
}Critical design decisions in the lead push:
The CRM must authenticate its webhook requests to prevent unauthorized lead injection, using an HMAC signature and timestamp header. The AI Calling Agent validates the HMAC signature against the shared secret, confirms the timestamp is within ±5 minutes (preventing replay attacks), and confirms the idempotency_key has not been processed in the last 24 hours.
Before initiating any call, the AI Calling Agent must query the CRM to confirm the lead is still in a callable state. This prevents calling a lead a human BDR already qualified 30 minutes ago, calling a lead manually marked DNC after form submission, or calling a lead already marked "Booked" in high-concurrency launch scenarios.
GET /api/leads/{lead_id}/status
Authorization: Bearer {ai_agent_api_key}
Response:
{
"lead_id": "CRM-LEAD-001234",
"callable": true,
"status": "new",
"dnc": false,
"human_contacted": false,
"last_call_attempt": null
}If callable: false is returned, the AI Calling Agent logs a suppression event and does not initiate the call. This query adds ~50ms latency before call initiation — negligible against the 90-second first-contact target.
This is the most critical integration surface. The AI Calling Agent must write structured disposition data to the CRM within 30 seconds of call completion — while the buyer's data is fresh and before any human agent views the record.
POST /api/leads/{lead_id}/disposition
{
"call_metadata": {
"call_id": "ZAP-CALL-20260701-XXXX",
"duration_seconds": 306,
"recording_url": "https://storage.zappio.ai/recordings/ZAP-CALL-XXXX.mp3",
"transcript_url": "https://storage.zappio.ai/transcripts/ZAP-CALL-XXXX.json"
},
"qualification": {
"outcome": "qualified_visit_booked",
"ai_intent_score": 82,
"budget_min": 8500000,
"budget_max": 12000000,
"bhk_preference": "3BHK",
"possession_timeline": "18_months",
"loan_required": true,
"purchase_intent": "end_use",
"nri_flag": false
},
"site_visit": {
"booked": true,
"date": "2026-07-05",
"time_slot": "11:00",
"timezone": "Asia/Kolkata"
},
"flags": {
"dnc_requested": false,
"duplicate_detected": false,
"language_used": "hindi"
}
}Outcome enum values the CRM must handle: qualified_visit_booked, qualified_no_visit, callback_requested, not_interested_budget, not_interested_location, not_interested_timeline, already_purchased, wrong_number, dnc_requested, no_answer, invalid_number, and duplicate_suppressed.
Custom CRM endpoints will occasionally fail — network timeouts, database locks during high-concurrency launch periods, or deployment downtime. The AI Calling Agent must implement a robust retry pattern to prevent disposition data loss:
| Attempt | Delay | Action on Failure |
|---|---|---|
| 1 (immediate) | 0s | Write disposition data |
| 2 | 30s | Retry if HTTP 5xx or timeout |
| 3 | 2 minutes | Retry if still failing |
| 4 | 10 minutes | Retry |
| 5 | 60 minutes | Final retry |
| After 5 failures | — | Write to dead-letter queue; alert engineering team; flag lead for manual disposition |
The dead-letter queue is non-negotiable — every disposition write failure must be captured somewhere so it can be replayed once the CRM recovers. Disposition data lost permanently means a qualified lead with a booked site visit has no CRM record of either — a high-cost operational failure.
Real estate sales calls capture significant PII: full name, mobile number, home address, employment details, income indicators, and family information. The integration architecture must handle this data in compliance with India's Digital Personal Data Protection (DPDP) Act, 2023:
For the AI Calling Agent to maintain its 90-second first-contact SLA during peak launch periods (500–1,000 concurrent calls), the CRM's integration endpoints must meet minimum performance requirements:
| Endpoint | Maximum Response Time (P99) | Maximum Error Rate |
|---|---|---|
| GET /leads/{id}/status | 200ms | < 0.1% |
| POST /leads/{id}/disposition | 500ms | < 0.5% |
| Webhook receipt acknowledgment | 2,000ms | < 0.1% |
If these thresholds cannot be met under peak load, the integration architecture must include a queuing layer (Redis, AWS SQS, or RabbitMQ) between the AI Calling Agent and the CRM endpoint — the AI writes dispositions to the queue instantly, and a consumer service writes to the CRM at the CRM's sustainable throughput rate.
Disclaimer: Webhook architecture patterns, API design specifications, and security recommendations in this article reflect engineering best practices as of Q2 2026. Implementation complexity, performance characteristics, and DPDP compliance requirements will vary based on your specific CRM architecture, infrastructure stack, and data handling context. Engage a qualified solutions architect and legal counsel before building production PII-handling integrations.