To reply to a Zillow or Facebook lead in under 60 seconds, connect the lead source to an n8n webhook, check the phone number and consent, and send a WhatsApp message from an approved template that mentions the property of interest. Then alert the agent and let a person take over the conversation.
Why do the first 60 seconds matter so much?
A buyer who fills out a form often messages several agents at once, and the first to answer wins the conversation. The problem is long-standing: a 2014 study by WAV Group and Weichert found an average response time of 917 minutes to buyer inquiries, and 48% of inquiries got no response at all. That data point is old, but it matches what many offices still see. A 2026 analysis by Pinova of 10,000 residential leads reported that contact within five minutes reached a live person roughly four times as often as waiting 30 minutes. It is an observational sample, not a controlled experiment, so treat it as a direction rather than a promise.
What do you need before you start?
Most of this uses accounts that an independent Houston agent, from Katy to The Woodlands, can open today. The part that takes patience is WhatsApp verification, because the first message to a new contact must use a template approved by Meta. Start that process on day one and build the workflow while you wait for approval.
- 01Lead source: Facebook Lead Ads with a leadgen webhook, and for Zillow either email notifications or your CRM integration, depending on what your plan allows.
- 02Running n8n: a cloud or self-hosted instance with a public webhook URL.
- 03Verified WhatsApp Business: a number registered on Meta's WhatsApp Cloud API.
- 04Approved template: a short message with two variables, first name and property of interest.
- 05Recorded consent: a field confirming the person agreed to receive messages.
- 06Agent alert: a push or text to the agent's phone so they can step in right away.
- 07Defined hours: a rule for leads that arrive overnight.
How do Facebook and Zillow leads reach the workflow?
For Facebook, Meta's Lead Ads documentation describes a two-step process: you subscribe your app to the page's leadgen field, Meta sends a notification with the lead ID, and you then call the Graph API to fetch the name and phone number. For Zillow, the route depends on your plan and CRM; many teams receive the notification by email and process it with a Gmail trigger, or connect the CRM they already use. Check which options your account offers before building anything.
Steps 1 to 3: receive, normalize and decide
The workflow has six nodes. The Webhook receives the lead; Normalize Lead (a Code node) cleans the phone number, takes the first name and flags whether consent exists; the IF node decides whether to send; Send WhatsApp calls Meta's API with your template; and two Respond nodes return the result. Replace PHONE_NUMBER_ID and TU_TOKEN with your own values, adjust the template name, and post a JSON body with name, phone, source, interest and consent to your webhook. Store the token in n8n credentials, not inside the node.
{
"name": "60-second reply to new leads",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "lead-nuevo",
"responseMode": "responseNode",
"options": {}
},
"name": "New Lead Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
0,
0
]
},
{
"parameters": {
"jsCode": "const b = $input.first().json.body || $input.first().json;\nconst raw = String(b.phone || '').replace(/\\D/g, '');\nconst phone = raw.length === 10 ? '1' + raw : raw;\nconst hour = new Date().getUTCHours();\nconst sendOk = phone.length >= 11 && b.consent === true;\nreturn [{ json: {\n firstName: String(b.name || 'there').split(' ')[0],\n phone,\n source: b.source || 'unknown',\n interest: b.interest || 'a property',\n sendOk,\n receivedUtcHour: hour\n} }];"
},
"name": "Normalize Lead",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
220,
0
]
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"typeValidation": "strict"
},
"conditions": [
{
"id": "cond-consent",
"leftValue": "={{ $json.sendOk }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equals"
}
}
],
"combinator": "and"
},
"options": {}
},
"name": "Phone and Consent?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [
440,
0
]
},
{
"parameters": {
"method": "POST",
"url": "https://graph.facebook.com/v21.0/PHONE_NUMBER_ID/messages",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer TU_TOKEN"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"messaging_product\": \"whatsapp\",\n \"to\": \"{{ $json.phone }}\",\n \"type\": \"template\",\n \"template\": {\n \"name\": \"respuesta_rapida_lead\",\n \"language\": { \"code\": \"en_US\" },\n \"components\": [{\n \"type\": \"body\",\n \"parameters\": [\n { \"type\": \"text\", \"text\": \"{{ $json.firstName }}\" },\n { \"type\": \"text\", \"text\": \"{{ $json.interest }}\" }\n ]\n }]\n }\n}",
"options": {}
},
"name": "Send WhatsApp",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
660,
-100
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"status\": \"sent\" } }}",
"options": {}
},
"name": "Respond Sent",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
880,
-100
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"status\": \"skipped_no_consent_or_phone\" } }}",
"options": {}
},
"name": "Respond Skipped",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.1,
"position": [
660,
120
]
}
],
"connections": {
"New Lead Webhook": {
"main": [
[
{
"node": "Normalize Lead",
"type": "main",
"index": 0
}
]
]
},
"Normalize Lead": {
"main": [
[
{
"node": "Phone and Consent?",
"type": "main",
"index": 0
}
]
]
},
"Phone and Consent?": {
"main": [
[
{
"node": "Send WhatsApp",
"type": "main",
"index": 0
}
],
[
{
"node": "Respond Skipped",
"type": "main",
"index": 0
}
]
]
},
"Send WhatsApp": {
"main": [
[
{
"node": "Respond Sent",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
"executionOrder": "v1"
}
}What should the first message say?
Short, human, and ending in a question that can be answered with one word. Something like: "Hi Ana, this is the [Your Brand] team. I saw your interest in the Spring Branch home. Would you rather see it this weekend or during the week?" Do not try to qualify the lead with five questions in the first message. Once they reply, an AI agent can ask about budget, area and move-in date, then hand the summary to the human agent with full context. If the lead asks for a person, the workflow should alert the agent and go quiet.
"Replying fast does not mean answering everything: it means opening the conversation within a minute and handing it to a person with full context."
Equipo DavarionHow do you handle consent for automated messages?
Sending automated messages to a phone number requires consent. In 2023 the FCC adopted a "one-to-one" consent rule under the TCPA, according to Orrick, but its legal status was challenged in court, so confirm it with your attorney. The safe practice is simple: a clear checkbox on your form, a saved timestamp and consent text, an opt-out in every message, and honoring it immediately. That is why the workflow above sends nothing unless consent is true.
How long does it take to go live?
If you already have a verified WhatsApp Business number, the workflow takes an afternoon to assemble; the real wait is template approval. In our WhatsApp automation service we connect it to your CRM and to an AI agent that qualifies before you call, which fits our ORBIT package. If you only want the first message, SPARK covers the chatbot plus one automation. You can see what this looks like in practice in our examples.
Can a chatbot close the sale for me?
No, and it should not try. Its job is to open the conversation, collect basic details and book a showing or call. Negotiation, pricing opinions and legal questions belong to a licensed person. A good design defines in advance when the bot steps aside: when the lead asks for an agent, mentions an offer, or asks something outside the script.
What about leads that arrive at 2 a.m.?
You have two options. Send the first message anyway, since the template is neutral and the lead will see it when they wake up, or schedule it for permitted hours in the contact's time zone. Also review any quiet-hours rules that apply to your case. The Code node in the example already stores the UTC hour so you can add that condition.
Do I need WhatsApp, or will SMS work?
Both work, but commercial SMS in the United States requires carrier campaign registration, while WhatsApp requires approved templates. Many Houston buyers use WhatsApp daily, especially in bilingual families, which is why it is often the first channel. Pick the one your client already uses and start with just one.
Want to reply to your leads in under a minute?
Book a free 15-minute audit: we review where your leads come from, how long you take to reply today, and which part is worth automating first. Write to ceo@davarion.com or visit our AI automation in Houston page.