
Implementation Guide: Send milestone-based status updates to clients throughout the transaction
Step-by-step implementation guide for deploying AI to send milestone-based status updates to clients throughout the transaction for Real Estate clients.
Hardware Procurement
iPad 10th Generation Wi-Fi 64GB
$349 per unit (MSP cost) / $449 suggested resale with configuration
Optional intake tablets placed at the brokerage front desk and signing room. Used to capture client SMS opt-in consent (TCPA-compliant written consent) via a digital form at listing or buyer agreement signings. Also serves as a client-facing kiosk for reviewing transaction status. Not strictly required — consent can be captured on paper or via existing agent devices.
Tablet Floor Stand with Locking Enclosure
$89 per unit (MSP cost) / $129 suggested resale
Secures iPad tablets in the brokerage office and signing room for client self-service SMS consent capture. Anti-theft locking mechanism prevents removal.
Software Procurement
Open to Close (Grow Plan)
$99/month + $69/month per additional user beyond first; suggest resale at $129/month base + $89/user
Primary Transaction Management System. Serves as the single source of truth for all deal milestones. Chosen specifically because it has the best native notification automation among TMS platforms — built-in SMS and email triggers that fire when transaction status changes, reducing or eliminating the need for external middleware for basic setups. Includes automated text triggers for buy-side and list-side processes, smart blocks, scheduled emails, and integrations with Follow Up Boss, SkySlope, Dotloop, Google Workspace, and Microsoft 365.
Zapier (Professional Plan)
$29.99/month (suggested resale at $49.99/month)
Workflow automation middleware that connects Open to Close (or alternative TMS) to Twilio SMS and SendGrid email APIs. Handles advanced routing logic: buyer vs. seller message selection, agent CC preferences, milestone-to-template mapping, and error notifications to the MSP. Used for workflows that exceed Open to Close's native trigger capabilities — e.g., conditional branching based on transaction type, multi-channel dispatch, or CRM writeback.
Twilio Programmable Messaging (SMS)
$0.0079/message sent + $0.0079/message received + $2/month per phone number + ~$19 one-time A2P 10DLC registration; typical brokerage volume: $15–50/month; suggest billing client $0.04/SMS (5x markup)
Programmatic SMS delivery for milestone text alerts to clients. Provides deliverability tracking, opt-out (STOP keyword) handling, and message logging. Required for any SMS notifications that go beyond Open to Close's native SMS capability or for MSPs wanting centralized SMS billing across multiple real estate clients.
Twilio SendGrid (Essentials Plan)
$19.95/month (suggested resale at $39.95/month)
Transactional email delivery for milestone email notifications. Provides branded HTML email templates, delivery analytics, bounce handling, and compliance features (unsubscribe management). Median delivery speed of 1.9 seconds ensures clients receive updates promptly. Also handles the SPF/DKIM authentication required for reliable inbox delivery.
Follow Up Boss (Grow Plan)
$69/month per user; suggest resale at $89/month per user
Real estate CRM that serves as the authoritative client contact database. Provides the email addresses and phone numbers that milestone notifications are sent to. Webhook-based API integration allows bidirectional sync: pulling contact data into automation workflows, and writing back milestone completion events to the client's CRM timeline for agent visibility. If the brokerage already has a CRM (kvCORE, LionDesk, Wise Agent), use that instead.
Google Workspace Business Starter
$7.20/month per user; suggest resale at $12/month per user
Email sending domain and calendar integration. SPF, DKIM, and DMARC records are configured on the brokerage's Google Workspace domain to authenticate SendGrid as an authorized sender. Google Calendar integration allows milestone events (inspection date, appraisal date, closing date) to be auto-created on agent and client calendars.
Jotform (Bronze Plan)
$39/month (suggested resale at $59/month)
Digital consent capture forms for TCPA-compliant SMS opt-in. Deployed on intake iPads and embeddable in listing/buyer agreement packets. Captures client name, phone number, consent checkbox, timestamp, and e-signature — all required for A2P 10DLC compliance. Submissions auto-sync to the CRM and automation platform via Zapier.
Prerequisites
- Active real estate brokerage with at least 3 agents and a minimum of 5 active transactions per month to justify automation investment
- Brokerage owns a custom domain (e.g., sunsetrealty.com) with administrative access to DNS records for SPF/DKIM/DMARC configuration
- Existing or willingness to adopt a Transaction Management System — Open to Close is recommended but Dotloop, SkySlope, or Paperless Pipeline are also supported
- Existing CRM with client contact data (email + phone) accessible via API or CSV export — Follow Up Boss, kvCORE, LionDesk, or Wise Agent
- Each agent has a business email on the brokerage domain (not personal Gmail/Yahoo) for consistent branded communication
- Standard business internet connection (25+ Mbps) at the brokerage office
- Outbound HTTPS (port 443) traffic allowed through any firewall to SaaS endpoints (opentoclose.com, api.twilio.com, api.sendgrid.com, zapier.com)
- Client credit card or ACH on file for recurring SaaS subscriptions, or MSP billing arrangement established
- Brokerage principal broker has approved the transaction milestone list and message templates — this is a business decision, not a technical one
- Written commitment from brokerage leadership to mandate TMS usage by all agents (automation only works if agents update deal status)
- State real estate commission licensing requirements reviewed — some states require specific disclosures in automated communications
Installation Steps
Step 1: A2P 10DLC Brand and Campaign Registration
Register the brokerage as an A2P 10DLC brand with The Campaign Registry (TCR) through Twilio. This is mandatory for sending SMS to US phone numbers and is the #1 timeline blocker — approval takes 1–4 weeks. Do this on Day 1 of the engagement before any other work. You will register the brokerage brand (legal name, EIN, address, website) and then create a campaign describing the use case (real estate transaction status updates). Carriers will review and approve the campaign before SMS sending is enabled.
A2P 10DLC registration costs approximately $4 for brand registration + $15 for campaign registration (one-time). Approval typically takes 1–3 business days for standard brands but can take up to 4 weeks if additional vetting is required. Do NOT attempt to send SMS before approval — all unregistered traffic is blocked as of December 1, 2024. If the brokerage has multiple offices/brands, each needs its own registration.
Step 2: DNS Configuration for Email Authentication
Configure SPF, DKIM, and DMARC records on the brokerage's domain to authenticate SendGrid as an authorized email sender. This is critical for deliverability — without proper authentication, milestone emails will land in spam folders. Access the domain's DNS management panel (Google Workspace Admin → Domains → DNS, or the domain registrar like GoDaddy/Namecheap).
# SPF Record (TXT) — add SendGrid to existing SPF record:
# Host: @
# Type: TXT
# Value: v=spf1 include:sendgrid.net include:_spf.google.com ~all
# DKIM Records (CNAME) — SendGrid provides two CNAME records:
# Host: s1._domainkey
# Type: CNAME
# Value: s1.domainkey.u[XXXXXXX].wl[XXX].sendgrid.net
# Host: s2._domainkey
# Type: CNAME
# Value: s2.domainkey.u[XXXXXXX].wl[XXX].sendgrid.net
# DMARC Record (TXT):
# Host: _dmarc
# Type: TXT
# Value: v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@sunsetrealty.com; pct=100# run from any terminal to confirm DNS records have propagated
nslookup -type=txt sunsetrealty.com
nslookup -type=cname s1._domainkey.sunsetrealty.com
nslookup -type=txt _dmarc.sunsetrealty.comDNS propagation can take up to 48 hours. Start this on Day 1 alongside A2P registration. If the brokerage uses Google Workspace, be careful not to overwrite the existing SPF record — merge the include:sendgrid.net into the existing v=spf1 line. If using Microsoft 365, the SPF record will reference include:spf.protection.outlook.com instead of _spf.google.com. DMARC policy should start at p=quarantine and move to p=reject after 2 weeks of monitoring.
Step 3: Transaction Management System Setup — Open to Close
Create the brokerage's Open to Close account, configure transaction types (buy-side and list-side), define milestone stages, and set up user accounts for all agents. This is the core of the system — the TMS is where agents will update deal status, which triggers all downstream notifications.
Discuss the milestone list with the principal broker BEFORE configuration. Different brokerages may want more or fewer milestones. The 12-stage model above is comprehensive; a minimal viable setup can work with 8 stages. Ensure milestone names are client-friendly since they may appear in notification subject lines. If the brokerage already uses Dotloop or SkySlope, skip this step and adapt the milestone definitions within that existing TMS.
Step 4: CRM Integration — Follow Up Boss
Connect Follow Up Boss to Open to Close so that client contact data (name, email, phone) flows automatically into transaction records. This eliminates manual data entry and ensures notifications always go to the correct recipient. Also configure webhooks so milestone completions write back to the CRM timeline.
https://hooks.zapier.com/hooks/catch/[YOUR_ZAPIER_WEBHOOK_ID]/If the brokerage uses a different CRM (kvCORE, LionDesk, Wise Agent), the integration method will differ. Check Open to Close's integration directory for native connectors. For CRMs without native integration, Zapier or Make can serve as the bridge. Ensure the CRM contains clean, deduplicated contact data before enabling sync — duplicate contacts will cause duplicate notifications.
Step 5: SMS Consent Capture Form Setup
Build a TCPA-compliant SMS opt-in form using Jotform that captures client written consent for receiving automated transaction updates via text message. This form will be deployed on intake iPads and can also be sent as a link in the initial transaction welcome email. Consent records must be stored with timestamps for compliance auditing.
TCPA requires 'prior express written consent' which must include: (1) the identity of the sender, (2) the type of messages, (3) expected frequency, (4) data rate disclosure, (5) opt-out instructions. The consent checkbox language above covers all requirements. Store all form submissions indefinitely — you may need to produce consent records in the event of a TCPA complaint. Jotform stores submissions in their cloud with timestamps and IP addresses, which is generally sufficient for compliance.
Step 6: Zapier Workflow Automation Build
Build the core automation workflows in Zapier that connect the TMS milestone changes to email and SMS delivery. Create separate Zaps for buyer transactions and seller transactions, with conditional logic for milestone-specific message templates. This is the 'brain' of the system — the orchestration layer that routes the right message to the right client at the right time.
Zap 1: Buyer Transaction Milestone Notifications
Step 3: Lookup Table — Stage Name to Channel Mapping
'Offer Accepted / Under Contract' → SMS: true, Email: true
'Earnest Money Deposited' → SMS: false, Email: true
'Home Inspection Scheduled' → SMS: true, Email: true
'Home Inspection Completed' → SMS: true, Email: true
'Appraisal Completed' → SMS: true, Email: true
'Loan Approval / Clear to Close' → SMS: true, Email: true
'Final Walkthrough Scheduled' → SMS: true, Email: true
'Closing Day' → SMS: true, Email: true
'Post-Closing / Keys Handed Over' → SMS: true, Email: trueStep 4A: Send SMS via Twilio
From: [Registered 10DLC Number]
To: {{Client Phone}}
Body: (see custom_ai_components for template logic)Step 4B: Send Email via SendGrid
From: updates@sunsetrealty.com
From Name: [Agent Name] at [Brokerage Name]
To: {{Client Email}}
Subject: (see custom_ai_components for template logic)
Body: (see custom_ai_components for HTML template)Step 5: Log to Google Sheets
Spreadsheet: 'Transaction Notification Log'
Row fields: Timestamp, Transaction ID, Client Name, Milestone, Channel (SMS/Email), StatusZap 2: Seller Transaction Milestone Notifications
Same structure as Zap 1, with seller-specific milestones and templates.
Zap 3: SMS Consent Intake → CRM + TMS Sync
Zap 4: Error Monitoring → MSP Alert
Zapier Professional plan allows 750 tasks/month. A typical brokerage with 20 transactions/month × 10 milestones × 2 channels (SMS + email) = 400 tasks/month, well within limits. If the client exceeds this, upgrade to Team plan ($103.50/mo for 2,000 tasks). Each Zap should be tested individually before enabling. Use Zapier's built-in testing to send test messages to the MSP's own phone/email first. Set all Zaps to 'OFF' until full testing is complete in Step 10.
Step 7: SendGrid Email Template Configuration
Create branded HTML email templates in SendGrid for each transaction milestone. Templates use dynamic fields (client name, property address, agent name, milestone details) that are populated by Zapier at send time. Design should be mobile-responsive since 68% of real estate emails are opened on mobile devices.
Keep email templates simple and scannable — clients want quick status updates, not lengthy newsletters. Each email should have: (1) a clear subject line with the milestone name and property address, (2) a one-sentence summary of what just happened, (3) a 2-3 sentence explanation of what happens next, (4) the agent's contact information, (5) a prominent CTA button if action is needed (e.g., 'Schedule Your Walkthrough'). Test rendering in Litmus or Email on Acid across Gmail, Outlook, Apple Mail, and mobile clients.
Step 8: Twilio SMS Configuration and Template Setup
Configure the Twilio messaging service, attach the registered 10DLC phone number, and create message templates for each milestone. SMS messages must be concise (under 160 characters for single-segment delivery when possible) and include opt-out language.
Buyer Milestone SMS Templates
offer_accepted: '🎉 Congrats {{first_name}}! Your offer on {{address}} has been accepted! {{agent_name}} will be in touch with next steps. Reply STOP to opt out.'
inspection_scheduled: '🔍 Your home inspection for {{address}} is scheduled for {{date}}. {{agent_name}} will share details shortly. Reply STOP to opt out.'
inspection_complete: '✅ Inspection complete for {{address}}! {{agent_name}} will review the report with you soon. Reply STOP to opt out.'
appraisal_complete: '📋 The appraisal for {{address}} is in! {{agent_name}} will walk you through the results. Reply STOP to opt out.'
clear_to_close: '🎯 Great news {{first_name}}! You are clear to close on {{address}}! Closing is set for {{closing_date}}. Reply STOP to opt out.'
closing_day: '🔑 Today is the day! Closing for {{address}} is happening. {{agent_name}} will see you at {{time}}. Reply STOP to opt out.'
post_closing: '🏡 Welcome home, {{first_name}}! {{address}} is officially yours. It has been a pleasure working with you! Reply STOP to opt out.'Seller Milestone SMS Templates
listed_mls: '📣 {{address}} is now live on MLS! {{agent_name}} will keep you updated on showing activity. Reply STOP to opt out.'
offer_received: '📩 You have received an offer on {{address}}! {{agent_name}} will call you to review the details. Reply STOP to opt out.'
under_contract: '🤝 {{address}} is under contract! {{agent_name}} will guide you through the next steps. Reply STOP to opt out.'
buyer_clear_close: '✅ The buyer is clear to close on {{address}}! We are on track for {{closing_date}}. Reply STOP to opt out.'
closing_day_seller: '🎉 Closing day for {{address}}! {{agent_name}} will confirm once funds are disbursed. Reply STOP to opt out.'
funds_disbursed: '💰 Funds from the sale of {{address}} have been disbursed! Check with your title company for wire details. Reply STOP to opt out.'Twilio Error Webhook URL
https://hooks.zapier.com/hooks/catch/[YOUR_WEBHOOK_ID]/sms-status/SMS messages over 160 characters are split into multiple segments and billed accordingly. Keep messages under 160 chars including the STOP opt-out language (about 30 chars). Emojis count as multiple characters in GSM encoding — if you use them, messages will use UCS-2 encoding (70 chars per segment). Consider removing emojis if cost is a concern. The STOP auto-responder is handled by Twilio's Advanced Opt-Out management — no custom handling needed. Test all messages on both iOS and Android devices before going live.
Step 9: Google Sheets Notification Log and Consent Archive Setup
Create structured Google Sheets spreadsheets to log all sent notifications and store SMS consent records. These serve as the compliance audit trail and also provide the data source for the MSP's monthly reporting dashboard to the client.
Step 1: Create Google Sheet 'Transaction Notification Log'
- Sheet 1: 'Notifications' — Columns: Timestamp | Transaction ID | Property Address | Client Name | Client Email | Client Phone | Milestone | Channel (SMS/Email) | Status (Sent/Failed) | Message Preview | Agent Name
- Sheet 2: 'Monthly Summary' (formula-driven) — Row per month: Total Notifications Sent | SMS Count | Email Count | Failure Count | Unique Transactions | Unique Clients
=COUNTIFS(Notifications!A:A,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),Notifications!A:A,"<"&DATE(YEAR(TODAY()),MONTH(TODAY())+1,1))Step 2: Create Google Sheet 'SMS Consent Records'
Columns: Timestamp | Client Name | Phone Number | Email | Property Address | Agent Name | Consent Text | IP Address | Form Submission ID. This sheet is populated by Zap 3 (SMS Consent Intake).
Step 3: Set Sharing Permissions
- MSP service account: Editor
- Brokerage admin: Viewer
- Individual agents: No access (privacy)
Step 4: Enable Google Sheets API for Zapier
Step 5: Create a Google Data Studio (Looker Studio) Dashboard
Google Sheets is chosen for simplicity and because most real estate brokerages already use Google Workspace. For higher volume brokerages (100+ transactions/month), consider migrating to Airtable ($20/month) for better performance and built-in views/dashboards. Notification logs should be retained for a minimum of 3 years (California) or up to 7 years (conservative) per state record retention requirements. SMS consent records should be retained indefinitely or until the client relationship ends plus the applicable statute of limitations.
Step 10: End-to-End Testing with Test Transaction
Create a test transaction in Open to Close and walk it through every milestone stage to verify that the correct email and SMS notifications are sent at each step. Test both buyer and seller transaction types. Verify message content, formatting, deliverability, and opt-out handling.
Testing should be performed on real devices (not just the Zapier test panel). Have one technician update milestones while another monitors their phone and email. Test on both iOS (iMessage) and Android devices since SMS rendering differs. Verify that emails display correctly in Gmail web, Gmail mobile, Outlook desktop, and Apple Mail. If any Zap fails during testing, check the Zapier Task History for detailed error logs. Common issues: (1) SendGrid domain not verified yet, (2) A2P campaign not approved yet, (3) Zapier field mapping errors, (4) CRM contact missing phone number.
Step 11: Agent Training and Go-Live Preparation
Conduct a 60-90 minute training session with all brokerage agents covering: how the automation works, what clients will receive, how to update transaction status in Open to Close, how to handle client questions about automated messages, and how to capture SMS consent. Prepare a one-page quick reference card for each agent.
Training Agenda (90 minutes)
Prepare the Following Materials
- One-page laminated quick reference card (milestone list + how to update in OTC)
- 5-minute screen recording walkthrough (store in shared Google Drive)
- FAQ document for agents covering common client questions
- Escalation contact: MSP helpdesk number/email for technical issues
Go-Live Checklist
The single biggest risk to this project is agent adoption. If agents do not consistently update transaction status in Open to Close, no notifications will fire. The training must emphasize that the system is only as good as the data agents enter. Consider implementing a weekly 'compliance check' where the brokerage admin reviews active transactions for current stage accuracy. Recommend a 2-week soft launch with 5 transactions before full rollout to catch any issues in production.
Step 12: Production Rollout and Monitoring Setup
Enable all automation workflows for production use, configure ongoing monitoring dashboards, set up MSP alerting for failures, and establish the recurring maintenance cadence. Transition from project mode to managed service mode.
https://hooks.zapier.com/hooks/catch/[YOUR_WEBHOOK_ID]/sendgrid-events/Target SLA for this managed service: 99.5% notification delivery rate, 15-minute response to system-down alerts during business hours, 4-hour response for non-critical issues. Review Zapier task usage monthly to ensure the plan tier is adequate. SendGrid reputation monitoring is critical — if the brokerage domain's sender reputation drops below 90, investigate immediately for bounce issues or spam complaints. Schedule quarterly business reviews with the brokerage to review notification analytics, gather feedback on message content, and upsell additional automations.
Custom AI Components
Milestone Message Router
Type: workflow Core Zapier workflow that routes transaction milestone events from Open to Close to the appropriate email template (SendGrid) and SMS template (Twilio) based on the transaction type (buyer/seller), milestone stage, and client communication preferences. This is the central orchestration logic of the entire system. It handles conditional branching, template selection, dynamic field population, and multi-channel dispatch.
Implementation
Trigger
- App: Open to Close
- Trigger Event: Transaction Stage Changed
- Account: [Brokerage's OTC account]
- Output fields used: transaction_type (Buyer Transaction | Seller Transaction), stage_name (e.g., 'Offer Accepted / Under Contract'), client_first_name, client_last_name, client_email, client_phone, property_address, agent_name, agent_phone, agent_email, closing_date, transaction_id
Step 2: Filter
Only continue if stage_name (Text) is not empty AND client_email (Text) is not empty. Purpose: Prevents firing on incomplete transactions.
Step 3: Zapier Paths (Conditional Branching)
- Path A: transaction_type = 'Buyer Transaction'
- Path B: transaction_type = 'Seller Transaction'
Path A: Buyer Transaction
Step A1: Lookup Table — Buyer Milestone → Template Mapping
Key: stage_name
- Offer Accepted / Under Contract → sendgrid: d-buyer-offer-acc | sms_key: buyer_offer_accepted | sms_on: yes
- Earnest Money Deposited → sendgrid: d-buyer-earnest | sms_key: (none) | sms_on: no
- Home Inspection Scheduled → sendgrid: d-buyer-insp-sch | sms_key: buyer_insp_scheduled | sms_on: yes
- Home Inspection Completed → sendgrid: d-buyer-insp-done | sms_key: buyer_insp_complete | sms_on: yes
- Appraisal Completed → sendgrid: d-buyer-appr-done | sms_key: buyer_appraisal_done | sms_on: yes
- Loan Approval / Clear to Close → sendgrid: d-buyer-ctc | sms_key: buyer_clear_to_close | sms_on: yes
- Final Walkthrough Scheduled → sendgrid: d-buyer-walkthru | sms_key: buyer_walkthrough | sms_on: yes
- Closing Day → sendgrid: d-buyer-closing | sms_key: buyer_closing_day | sms_on: yes
- Post-Closing / Keys Handed Over → sendgrid: d-buyer-welcome | sms_key: buyer_post_closing | sms_on: yes
Step A2: Zapier Formatter — SMS Body Builder
- Transform: Text → Replace
- Input: SMS template string (from lookup)
- Replacements: {{first_name}} → client_first_name, {{address}} → property_address, {{agent_name}} → agent_name, {{closing_date}} → closing_date, {{date}} → (next step date if available, else '')
BUYER_SMS_TEMPLATES = {
'buyer_offer_accepted': '🎉 Congrats {{first_name}}! Your offer on {{address}} has been accepted! {{agent_name}} will be in touch with next steps. Reply STOP to opt out.',
'buyer_insp_scheduled': '🔍 Inspection for {{address}} is scheduled. {{agent_name}} will share details soon. Reply STOP to opt out.',
'buyer_insp_complete': '✅ Inspection complete for {{address}}! {{agent_name}} will review the report with you. Reply STOP to opt out.',
'buyer_appraisal_done': '📋 Appraisal for {{address}} is in! {{agent_name}} will walk you through results. Reply STOP to opt out.',
'buyer_clear_to_close': '🎯 Great news! You are clear to close on {{address}}. Closing set for {{closing_date}}. Reply STOP to opt out.',
'buyer_walkthrough': '🏠 Final walkthrough for {{address}} is coming up. {{agent_name}} will confirm timing. Reply STOP to opt out.',
'buyer_closing_day': '🔑 Today is closing day for {{address}}! {{agent_name}} will see you there. Reply STOP to opt out.',
'buyer_post_closing': '🏡 Welcome home, {{first_name}}! {{address}} is officially yours. Congrats! Reply STOP to opt out.'
}Step A3: Path Split — SMS Enabled?
- If sms_on = 'yes' AND client_phone is not empty → Step A4 (Send SMS)
- Else → Skip to Step A5 (Send Email)
Step A4: Twilio — Send SMS
- App: Twilio
- Action: Send SMS Message
- Messaging Service SID: MG[your_service_sid]
- To: {{client_phone}}
- Body: {{formatted_sms_body}} (from Step A2)
Step A5: SendGrid — Send Email
- App: Twilio SendGrid
- Action: Send Email with Dynamic Template
- From Email: updates@[brokerage-domain].com
- From Name: {{agent_name}} at [Brokerage Name]
- To: {{client_email}}
- Template ID: {{sendgrid_template}} (from lookup table)
{
"client_first_name": "{{client_first_name}}",
"property_address": "{{property_address}}",
"agent_name": "{{agent_name}}",
"agent_phone": "{{agent_phone}}",
"agent_email": "{{agent_email}}",
"closing_date": "{{closing_date}}",
"current_year": "2025"
}Step A6: Google Sheets — Log Notification
- App: Google Sheets
- Action: Create Spreadsheet Row
- Spreadsheet: 'Transaction Notification Log'
- Timestamp: {{zap_meta_human_now}}
- Transaction ID: {{transaction_id}}
- Property Address: {{property_address}}
- Client Name: {{client_first_name}} {{client_last_name}}
- Milestone: {{stage_name}}
- Channel: SMS+Email (or Email Only if sms_on = no)
- Status: Sent
- Agent: {{agent_name}}
Path B: Seller Transaction
Identical structure to Path A with seller-specific templates.
Seller Lookup Table
- Listing Agreement Signed → sendgrid: d-seller-listed | sms_key: (none) | sms_on: no
- Property Listed on MLS → sendgrid: d-seller-mls-live | sms_key: seller_listed_mls | sms_on: yes
- Offer Received → sendgrid: d-seller-offer-rcv | sms_key: seller_offer_received | sms_on: yes
- Offer Accepted / Under Contract → sendgrid: d-seller-contract | sms_key: seller_under_contract | sms_on: yes
- Inspection Negotiations Complete → sendgrid: d-seller-insp-neg | sms_key: seller_insp_negotiated | sms_on: yes
- Appraisal Completed → sendgrid: d-seller-appr-done | sms_key: seller_appraisal_done | sms_on: yes
- Buyer Clear to Close → sendgrid: d-seller-buyer-ctc | sms_key: seller_buyer_ctc | sms_on: yes
- Closing Day → sendgrid: d-seller-closing | sms_key: seller_closing_day | sms_on: yes
- Post-Closing / Funds Disbursed → sendgrid: d-seller-funds | sms_key: seller_funds_disbursed | sms_on: yes
SELLER_SMS_TEMPLATES = {
'seller_listed_mls': '📣 {{address}} is now live on MLS! {{agent_name}} will keep you updated. Reply STOP to opt out.',
'seller_offer_received': '📩 Offer received on {{address}}! {{agent_name}} will call to review details. Reply STOP to opt out.',
'seller_under_contract': '🤝 {{address}} is under contract! {{agent_name}} will guide next steps. Reply STOP to opt out.',
'seller_insp_negotiated': '✅ Inspection negotiations complete for {{address}}. Moving forward! Reply STOP to opt out.',
'seller_appraisal_done': '📋 Appraisal for {{address}} is complete. {{agent_name}} has details. Reply STOP to opt out.',
'seller_buyer_ctc': '✅ Buyer is clear to close on {{address}}! On track for {{closing_date}}. Reply STOP to opt out.',
'seller_closing_day': '🎉 Closing day for {{address}}! {{agent_name}} will confirm fund disbursement. Reply STOP to opt out.',
'seller_funds_disbursed': '💰 Funds from {{address}} sale have been disbursed. Check with title co for wire details. Reply STOP to opt out.'
}SendGrid Milestone Email HTML Template
Type: prompt Master HTML email template used across all milestone notifications. Uses SendGrid's Handlebars templating syntax for dynamic content injection. Mobile-responsive design with brokerage branding. Each milestone variation is created by changing the subject line and body content sections while keeping the layout consistent.
Implementation:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Transaction Update</title>
<style>
body { margin: 0; padding: 0; background-color: #f4f4f7; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; }
.container { max-width: 600px; margin: 0 auto; background-color: #ffffff; }
.header { background-color: #1a365d; padding: 24px; text-align: center; }
.header img { max-height: 50px; }
.header h2 { color: #ffffff; margin: 12px 0 0 0; font-size: 18px; font-weight: 400; }
.milestone-badge { background-color: #e6f3ff; border-left: 4px solid #2b6cb0; padding: 16px 20px; margin: 24px; border-radius: 0 8px 8px 0; }
.milestone-badge h3 { color: #2b6cb0; margin: 0 0 4px 0; font-size: 16px; text-transform: uppercase; letter-spacing: 0.5px; }
.milestone-badge p { color: #4a5568; margin: 0; font-size: 14px; }
.body-content { padding: 0 24px 24px 24px; color: #4a5568; line-height: 1.6; font-size: 15px; }
.body-content h1 { color: #1a365d; font-size: 22px; margin-bottom: 8px; }
.next-steps { background-color: #f7fafc; border-radius: 8px; padding: 16px 20px; margin: 16px 0; }
.next-steps h4 { color: #1a365d; margin: 0 0 8px 0; font-size: 14px; text-transform: uppercase; }
.next-steps p { margin: 0; font-size: 14px; }
.cta-button { display: inline-block; background-color: #2b6cb0; color: #ffffff !important; text-decoration: none; padding: 12px 32px; border-radius: 6px; font-weight: 600; font-size: 15px; margin: 16px 0; }
.agent-card { border-top: 1px solid #e2e8f0; padding: 20px 24px; display: flex; align-items: center; }
.agent-info { margin-left: 16px; }
.agent-info h4 { margin: 0; color: #1a365d; font-size: 15px; }
.agent-info p { margin: 2px 0; color: #718096; font-size: 13px; }
.footer { background-color: #f7fafc; padding: 20px 24px; text-align: center; font-size: 11px; color: #a0aec0; }
.footer a { color: #718096; }
@media only screen and (max-width: 480px) {
.container { width: 100% !important; }
.body-content { padding: 0 16px 16px 16px; }
.body-content h1 { font-size: 20px; }
}
</style>
</head>
<body>
<center>
<table role="presentation" width="100%" style="background-color:#f4f4f7;padding:24px 0;">
<tr><td align="center">
<table role="presentation" class="container" width="600" cellpadding="0" cellspacing="0">
<!-- HEADER -->
<tr><td class="header">
<!-- Replace src with brokerage logo URL -->
<img src="{{brokerage_logo_url}}" alt="{{brokerage_name}}" />
<h2>Transaction Update</h2>
</td></tr>
<!-- MILESTONE BADGE -->
<tr><td>
<div class="milestone-badge">
<h3>{{milestone_label}}</h3>
<p>{{property_address}}</p>
</div>
</td></tr>
<!-- BODY -->
<tr><td class="body-content">
<h1>{{email_headline}}</h1>
<p>Hi {{client_first_name}},</p>
<p>{{email_body_paragraph}}</p>
<div class="next-steps">
<h4>What Happens Next</h4>
<p>{{next_steps_text}}</p>
</div>
{{#if cta_url}}
<center>
<a href="{{cta_url}}" class="cta-button">{{cta_text}}</a>
</center>
{{/if}}
</td></tr>
<!-- AGENT CARD -->
<tr><td class="agent-card">
<div class="agent-info">
<h4>{{agent_name}}</h4>
<p>Your Real Estate Agent</p>
<p>📞 {{agent_phone}} | ✉️ {{agent_email}}</p>
</div>
</td></tr>
<!-- FOOTER -->
<tr><td class="footer">
<p>{{brokerage_name}} | {{brokerage_address}}</p>
<p>You are receiving this email because you are a client involved in a real estate transaction with us.</p>
<p><a href="{{unsubscribe}}">Unsubscribe</a> from transaction updates</p>
<p>© {{current_year}} {{brokerage_name}}. All rights reserved.</p>
</td></tr>
</table>
</td></tr>
</table>
</center>
</body>
</html>{
"brokerage_logo_url": "https://sunsetrealty.com/logo.png",
"brokerage_name": "Sunset Realty Group",
"brokerage_address": "123 Main Street, Suite 200, Anytown, CA 90210",
"milestone_label": "OFFER ACCEPTED",
"property_address": "456 Oak Avenue, Anytown, CA 90210",
"email_headline": "Your Offer Has Been Accepted! 🎉",
"client_first_name": "Sarah",
"email_body_paragraph": "Great news — the seller has accepted your offer on 456 Oak Avenue! This is a huge milestone, and we are thrilled for you. Your agent Sarah Johnson will be reaching out shortly to walk you through the next steps in the process, including scheduling the home inspection and finalizing your earnest money deposit.",
"next_steps_text": "Within the next 1-2 business days, we will schedule your home inspection and confirm your earnest money deposit instructions with the title company. Your agent will send you all the details.",
"cta_url": "",
"cta_text": "",
"agent_name": "Sarah Johnson",
"agent_phone": "(555) 123-4567",
"agent_email": "sarah@sunsetrealty.com",
"current_year": "2025"
}SMS Consent Capture Workflow
Type: workflow Zapier workflow that processes new SMS consent form submissions from Jotform, syncs consent status to Follow Up Boss CRM, adds a note to the Open to Close transaction, and logs the consent record to Google Sheets for compliance auditing. This ensures that SMS notifications are only sent to clients who have provided TCPA-compliant written consent.
Implementation
Trigger: Jotform — New Submission
- App: Jotform
- Trigger Event: New Submission
- Form: 'SMS Consent for Transaction Updates'
Output fields:
- client_name
- client_phone
- client_email
- property_address
- agent_name
- consent_checkbox (value: 'I consent to receive automated text message updates...')
- e_signature (base64 image)
- submission_timestamp
- submission_ip
- submission_id
Step 2: Zapier Filter
Only continue if: consent_checkbox (Text) is not empty AND client_phone (Text) is not empty. Purpose: Ensures only completed consent forms trigger downstream actions.
Step 3: Zapier Formatter — Phone Number Standardization
- Transform: Numbers → Format Phone Number
- Input: {{client_phone}}
- To Format: +1XXXXXXXXXX (E.164)
- Purpose: Twilio requires E.164 format; ensures consistency across systems
Step 4: Follow Up Boss — Update Contact
- App: Follow Up Boss
- Action: Update or Create Contact
- Match by: Phone Number = {{formatted_phone}}
- Update fields — Custom Field 'SMS Consent': 'Yes'
- Update fields — Custom Field 'SMS Consent Date': {{submission_timestamp}}
- Update fields — Tags: Add tag 'sms-opted-in'
- If no match found, create new contact with: Name: {{client_name}}, Phone: {{formatted_phone}}, Email: {{client_email}}, Tags: 'sms-opted-in'
The 'SMS Consent' custom field must be created in FUB Admin → Custom Fields beforehand.
Step 5: Open to Close — Add Transaction Note
- App: Open to Close
- Action: Create Note on Transaction
- Transaction: Search by Property Address = {{property_address}}
- Note body: 'SMS consent received from {{client_name}} ({{formatted_phone}}) on {{submission_timestamp}}. Submission ID: {{submission_id}}. Automated text updates are now enabled for this client.'
Fallback: If no matching transaction is found, the note step will error — Zap 4 (error monitor) will alert MSP.
Step 6: Google Sheets — Log Consent Record
- App: Google Sheets
- Action: Create Spreadsheet Row
- Spreadsheet: 'SMS Consent Records'
- Sheet: 'Consent Log'
- Column A (Timestamp): {{submission_timestamp}}
- Column B (Client Name): {{client_name}}
- Column C (Phone): {{formatted_phone}}
- Column D (Email): {{client_email}}
- Column E (Property): {{property_address}}
- Column F (Agent): {{agent_name}}
- Column G (Consent Text): {{consent_checkbox}}
- Column H (IP Address): {{submission_ip}}
- Column I (Submission ID): {{submission_id}}
- Column J (E-Signature): 'On file in Jotform submission {{submission_id}}'
Compliance Notes
Never delete rows from the consent log. Consent records must be retained for a minimum of 4 years (TCPA statute of limitations).
- Jotform retains the original submission with e-signature indefinitely.
- If a client revokes consent (texts STOP), Twilio handles opt-out automatically.
- To manually revoke consent: update FUB custom field to 'Revoked' and add a Google Sheets row noting the revocation.
Weekly Performance Report Generator
Type: workflow Scheduled Zapier workflow that runs every Monday morning, aggregates the past week's notification data from the Google Sheets log, and sends a formatted summary email to the brokerage admin and the MSP account manager. Provides visibility into system health, notification volumes, and agent adoption metrics.
Implementation
Trigger
- App: Schedule by Zapier
- Trigger Event: Every Week
- Day: Monday
- Time: 8:00 AM (client's local timezone)
Step 2: Google Sheets — Get All Rows (Last 7 Days)
- App: Google Sheets
- Action: Lookup Spreadsheet Rows
- Spreadsheet: 'Transaction Notification Log'
- Sheet: 'Notifications'
- Lookup Column: A (Timestamp)
- Lookup Value: Use Zapier Formatter in a preceding step to calculate 7-days-ago date — Formatter → Date → Subtract 7 days from {{zap_meta_human_now}} → Format as YYYY-MM-DD
Zapier's native Google Sheets search has limitations on date filtering. RECOMMENDED APPROACH: Use a helper row in Google Sheets that calculates weekly stats.
Alternative Step 2: Google Sheets — Read Named Range
Add a 'Weekly Summary' tab in the Google Sheet with the following formulas:
Cell B1 (label: 'Week Starting'): =TODAY()-WEEKDAY(TODAY(),2)+1-7
Cell B2 (label: 'Total Notifications'): =COUNTIFS(Notifications!A:A,">="&B1,Notifications!A:A,"<"&B1+7)
Cell B3 (label: 'SMS Sent'): =COUNTIFS(Notifications!A:A,">="&B1,Notifications!A:A,"<"&B1+7,Notifications!H:H,"*SMS*")
Cell B4 (label: 'Emails Sent'): =COUNTIFS(Notifications!A:A,">="&B1,Notifications!A:A,"<"&B1+7,Notifications!H:H,"*Email*")
Cell B5 (label: 'Failures'): =COUNTIFS(Notifications!A:A,">="&B1,Notifications!A:A,"<"&B1+7,Notifications!I:I,"Failed")
Cell B6 (label: 'Unique Transactions'): =SUMPRODUCT((Notifications!A:A>=$B$1)*(Notifications!A:A<$B$1+7)/COUNTIFS(Notifications!B:B,Notifications!B:B,Notifications!A:A,">="&$B$1,Notifications!A:A,"<"&$B$1+7))
Cell B7 (label: 'Active Agents'): Use UNIQUE + COUNTIF combination- App: Google Sheets → Get Cell Contents
- Cells: B1, B2, B3, B4, B5, B6, B7
Step 3: Zapier Formatter — Build Report Body
- Transform: Text → Create
- Template: (see below)
Weekly Transaction Update Report
================================
Week of: {{B1}}
Notification Summary:
• Total notifications sent: {{B2}}
• SMS messages: {{B3}}
• Email messages: {{B4}}
• Failures: {{B5}}
• Delivery success rate: {{calculated: (B2-B5)/B2 * 100}}%
Transaction Activity:
• Active transactions with updates: {{B6}}
System Health: {{if B5 = 0: '✅ All systems healthy' else: '⚠️ {{B5}} failures detected — review Zapier task history'}}
Action Items:
{{if B5 > 0: '• Review failed notifications in Zapier task history and resend manually if needed'}}
{{if B2 = 0: '• No notifications sent this week — verify agents are updating transaction stages in Open to Close'}}
• Review any new transactions missing SMS consent
---
This is an automated report from your Transaction Update Automation system.
Managed by [MSP Name] | Support: [msp-support-email] | [msp-phone]Step 4: Gmail/SendGrid — Send Report Email
- App: Gmail (or SendGrid)
- Action: Send Email
- To: brokerage-admin@sunsetrealty.com, account-manager@yourmsp.com
- Subject: '📊 Weekly Transaction Update Report — {{B1}} — [Brokerage Name]'
- Body: {{formatted_report_body}} (from Step 3)
- Attachments: None (or optionally attach a Google Sheets export)
Step 5 (Optional): Slack — Post to MSP Channel
If your MSP uses Slack for internal notifications:
- App: Slack
- Action: Send Channel Message
- Channel: #client-[brokerage-name]
- Message: 'Weekly report for [Brokerage Name]: {{B2}} notifications ({{B5}} failures). Success rate: {{rate}}%'
Post-Closing Review Request Trigger
Type: workflow Optional upsell workflow that fires 3-7 days after the Post-Closing milestone. Sends the client a personalized email and SMS asking them to leave a Google Business or Zillow review for their agent. This is a high-value add-on that directly impacts brokerage revenue through improved online reputation. Included here because it uses the same infrastructure (Zapier, Twilio, SendGrid) with minimal additional configuration.
Implementation
This is an OPTIONAL UPSELL workflow. Offer as a Phase 2 add-on. Estimated additional MSP revenue: $500 one-time setup + $50/mo management
Trigger Options
Step: Send Review Request Email
{
"client_first_name": "{{client_first_name}}",
"agent_name": "{{agent_name}}",
"property_address": "{{property_address}}",
"google_review_url": "https://g.page/r/[BROKERAGE_GOOGLE_PLACE_ID]/review",
"zillow_review_url": "https://www.zillow.com/profile/[AGENT_ZILLOW_SCREENNAME]/#reviews",
"email_headline": "How Was Your Experience?",
"email_body_paragraph": "Congratulations again on your new home at {{property_address}}! We hope you are settling in well. If you had a great experience working with {{agent_name}}, we would be incredibly grateful if you could take 2 minutes to share your feedback. Your review helps other families find the right agent and means the world to our team.",
"cta_url": "https://g.page/r/[BROKERAGE_GOOGLE_PLACE_ID]/review",
"cta_text": "Leave a Google Review ⭐"
}Step: Send Review Request SMS
Hi {{first_name}}! Congrats again on {{address}}! 🏡 If {{agent_name}} did a great job, we would love a quick Google review: [short_url]. It means a lot! Reply STOP to opt out.Notes
- Use a URL shortener (Bitly or Rebrandly) for the Google review link in SMS
- Track review conversion rate: compare review requests sent vs. new reviews received
- Some brokerages may prefer to send the review request from the agent's personal email rather than the automated system — discuss during discovery
- Zillow reviews must be left by verified clients; Google reviews are open to anyone
- Do NOT send review requests for transactions that had disputes or unhappy clients — add a manual 'Skip Review Request' flag in Open to Close for agents to set
Testing & Validation
- Create a test buyer transaction in Open to Close with MSP technician's contact info. Advance to 'Offer Accepted' stage. Verify that within 5 minutes: (1) SMS arrives on technician's phone with correct property address, client name, and agent name, (2) email arrives in technician's inbox (not spam) with branded template and correct dynamic fields, (3) a new row appears in the Google Sheets notification log with correct data, (4) a timeline note appears in the Follow Up Boss contact record.
- Create a test seller transaction in Open to Close. Advance through all 9 seller milestones sequentially (waiting 2 minutes between each). Verify each milestone triggers the correct unique SMS and email template — not the buyer version. Confirm no duplicate messages are sent for any single milestone change.
- Test SMS opt-out compliance: Reply STOP to the brokerage's Twilio 10DLC number from the test phone. Verify Twilio's auto-responder confirms opt-out. Then advance the test transaction to the next milestone. Verify that email notification still sends but SMS does NOT send. Then reply START and verify SMS resumes on the subsequent milestone.
- Test email deliverability: Send test milestone emails to accounts on Gmail, Outlook/Hotmail, Yahoo, and Apple iCloud. Verify all land in the primary inbox (not Promotions or Spam tabs). Check email headers to confirm SPF=pass, DKIM=pass, DMARC=pass using a service like mail-tester.com (score should be 9/10 or higher).
- Test the SMS consent form on the iPad in Guided Access (kiosk) mode. Submit a test consent form. Verify: (1) Jotform records the submission with timestamp and IP, (2) Follow Up Boss contact is updated with 'SMS Consent = Yes' custom field and 'sms-opted-in' tag, (3) Google Sheets consent log receives a new row with all required fields, (4) Open to Close transaction receives a note confirming consent.
- Test error handling: Temporarily delete the Twilio API credentials from Zapier's Twilio connection. Trigger a milestone change. Verify that: (1) the SMS step fails, (2) the email step still sends successfully (paths should be independent), (3) Zap 4 (error monitor) sends an alert email to the MSP inbox within 5 minutes, (4) the notification log records the failure.
- Test the weekly performance report: Manually trigger the report Zap or wait for the next scheduled Monday run. Verify the report email arrives with accurate notification counts matching the Google Sheets data. Verify the calculation of success rate and that failure count matches any test failures introduced.
- Perform a volume test: Create 5 test transactions and advance each through 3 milestones within a 10-minute period (simulating a busy brokerage day). Verify all 15 milestone events trigger correctly without delays, duplicates, or dropped notifications. Check Zapier task history for any throttling or queue delays.
- Verify mobile rendering: Open milestone emails on iPhone (iOS Mail and Gmail app) and Android (Gmail app and Samsung Email). Confirm the HTML template renders correctly, logo displays, CTA buttons are tappable, and text is readable without horizontal scrolling.
- Test the full lifecycle: Create a buyer transaction, submit the SMS consent form, advance through all 12 milestones from 'Pre-Approval Received' to 'Post-Closing / Keys Handed Over', verify all 12 email notifications and 9 SMS notifications (3 milestones are email-only) arrive correctly, then verify the post-closing review request arrives 5 days after the final milestone (if the upsell workflow is enabled).
Client Handoff
The client handoff session should be a 90-minute meeting with the principal broker, office manager, and 2-3 lead agents. Cover the following topics:
Maintenance
Ongoing Managed Service Responsibilities (billed at $200-500/month):
Weekly (15 minutes)
- Review the automated weekly performance report email for anomalies (sudden drop in notification volume, spike in failures)
- Check Zapier task history for any failed tasks and retry or investigate
- Verify Twilio and SendGrid dashboards show healthy delivery rates (>98% SMS delivery, >95% email delivery)
Monthly (1 hour)
- Review Zapier task usage against plan limits — upgrade plan tier proactively if approaching 80% of monthly task allowance
- Check SendGrid sender reputation score (target: 90+); investigate any bounce rate increases
- Review Twilio messaging logs for carrier filtering or delivery issues
- Audit the SMS consent log for completeness — every active client receiving SMS should have a consent record
- Send monthly summary report to brokerage admin with trends and recommendations
- Verify all SaaS subscriptions are current and payment methods are valid
Quarterly (2-3 hours)
- Business review meeting with brokerage leadership: review notification analytics, gather feedback on message content, discuss any new milestones or transaction types to add
- Update email and SMS templates based on seasonal content, agent roster changes, or brokerage branding updates
- Review and update A2P 10DLC campaign registration if messaging use case has changed
- Test all Zaps end-to-end (mini regression test) to catch any API changes or connector updates
- Review DNS records (SPF/DKIM/DMARC) for any changes that could affect deliverability
- Propose upsell opportunities: post-closing review requests, anniversary/home-iversary drip campaigns, listing alert automations
Annually (4-6 hours)
- Full system audit: review all Zaps, templates, integrations, and credentials
- Rotate API keys and update stored credentials in MSP password vault
- Review compliance posture: any new state privacy laws, TCPA updates, or FCC rule changes
- Renegotiate SaaS subscriptions for volume discounts if applicable
- Archive notification logs older than the retention period (but retain SMS consent records indefinitely)
Escalation Path
SLA Targets
- Notification delivery rate: 99.5%
- Alert response time: 15 minutes (business hours) / 4 hours (after hours)
- Template change requests: 2 business days
- New milestone addition: 5 business days
- System uptime: 99.9% (dependent on SaaS vendor SLAs)
Alternatives
Open to Close Native-Only (No Zapier/Twilio)
Use Open to Close's built-in automated text triggers and email notifications without any external middleware. Open to Close natively supports SMS and email triggers that fire when transaction stages change, which may be sufficient for brokerages with straightforward notification needs. No Zapier, Twilio, or SendGrid accounts needed.
Recommend when: The brokerage is small (under 5 agents), budget-constrained, wants the fastest possible go-live, and does not need advanced reporting or compliance audit trails.
Self-Hosted n8n Replacement for Zapier
Replace Zapier with self-hosted n8n (open-source workflow automation) running on an MSP-managed VPS. n8n provides the same trigger→action workflow capabilities as Zapier but with no per-task fees, unlimited executions, and full MSP control. Host on a $20/month VPS (DigitalOcean, Hetzner, or Linode) and manage multiple real estate clients from one instance.
Recommend when: The MSP serves 3+ real estate clients and wants to maximize recurring margin, has DevOps capability on staff, and is willing to own infrastructure reliability.
Dotloop or SkySlope Instead of Open to Close
If the brokerage already uses Dotloop (Zillow ecosystem) or SkySlope (mandated by their franchise or brokerage network), build the automation on top of the existing TMS rather than migrating to Open to Close. Both platforms support status-change triggers via Zapier integrations and/or native APIs.
All-in-One Platform: Wise Agent or kvCORE
Use an all-in-one real estate platform that combines CRM, transaction management, and automated communications in a single system. Wise Agent ($49/mo for 5 users) includes transaction tracking with automated email/text campaigns. kvCORE (Inside Real Estate) offers similar capabilities at enterprise scale. This eliminates the need for separate TMS, CRM, and middleware.
Custom Development with Make + Airtable
Replace the Zapier + Google Sheets stack with Make (formerly Integromat) for workflow automation and Airtable as the notification log and configuration database. Make offers more complex logic at lower per-operation cost, and Airtable provides a richer database experience with built-in views, forms, and automations.
Recommend when: The brokerage processes 30+ transactions/month, the MSP team is comfortable with Make, or the client wants self-service template editing capability.
Want early access to the full toolkit?