Skip to content

State Machine Card

A printable summary of the pipeline state machine. Tape it above your monitor.

StatePlain meaningTypical duration
NEWInquiry arrived. No outreach yet.Minutes to hours (5-min SLA target).
CONTACTINGFirst outreach made. Awaiting response.Days.
QUALIFIEDMotivated and shopping. Covers searching + touring.Weeks to months.
COMMITTEDBuyer’s agreement signed. Working with you, not just browsing.Days to weeks before an offer lands.
IN_CONTRACTOffer accepted; in escrow.30–45 days (market-dependent).
CLOSEDFunded. Keys exchanged.Terminal-ish (anniversary touches handled separately).
ARCHIVEDSet aside after no engagement. Not terminal — re-engageable.Indefinite.
TRASHEDBad 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 → ToTriggerWhat it means in practice
NEW → CONTACTINGFirst logged outreach (call / email / text)The SLA clock stops here.
NEW → TRASHEDBogus contact detectedJunk number, fake email, duplicate.
CONTACTING → QUALIFIEDMotivation confirmedThey told you they’re serious. Pre-approval for buyers; listing intent for sellers.
CONTACTING → ARCHIVED21-day timeout with ≥6 contact attempts loggedGoing-dark final email is sent; active drips cleared.
QUALIFIED → COMMITTEDBuyer’s agreement signedA signed document reference is required.
COMMITTED → IN_CONTRACTContract executedOffer accepted, escrow opened.
IN_CONTRACT → CLOSEDClosing completeDeal funded.

Reverse transitions (require a reason code)

Section titled “Reverse transitions (require a reason code)”

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 → ToReason codeWhat it captures
COMMITTED → QUALIFIEDdeal_collapsedBuyer’s agreement fell apart before contract. Free-text reason in the payload.
IN_CONTRACT → QUALIFIEDcontract_voidedContract executed but voided before closing (financing, inspection, cold feet, mutual release).
NEW → TRASHEDbogus_contact_detectedPhone is invalid, email bounces, name is asdf asdf.
CONTACTING → TRASHEDbogus_contact_detectedDiscovered mid-outreach. Often: number connects to wrong person.

Re-entry transitions (the “not terminal” cases)

Section titled “Re-entry transitions (the “not terminal” cases)”
From → ToTriggerNotes
ARCHIVED → CONTACTINGlead_re_engagedEither a manual reactivation or a behavioral signal (new property views, score increase). The lead drops back into your active workflow.
TRASHED → NEWcontact_info_updatedNew 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.

What counts as an “action” at each column

Section titled “What counts as an “action” at each column”
ColumnYour next action is usually…
NEWMake first contact within the SLA window.
CONTACTINGFollow up; aim for two-way conversation.
QUALIFIEDSchedule showings; share matching listings; move toward commitment.
COMMITTEDRun the buying process — offers, negotiations.
IN_CONTRACTCoordinate inspections, appraisal, financing milestones.
CLOSEDSend the closing gift; queue the anniversary touch.
ARCHIVEDWatch for re-engagement signals; reach out if the score climbs.
TRASHEDNothing until the contact info is updated.