Use casesWorkflow
AI Real Estate Follow-Up Agent
Answer property enquiries while interest is fresh. Your agent follows up with buyers who requested email, handles listing questions, and helps arrange showings through a real inbox.
The problem
Real estate leads are perishable. When someone inquires about a listing on Zillow, Realtor.com, or your brokerage site, the window to respond is narrow — studies show that responding within five minutes increases conversion by 10x. But most agents juggle dozens of inquiries, showings, and closings simultaneously. Leads slip through the cracks.
CRM auto-responders send a canned reply, but they cannot hold a conversation. When a lead replies asking about price, square footage, or nearby schools, the automated system goes silent. The prospect waits for a human who may not follow up for hours or days. By then, they have moved on to another agent.
What you need is an agent that can hold a natural, multi-turn email conversation — qualifying the lead, answering questions from listing data, and routing hot prospects to the human agent at the right moment.
How an AI agent solves this
An AI real estate follow-up agent responds to people who explicitly requested email from your brokerage about a property. Your application checks the request and recorded permission before sending. A scraped listing or imported address alone does not provide permission. The agent answers the enquiry, receives the reply, and shares additional listings only when requested.
- Responds to new listing inquiries within seconds, not hours
- Handles multi-turn conversations about properties, pricing, and availability
- Qualifies leads by asking about budget, timeline, and must-haves
- Escalates hot prospects to the human agent with full conversation context
- Sends from a real address so replies land in the same thread, not a dead inbox
How it works with Robotomail
Robotomail provides the email infrastructure your agent needs — a real mailbox, outbound sending, inbound webhooks, and automatic threading. Connect it to your enquiry form and recorded recipient preferences so the agent can answer requests and qualify interest.
Step 1: Respond to a property enquiry. Once you confirm the buyer asked your brokerage to email them, your agent calls POST /v1/mailboxes/{mailbox_id}/messages with a personalized email referencing the specific property.
# Confirm the buyer requested email from your brokerage about this property.
# Check recorded permission and suppressions before sending.
curl -X POST https://api.robotomail.com/v1/mailboxes/{mailbox_id}/messages \
-H "Authorization: Bearer rm_live_..." \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"to": [
"lead@example.com"
],
"subject": "Your enquiry about 42 Oak Street",
"bodyHtml": "<p>Hi Sarah,</p><p>Thank you for asking Summit Realty to email you about 42 Oak Street. A showing is available this week. Which day would suit you? Reply here with questions, or let us know if you no longer want follow-up.</p><p>Best,<br/>Alex — Summit Realty</p>",
"bodyText": "Hi Sarah, Thank you for asking Summit Realty to email you about 42 Oak Street. A showing is available this week. Which day would suit you? Reply here with questions, or let us know if you no longer want follow-up. Best, Alex — Summit Realty"
}
JSONStep 2: Receive replies via webhook. When the lead responds, Robotomail delivers the message to your webhook endpoint. The payload includes the full message body, thread ID, and sender details — everything your agent needs to continue the conversation.
{
"event": "message.received",
"timestamp": "2026-09-23T10:00:00Z",
"data": {
"message_id": "11111111-1111-4111-8111-111111111111",
"mailbox_id": "22222222-2222-4222-8222-222222222222",
"mailbox_address": "real-estate@yourcompany.com",
"from": "lead@example.com",
"to": [
"real-estate@yourcompany.com"
],
"cc": [],
"subject": "Re: Your enquiry about 42 Oak Street",
"body_text": "Yes! I am looking for 3-bed homes under $500k in that neighborhood. Do you have anything?",
"thread_id": "33333333-3333-4333-8333-333333333333",
"received_at": "2026-09-23T10:00:00Z",
"attachments": []
}
}Step 3: Continue the threaded conversation. Your agent sends follow-up messages in the same thread by including the inReplyTo field. Robotomail handles the In-Reply-To and References headers automatically, so the conversation stays in one thread in the lead's inbox.
# inReplyTo below stands for the fetched message.messageId; see the reply example below.
curl -X POST https://api.robotomail.com/v1/mailboxes/{mailbox_id}/messages \
-H "Authorization: Bearer rm_live_..." \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"to": [
"lead@example.com"
],
"subject": "Re: Your enquiry about 42 Oak Street",
"bodyHtml": "<p>Great news, Sarah! I found 3 properties matching your criteria...</p>",
"inReplyTo": "<original-message@example.com>",
"bodyText": "Great news, Sarah! I found 3 properties matching your criteria..."
}
JSONUse a custom domain like alex@summitrealty.com so outbound emails match your brokerage brand. Robotomail auto-configures DKIM, SPF, and DMARC for maximum deliverability.
Key benefits
- Instant response: Leads get a personalized email within seconds — not a generic auto-reply hours later
- Real conversations: Multi-turn email threads that qualify leads and answer property questions naturally
- Brand-consistent identity: Send from your brokerage domain with full DNS authentication
- Smart escalation: When a lead is qualified and ready for a showing, the agent hands off with full context
- No lead left behind: Track each requested conversation and stop on opt-out — read the docs or launch post to start building
Get started and connect your first lead source. Every plan ships with a 30-day money-back guarantee, so you can test with real leads before committing.
Connect the workflow to a real reply
The webhook's data.message_id is a database ID used to retrieve or deduplicate a message. Fetch it with the GET message endpoint, then use the response's message.messageId (the RFC Message-ID) as inReplyTo. Keep data.thread_id for your application's conversation state. Do not use a database ID or thread ID as a reply header. Stop and investigate if the fetched message has no Message-ID.
Examples use illustrative IDs. Replace them with IDs from your account; never construct an email Message-ID from a database ID. Exchange mail only between your agent and your verified email address. Upgrade to email anyone. See plans for higher limits.
Verify the webhook signature over the raw body, persist the event and deduplicate on the database message ID before acknowledging it. Run your application logic from a durable queue. The database, calendar, CRM and model functions shown above belong to your application.
This shell example fetches an incoming email and builds all required send fields. Set ROBOTOMAIL_API_KEY, ROBOTOMAIL_MAILBOX_ID and ROBOTOMAIL_MESSAGE_ID in your environment. Apply your recipient and approval rules before sending.
# Requires jq. Use mailbox_id and message_id from the verified webhook.
original=$(curl --fail --silent --show-error \
"https://api.robotomail.com/v1/mailboxes/$ROBOTOMAIL_MAILBOX_ID/messages/$ROBOTOMAIL_MESSAGE_ID" \
-H "Authorization: Bearer $ROBOTOMAIL_API_KEY") || exit 1
payload=$(printf '%s' "$original" | jq -e --arg body "Thanks, I received your message." '
.message | if (.messageId | type == "string" and length > 0) then
{to: [.fromAddress], subject: ("Re: " + .subject), bodyText: $body, inReplyTo: .messageId}
else error("Original email has no Message-ID") end
') || exit 1
curl --fail --silent --show-error \
"https://api.robotomail.com/v1/mailboxes/$ROBOTOMAIL_MAILBOX_ID/messages" \
-H "Authorization: Bearer $ROBOTOMAIL_API_KEY" \
-H "Content-Type: application/json" \
--data-binary "$payload"
Read receive and reply and webhook verification for the full setup.