Two shared conditions sit at the top of every workflow. First, the channel gate: read client_update_channel and send only on the permitted channels, falling back to email if SMS is suppressed and to a call task if both are. Second, the audience gate: client messages and professional messages are always separate sends with separate copy, never one email with everybody copied.
1. Contract Intake and Transaction Build
Trigger: contract intake form submitted.
Actions in order:
- Create the transaction opportunity at Contract Executed, named with the property address and the closing date.
- Write every field from the form. Apply txn-active, the side tag, and txn-cash or txn-financed from txn_financing_type. Add txn-fha-va for FHA, VA or USDA.
- Generate the transaction timeline page and store its link on the record.
- Schedule every deadline reminder in this single pass: 5 days, 2 days and 1 day before each of inspection_objection_deadline, inspection_resolution_deadline, financing_contingency_deadline, title_review_deadline and loan_commitment_deadline.
- Send the client message: "Congratulations {{first_name}} - {{txn_property_address}} is under contract, targeting {{txn_target_closing_date}}. Next three things: escrow opens, earnest money goes in, and we book your inspection. I'll message you at every step, so no news genuinely means no news. Your live timeline is here: {{timeline_link}}"
- Send three separate professional emails where the matching notify checkbox is ticked - co-operating agent, loan officer, escrow officer - each with the file number, the full deadline schedule, and the contact sheet.
- Create the agent task Confirm escrow opened due in 2 business days.
- Stamp last_client_contact_date.
Exit: record reaches Closed or Terminated.
2. Milestone Broadcast Engine
Why it exists: this is the core of the build. One workflow listens for stage changes and publishes the right message to the right audiences, so adding a milestone later means editing copy rather than building a new sequence.
Trigger: transaction stage changes.
Actions:
- Write the new stage name into last_milestone_sent. Update the timeline page.
- Branch by stage to select the client copy. Each is two sentences: what just happened, and what happens next. Examples - Escrow Opened: "Escrow is open on {{txn_property_address}} ({{escrow_file_number}}). Wire instructions will come directly from the title company and never from me by email - if you get banking details from anyone claiming to be us, call me first." Loan Approved: "Your loan is approved. Last step is the clear to close from the lender, then we book your walkthrough and closing." Clear to Close: "Clear to close just came through - we're done with the hard part. Closing logistics coming in a separate email."
- Send to the client on the permitted channels only.
- Branch by audience. Send the professional version to each of the co-operating agent, lender and escrow officer whose notify checkbox is ticked and for whom this stage is relevant - escrow does not need the inspection scheduling note, and the inspector is not on the loan broadcasts.
- If txn_role is Both sides, send separate messages to buyer and seller with copy written for each, never a shared thread.
- Stamp last_client_contact_date and remove txn-silent-4d.
- Create the next-step task for whoever owns the following milestone.
Exit: Closed or Terminated.
3. Deadline Watchdog and Escalation
Trigger: each scheduled deadline reminder set up in workflow 1.
Actions:
- 5 days out: notify the agent and the coordinator only. No client message - it is too early and only creates anxiety.
- 2 days out: notify the agent and coordinator again, apply deadline-approaching, and send the client a plain-language note: "Quick heads-up: the {{deadline_name}} on {{txn_property_address}} is {{deadline_date}}. Nothing for you to do unless I ask - just so the date isn't a surprise."
- 1 day out with the milestone still not logged: escalate. Notify the broker or team lead as well, create an urgent task, and put the record on the next Weekly Transaction Review agenda.
- Deadline date passes with nothing logged: apply deadline-missed and txn-at-risk, write risk_reason, notify agent, coordinator and broker at once, and create a task to call the client within two hours. No automated client message goes out on a missed deadline - that conversation is a phone call from a human, always.
- Silence watchdog: run daily. If last_client_contact_date is 4 or more days ago and the record is txn-active, apply txn-silent-4d and send a reassurance message naming the current stage and the next expected event. Clear the tag on any logged contact.
Exit: milestone logged, or record Terminated.
4. Inspection Orchestration
Trigger: stage enters Inspection Scheduled.
Actions:
- Send the buyer a confirmation with the date, the window, who attends, and what to expect from the report timeline.
- Email the listing side an access request naming the date, window and attendees. On the seller side, message the seller with preparation notes - pets, access to the attic and crawlspace, utilities on.
- Wait until 24 hours before. Remind buyer, inspector and the access-granting party.
- Wait until 4 hours after the scheduled end. Create the agent task Complete inspection outcome form, and chase it every 12 hours until filled. The objection clock is already running and the form is what starts the resolution tracking.
- On form submission: move to Inspection Complete. Branch on objection intended. If yes, move immediately to Inspection Resolution and confirm the objection deadline is scheduled. If no, notify all parties that the inspection contingency is satisfied and prompt the lender to order the appraisal.
- In Inspection Resolution, send the client a plain-language expectation of the response window and nothing more. The system reports status; the agent advises.
Exit: resolution logged, or Terminated.
5. Appraisal and Financing Tracking
Trigger: stage enters Appraisal Ordered. Skipped entirely when txn-cash is present.
Actions:
- Notify the client that the appraisal is ordered and that results typically take several days, with no promise of a specific date.
- Start a 10-day timer. If appraisal_received_date is still empty, create a coordinator task to chase the lender, and repeat every 3 days.
- On appraisal_outcome being set, move to Appraisal Received and notify the client the same day. Branch on outcome. At or Above contract value: standard milestone message. Below contract value or Subject to repairs: send no automated client message at all. Instead apply txn-at-risk, write risk_reason, and create an urgent call task for the agent with a 1-hour due time. A valuation shortfall is a negotiation, not a notification.
- In Loan Processing, send one scheduled reassurance message at day 5 explaining that underwriting is quiet by design, then rely on the silence watchdog.
- Three days before loan_commitment_deadline with no commitment logged, notify agent, coordinator and broker, and create a task to speak to the loan officer directly rather than emailing.
Exit: Loan Approved, or Terminated.
6. Weekly Transaction Digest
Trigger: Friday 7:00am, and separately Monday 7:00am.
Actions:
- Internal digest to each agent and the coordinator: every txn-active record, its stage, days to closing, the next deadline, and whether txn-at-risk or txn-silent-4d is set. Sorted by nearest deadline, with at-risk records at the top.
- Create a Weekly Transaction Review calendar event if any record carries txn-at-risk.
- Client digest, Friday only, to every active client: "End of week on {{txn_property_address}}: we're at {{current_stage}}, {{days_to_closing}} days to closing, and the next date that matters is {{next_deadline_name}} on {{next_deadline_date}}. Full timeline: {{timeline_link}}" Suppress it for any client who already received a milestone message in the previous 24 hours, so Friday does not read as duplicate noise.
- Stamp last_client_contact_date on every client digest sent.
Exit: record no longer txn-active.
7. BO's Status Concierge
Trigger: inbound SMS or chat from a contact tagged txn-active.
Actions:
- Read the transaction record. Answer status questions directly: "You're at {{current_stage}} on {{txn_property_address}}. The next date is {{next_deadline_name}} on {{next_deadline_date}}, and closing is still targeted for {{txn_target_closing_date}}. Anything specific you want {{agent_first_name}} to call you about?"
- BO may resend the closing logistics, resend the timeline link, confirm the walkthrough or closing time, and book the final walkthrough from the calendar.
- Hard handoff branch. On any of: default, breach, attorney, lawyer, sue, cancel, terminate, extend, extension, waive, dispute, lien, appraisal came in low, or financing fell through - BO sends one line ("Let me get {{agent_first_name}} on this right now."), stops, and alerts the agent by push and SMS with the message text quoted.
- Outside 8am-9pm, BO still answers status questions, because a client awake at 1am worrying is exactly who this is for - but handoff alerts queue as urgent for 7am unless a handoff keyword is present, in which case the agent is notified immediately.
- Every BO conversation stamps last_client_contact_date and clears txn-silent-4d.
Exit: handoff, or record closed.
8. Closing Logistics and Walkthrough
Trigger: stage enters Clear to Close.
Actions:
- Send the client the Final Walkthrough calendar link, restricted to the seven days before closing.
- Send the closing logistics email: time, address, duration, identification requirements, what to bring, how funds are transferred, and an explicit wire fraud warning in bold text - verify every set of wiring instructions by phone with a number you already have, never one from an email.
- Notify the co-operating agent, lender and escrow officer that the file is clear to close, with the walkthrough and closing times once set.
- Wait until 48 hours before closing. Send a utility transfer and address change reminder, plus key handover arrangements and the possession time.
- Wait until 24 hours before. Send SMS confirming time and place with a reschedule contact.
- Wait until 2 hours before. Send a short SMS: "On my way - see you at {{closing_location}} at {{closing_datetime}}. Bring photo ID."
- On the walkthrough being marked complete, notify all professional parties.
Exit: Closed, or Terminated.
9. Post-Close, Review and Handoff
Trigger: stage set to Closed.
Actions:
- Clear txn-active, apply txn-closed, stop every transaction workflow, and stop the Friday digest.
- Send the congratulations message and the complete document package by email within one hour.
- Wait 3 days. Send the post-close survey.
- Branch on the communication score. Top of the scale: wait 1 day, then send the review request with direct links to the two platforms that matter most to the brokerage, and apply review-requested. Mid or low: send no review request at all; create an urgent call task for the agent with the open-text answer quoted, because a mediocre score is information worth having and a public review ask would waste it.
- Wait 7 days after the review request. If review-received is not set, send one reminder and stop. Never a third ask.
- Wait 14 days from closing. Send the referral message: "{{first_name}}, hope the boxes are nearly gone. If anyone you know is thinking about moving, send them my way - I'll look after them the same way."
- Wait 45 days. Hand the contact to the past-client program with the closing date stored as the anniversary trigger, and remove it from the transaction system.
- Terminated branch. If the stage is set to Terminated at any point: stop every workflow immediately, clear txn-active, apply txn-terminated and the reason tag, send no automated message of any kind, and create an urgent call task. Then, after 14 days, enroll a buyer-side client into the active-buyer search sequence or a seller-side client into the seller nurture sequence - a fallen-through deal is still a motivated client.
Exit: handoff to the past-client program.