All workflows open with the same suppression gate: skip SMS steps if sms-opted-out, skip email steps if email-unsubscribed, exit if both. Build it once and reuse it.
1. Instant Acknowledgement and Promise Clock
Trigger: valuation funnel step 3 submitted.
Actions in order:
- Create or merge the contact on mobile, then email. Write every property field from steps 1 and 2.
- Apply seller-lead, valuation-requested and the source tag from the funnel's tracking parameter.
- Create the opportunity in Seller Leads at Valuation Requested, named with the property address.
- Assign by ZIP code first; if no ZIP code match, round-robin across listing agents who are on duty.
- Branch on submission time. If inside 8am-9pm local, send SMS within 2 minutes. If outside, hold the SMS until 8:05am and send the email immediately instead.
- SMS: "Hi {{first_name}}, {{agent_first_name}} here - got your request for {{subject_property_address}}. I pull real comparables rather than running an automated guess, so give me until {{promise_time}} and you'll have it. Anything I should know about the place before I start?"
- Email: confirmation of the details captured, the agent's photo and license line, and the delivery promise restated in the subject line.
- Create task Prepare valuation - {{subject_property_address}} due within one business day, assigned to the agent, with beds, baths, sqft, year, condition and recent_improvements in the task body.
- Notify the agent by push immediately. Move the opportunity to Report In Preparation.
Exit: report delivered, or opt-out.
2. Promise Enforcement and Escalation
Why it exists: the entire funnel rests on a promise with a time on it. One missed promise is worse than never having made one.
Trigger: opportunity enters Report In Preparation.
Actions:
- Wait until 4 hours before the promised delivery time. If the task is still open, send the agent a reminder naming the deadline.
- Wait until 1 hour before. If still open, notify the team lead as well as the agent.
- At the promised time with the task still open, send the homeowner a holding message rather than silence: "{{first_name}}, I'm still pulling two comparables I want in this - you'll have it by {{new_promise_time}}. Didn't want to leave you wondering." Then reset the clock once only.
- If the task is still open 24 hours past the original promise, reassign the lead to a different agent and log it. Chronic misses are a staffing problem the reporting should surface, not a thing to absorb quietly.
Exit: task completed.
3. BO's Pre-Report Conversation
Trigger: 10 hours after valuation-requested, held to the next 8:00am-9:00am window.
Condition: no appointment booked, and move_reason empty.
Actions:
- BO opens: "Morning {{first_name}} - {{agent_first_name}}'s assistant here, just helping get your valuation right. Two things: are the details we have correct ({{beds}} bed, {{baths}} bath, roughly {{approx_sqft}} sq ft), and is the place owner occupied or rented out?"
- On reply, write owner_occupied. If tenanted, apply tenanted-property and note that access and notice periods will shape the marketing plan.
- Second question, one message later: "And what's prompting the move, if you don't mind me asking? It changes what {{agent_first_name}} should be putting in front of you." Write move_reason.
- Value-question branch. On any request for a figure, BO sends the single scripted deflection and immediately offers the Valuation Call calendar. It never attempts a second deflection in the same thread - it hands to the agent instead.
- If move_timeline is ASAP or 1–3 months, BO stops asking questions and offers the Listing Appointment calendar directly: "Given your timeline it's probably worth {{agent_first_name}} seeing it in person - here are times this week: {{listing_appointment_link}}"
- No reply after 1 day: one follow-up only. No reply after that: stop. The report is still coming and the report is the real hook.
Exit: appointment booked, handoff keyword, value question answered with deflection and calendar sent, or opt-out.
4. Report Delivery
Trigger: valuation_range_low and valuation_range_high both populated and the preparation task marked complete.
Actions:
- Stamp valuation_sent_date. Apply report-delivered. Move to Report Delivered.
- Send email with the PDF attached. Structure it: the range, the three comparables used, a paragraph on how condition_rating and recent_improvements position the property inside that range, and one call to action - the Listing Appointment calendar. Subject: "{{subject_property_address}} - what I'd price it at, and why"
- Wait 20 minutes. Send SMS: "{{first_name}}, valuation's in your inbox from me - range plus the three sales I based it on. The honest version is in person though. Want me to come by this week? {{listing_appointment_link}}"
- Score and tag. seller-hot if move_timeline is ASAP or 1–3 months. seller-warm if 3-6 or 6–12 months. seller-curious if over a year or Just curious.
- On email open, apply report-opened, move to In Conversation, and notify the agent in real time. An opened valuation is the best call window in the build.
- On appointment link click without a booking, create an immediate call task for the agent with the note clicked, did not book - call now.
Exit: appointment booked, or opt-out.
5. Hot Seller Pursuit - 14 Days
Trigger: tag seller-hot or report-opened.
Condition: no appointment booked.
Actions:
- Day 1, within 2 hours of the report opening: call task for the agent. Not an email. A call.
- Day 2, 10:00am: SMS: "{{first_name}}, did the range land where you expected? Happy to be wrong either way - tell me the number in your head and I'll tell you honestly if it's achievable." This message outperforms every polite alternative because it invites disagreement.
- Day 4: email with one specific recent sale on their street and a line on what that sale means for their timing.
- Day 6: second call task. Log the attempt either way.
- Day 9: SMS offering the lower-commitment option: "No pressure on a full appointment - would a 20 minute phone call be easier? {{valuation_call_link}}"
- Day 12: email containing the pre-listing preparation checklist, given freely with no ask attached. Value first, then the final nudge.
- Day 14: final SMS: "Last one from me, {{first_name}} - want me to keep you on the monthly sold-on-your-street update, or leave you to it? Either's fine." A reply of either kind is a win; silence routes to workflow 6.
Exit: appointment booked, explicit no, or opt-out. On explicit no, move to Long Nurture and write the reason into objection_noted.
6. Long-Horizon Seller Nurture
Trigger: tag seller-curious, or opportunity moved to Long Nurture.
Actions:
- Stop all SMS. Move entirely to email at monthly cadence, first Thursday.
- Each month: one genuine sold result near subject_property_address, one line on what it means for their property specifically, and a soft one-line close.
- Every quarter, replace the monthly email with a refreshed valuation offer: "{{first_name}}, it's been three months since I looked at {{subject_property_address}} - want an updated range? Takes me an hour and costs you nothing." This is the highest-converting message in the sequence and it works because it is a real offer, not a check-in.
- On any click or reply, apply report-opened, move to In Conversation, notify the agent, and restart workflow 5.
- At 12 months with zero opens, drop to quarterly. At 24 months with zero opens, move to Lost and stop.
Exit: re-engagement, appointment booked, or unsubscribe.
7. Appointment Confirmation, Reminders and No-Show Recovery
Trigger: Listing Appointment or Valuation Call booked.
Actions:
- Move to Appointment Booked. Remove the contact from workflows 3, 5 and 6 immediately.
- Send confirmation email and SMS at once, with the address, the duration, who is coming, and the pre-appointment questionnaire link.
- Wait until 24 hours before. Send email reminder and re-send the questionnaire if not yet completed.
- Wait until 2 hours before. Send SMS: "See you at {{appointment_time}}, {{first_name}} - I'll have the comparables printed. If something's come up, just reply here and we'll move it." Always offer the reschedule. A reschedule is worth many times a no-show.
- On questionnaire submission, write objection_noted, set interviewing_other_agents, apply competing-agents where relevant, and notify the agent with the homeowner's own expected price in the first line.
- Create a prepare-for-appointment task for the agent the morning before, listing every field on the record.
- No-show branch. If the appointment is marked no-show, wait 30 minutes and send: "Missed you, {{first_name}} - no problem at all. Shall we find another time? {{listing_appointment_link}}" Then wait 2 days and send one more. Two no-shows moves the record to Long Nurture rather than continuing to chase.
- Held branch. On marked as showed, move to Appointment Held, and within 4 hours send the proposal email with pricing rationale and marketing plan. Move to Proposal Out.
Exit: listing signed, moved to Long Nurture, or opt-out.
8. Proposal Follow-Up and Decision Close
Trigger: opportunity enters Proposal Out.
Branch on competing-agents. If present, cadence is day 1, day 3, day 6. If absent, day 2 and day 7.
Actions:
- First touch is always a call task, never an email. The agent has been in the house; a text now is a downgrade.
- Second touch addresses objection_noted directly by name. If the objection was price, send the two comparables that support the range rather than restating the range.
- Third touch is a decision-forcing message: "{{first_name}}, I'd rather you tell me no than wonder - are you leaning toward going ahead, or has something changed? Either answer is genuinely fine."
- On signature, move to Listing Signed, trigger the Pre-Listing Walkthrough offer, and remove the contact from every seller sequence.
- On a loss to another agent, move to Lost, record the reason, and enroll in a single workflow that checks back once at 45 days and once at 90 days - because an expired or withdrawn listing is one of the warmest leads an agent can get.
Exit: signed, lost, or opt-out.