A printable summary of the pipeline state machine. Tape it above your monitor.
| State | Plain meaning | Typical duration |
|---|
| NEW | Inquiry arrived. No outreach yet. | Minutes to hours (5-min SLA target). |
| CONTACTING | First outreach made. Awaiting response. | Days. |
| QUALIFIED | Motivated and shopping. Covers searching + touring. | Weeks to months. |
| COMMITTED | Buyer’s agreement signed. Working with you, not just browsing. | Days to weeks before an offer lands. |
| IN_CONTRACT | Offer accepted; in escrow. | 30–45 days (market-dependent). |
| CLOSED | Funded. Keys exchanged. | Terminal-ish (anniversary touches handled separately). |
| ARCHIVED | Set aside after no engagement. Not terminal — re-engageable. | Indefinite. |
| TRASHED | Bad contact data. Not terminal — fix the data and it re-enters NEW. | Indefinite. |
stateDiagram-v2
direction LR
[*] --> NEW: contact_form_submission
NEW --> CONTACTING: contact_attempted
NEW --> TRASHED: bogus_contact_detected
CONTACTING --> QUALIFIED: motivation_confirmed
CONTACTING --> ARCHIVED: timeout_21d_no_response
CONTACTING --> TRASHED: bogus_contact_detected
QUALIFIED --> COMMITTED: buyer_agreement_signed
QUALIFIED --> ARCHIVED: timeout_180d_no_progress
COMMITTED --> IN_CONTRACT: contract_executed
COMMITTED --> QUALIFIED: deal_collapsed
IN_CONTRACT --> CLOSED: closing_complete
IN_CONTRACT --> QUALIFIED: contract_voided
ARCHIVED --> CONTACTING: lead_re_engaged
TRASHED --> NEW: contact_info_updated
| From → To | Trigger | What it means in practice |
|---|
NEW → CONTACTING | First logged outreach (call / email / text) | The SLA clock stops here. |
NEW → TRASHED | Bogus contact detected | Junk number, fake email, duplicate. |
CONTACTING → QUALIFIED | Motivation confirmed | They told you they’re serious. Pre-approval for buyers; listing intent for sellers. |
CONTACTING → ARCHIVED | 21-day timeout with ≥6 contact attempts logged | Going-dark final email is sent; active drips cleared. |
QUALIFIED → COMMITTED | Buyer’s agreement signed | A signed document reference is required. |
COMMITTED → IN_CONTRACT | Contract executed | Offer accepted, escrow opened. |
IN_CONTRACT → CLOSED | Closing complete | Deal funded. |
A reverse move is a real event with analytical value — not a failure to track. The state machine enforces a reason code at the moment of transition.
| From → To | Reason code | What it captures |
|---|
COMMITTED → QUALIFIED | deal_collapsed | Buyer’s agreement fell apart before contract. Free-text reason in the payload. |
IN_CONTRACT → QUALIFIED | contract_voided | Contract executed but voided before closing (financing, inspection, cold feet, mutual release). |
NEW → TRASHED | bogus_contact_detected | Phone is invalid, email bounces, name is asdf asdf. |
CONTACTING → TRASHED | bogus_contact_detected | Discovered mid-outreach. Often: number connects to wrong person. |
| From → To | Trigger | Notes |
|---|
ARCHIVED → CONTACTING | lead_re_engaged | Either a manual reactivation or a behavioral signal (new property views, score increase). The lead drops back into your active workflow. |
TRASHED → NEW | contact_info_updated | New valid email or phone replaces the bad one. The lead re-enters the standard intake flow from the top. |
ARCHIVED and TRASHED are intentionally re-enterable. A lead in either column is recoverable; neither is a delete.
CLOSED does not loop back to anything via the state machine. Anniversary touches, past-client newsletters, and referral follow-ups are handled by the alerts system, not the pipeline. A repeat transaction with a past client creates a new lead.
| Column | Your next action is usually… |
|---|
| NEW | Make first contact within the SLA window. |
| CONTACTING | Follow up; aim for two-way conversation. |
| QUALIFIED | Schedule showings; share matching listings; move toward commitment. |
| COMMITTED | Run the buying process — offers, negotiations. |
| IN_CONTRACT | Coordinate inspections, appraisal, financing milestones. |
| CLOSED | Send the closing gift; queue the anniversary touch. |
| ARCHIVED | Watch for re-engagement signals; reach out if the score climbs. |
| TRASHED | Nothing until the contact info is updated. |