Real-estate AI agent on WhatsApp
Understands what clients want, suggests matching listings and books viewings — in Arabic or English.
How it works
- A client asks about a property on WhatsApp.
- The agent asks about buy/rent, area, budget, bedrooms and timing.
- It suggests up to 3 available listings with price and photos link.
- It books a viewing in your calendar and alerts your agent on Telegram.
What it can do
Unlike a fixed flow, an agent decides which of its tools to use, in what order — and remembers the conversation.
- Qualifies clients naturally: buy or rent, area, budget, bedrooms, timing
- Suggests only available listings from your sheet
- Books viewings in the agent's calendar
- Alerts your agent about serious buyers
System prompt
The instructions that shape the agent. It's already inside the n8n template — copy it into Make or Zapier, and adjust the YOUR_… parts.
You are the WhatsApp assistant for YOUR_AGENCY, a real-estate agency. Reply in the customer's language and dialect (Egyptian Arabic, Gulf Arabic, Modern Standard Arabic or English). Be warm and brief.
Help people find properties, answer questions about listings, and book viewings.
Ask (one at a time, naturally): buy or rent, area, budget, bedrooms, and when they want to move.
Tools:
- "Search listings": our current listings (code, area, type, bedrooms, price, status, photos link). Only suggest listings marked available.
- "Book viewing": books a viewing in the agent's calendar. Use only after the client picks a listing and a time and gives their name.
- "Notify agent": tells our agent about a serious buyer, a booked viewing, or a question you can't answer.
Today is {{ $now.toFormat('cccc d LLLL yyyy') }}. Viewings: YOUR_VIEWING_HOURS.
Rules:
- Never invent listings, prices, payment plans or legal details.
- Share at most 3 listings at a time, each with its code, price and photos link.
- Never pressure; if nothing fits, offer to notify them when something matching comes up.Safety rules
Built into the prompt and the tools:
- Never invents listings, prices, payment plans or legal details
- Shares at most 3 listings at a time
- No pressure selling
Uses your own AI key (Claude, OpenAI or another model). Cost depends on the model and conversation length — a small, fast model keeps most conversations to a fraction of a cent.
Diagram
Code
JavaScript used in the Code step — already included in the template below.
// Keeps only text messages and pulls out who sent it and what they asked.
const msg = $input.first().json.messages?.[0];
if (!msg || msg.type !== "text") return [];
return [{ json: { from: msg.from, question: msg.text.body } }];Build it
Pick your tool — same automation, step by step.
Copy and paste straight into an n8n canvas (Ctrl+V), or download and use Import from File. Then connect your own credentials and replace every YOUR_… placeholder. AI steps use a Claude model node — swap it for OpenAI, Gemini or Ollama if you prefer.
Show code (283 lines)
{
"name": "Real-estate AI agent on WhatsApp (Flowngn)",
"nodes": [
{
"parameters": {
"content": "## Real-estate AI agent on WhatsApp\nUnderstands what clients want, suggests matching listings and books viewings — in Arabic or English.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
"height": 260,
"width": 340
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Setup notes",
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-420,
-60
]
},
{
"parameters": {
"updates": [
"messages"
]
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Incoming message",
"type": "n8n-nodes-base.whatsAppTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"webhookId": "47157a09-b4de-42a3-abd6-68f495f76b64"
},
{
"parameters": {
"jsCode": "// Keeps only text messages and pulls out who sent it and what they asked.\nconst msg = $input.first().json.messages?.[0];\nif (!msg || msg.type !== \"text\") return [];\n\nreturn [{ json: { from: msg.from, question: msg.text.body } }];"
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Get question",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
300,
0
]
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.question }}",
"options": {
"systemMessage": "=You are the WhatsApp assistant for YOUR_AGENCY, a real-estate agency. Reply in the customer's language and dialect (Egyptian Arabic, Gulf Arabic, Modern Standard Arabic or English). Be warm and brief.\n\nHelp people find properties, answer questions about listings, and book viewings.\n\nAsk (one at a time, naturally): buy or rent, area, budget, bedrooms, and when they want to move.\n\nTools:\n- \"Search listings\": our current listings (code, area, type, bedrooms, price, status, photos link). Only suggest listings marked available.\n- \"Book viewing\": books a viewing in the agent's calendar. Use only after the client picks a listing and a time and gives their name.\n- \"Notify agent\": tells our agent about a serious buyer, a booked viewing, or a question you can't answer.\n\nToday is {{ $now.toFormat('cccc d LLLL yyyy') }}. Viewings: YOUR_VIEWING_HOURS.\n\nRules:\n- Never invent listings, prices, payment plans or legal details.\n- Share at most 3 listings at a time, each with its code, price and photos link.\n- Never pressure; if nothing fits, offer to notify them when something matching comes up."
}
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Real-estate agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.9,
"position": [
600,
0
]
},
{
"parameters": {
"model": {
"__rl": true,
"value": "claude-sonnet-5",
"mode": "list"
},
"options": {}
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Claude model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"typeVersion": 1.3,
"position": [
260,
220
]
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('Get question').item.json.from }}",
"contextWindowLength": 10
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
430,
220
]
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Returns our listings (code, area, type, bedrooms, price, status, photos link).",
"operation": "read",
"documentId": {
"__rl": true,
"value": "YOUR_SPREADSHEET_ID",
"mode": "id"
},
"sheetName": {
"__rl": true,
"value": "Listings",
"mode": "name"
},
"options": {}
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Search listings",
"type": "n8n-nodes-base.googleSheetsTool",
"typeVersion": 4.5,
"position": [
600,
220
]
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Books a property viewing in the agent's calendar.",
"calendar": {
"__rl": true,
"value": "primary",
"mode": "id"
},
"start": "={{ $fromAI('start', \"Viewing start, ISO 8601 with timezone\", 'string') }}",
"end": "={{ $fromAI('end', \"Viewing end (45 minutes later), ISO 8601 with timezone\", 'string') }}",
"additionalFields": {
"summary": "={{ $fromAI('title', \"Viewing: <listing code> – <client name>\", 'string') }}",
"description": "=Client WhatsApp: +{{ $('Get question').item.json.from }}"
}
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Book viewing",
"type": "n8n-nodes-base.googleCalendarTool",
"typeVersion": 1.3,
"position": [
770,
220
]
},
{
"parameters": {
"descriptionType": "manual",
"toolDescription": "Tells our agent about a serious buyer, a booked viewing, or a question you can't answer.",
"chatId": "YOUR_AGENT_CHAT_ID",
"text": "={{ $fromAI('message', \"Client needs, budget, listing codes and phone\", 'string') }}",
"additionalFields": {
"appendAttribution": false
}
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Notify agent",
"type": "n8n-nodes-base.telegramTool",
"typeVersion": 1.2,
"position": [
940,
220
]
},
{
"parameters": {
"operation": "send",
"phoneNumberId": "YOUR_PHONE_NUMBER_ID",
"recipientPhoneNumber": "={{ $('Get question').item.json.from }}",
"textBody": "={{ $json.output }}"
},
"id": "47157a09-b4de-42a3-abd6-68f495f76b64",
"name": "Reply on WhatsApp",
"type": "n8n-nodes-base.whatsApp",
"typeVersion": 1,
"position": [
900,
0
]
}
],
"connections": {
"Incoming message": {
"main": [
[
{
"node": "Get question",
"type": "main",
"index": 0
}
]
]
},
"Get question": {
"main": [
[
{
"node": "Real-estate agent",
"type": "main",
"index": 0
}
]
]
},
"Real-estate agent": {
"main": [
[
{
"node": "Reply on WhatsApp",
"type": "main",
"index": 0
}
]
]
},
"Claude model": {
"ai_languageModel": [
[
{
"node": "Real-estate agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Memory": {
"ai_memory": [
[
{
"node": "Real-estate agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Search listings": {
"ai_tool": [
[
{
"node": "Real-estate agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Book viewing": {
"ai_tool": [
[
{
"node": "Real-estate agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Notify agent": {
"ai_tool": [
[
{
"node": "Real-estate agent",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": false
},
"tags": []
}In Make, create a new scenario and add these modules in order:
- WhatsApp Business Cloud › Watch Events (messages)
- Tools › Set variable / Iterator + Array aggregator (same logic as the Code step)
- Make AI Agents › Run an agent — give it these tools: “Search listings” (Google Sheets), “Book viewing” (Google Calendar), “Notify agent” (Telegram Bot); paste the system prompt as the agent's instructions
- WhatsApp Business Cloud › Send a Message
- Every module run uses Make operations — the free plan includes a monthly quota.
- Make's built-in functions (map, sum, formatDate…) can replace most Code steps; for complex logic use a code module.
- Module and step names can differ slightly as Make and Zapier update their apps.
In Zapier, create a new Zap and add these steps in order:
- WhatsApp — New Message
- Code by Zapier — Run JavaScript (paste the code from the Code section)
- Zapier Agents — create an agent (or AI by Zapier for a single step) — give it these tools: “Search listings” (Google Sheets), “Book viewing” (Google Calendar), “Notify agent” (Telegram); paste the system prompt as the agent's instructions
- WhatsApp — Send Message
- Zaps with more than two steps need a paid Zapier plan.
- Webhooks, Filters/Paths and Code by Zapier are premium features on some Zapier plans.
- Code by Zapier runs JavaScript: reuse the code shown above, reading inputs from inputData instead of $json.
- Module and step names can differ slightly as Make and Zapier update their apps.
Tips
- Keep the Listings sheet's status column up to date so sold units are never offered.
Related flows
Car service centre AI agent on WhatsApp
Customers ask "is my car ready?", get price ranges and book service slots on WhatsApp.
WhatsApp sales AI agent (Arabic)
Sells on WhatsApp in the customer's own dialect: checks your catalog, answers questions and takes cash-on-delivery orders.
WhatsApp appointment booking AI agent
Customers book appointments on WhatsApp in their own dialect — the agent checks your calendar, books the slot and tells your team.