Stages & automatic movement
A pipeline record's stage moves in exactly two ways: a manual change made in the record detail modal, or an automatic move made by a background process reacting to real activity — an open, a click, a bounce, or a reply. Every move, manual or automatic, is written to the record's history and can be undone.
On this page
The seven stages
| Stage | Badge color |
|---|---|
| Active | Gray |
| Engaged | Blue |
| Interested | Emerald |
| Meeting Requested | Purple |
| Meeting Booked | Green |
| Handed to Client | Orange |
| Not Interested/Disqualified | Red |
Every record starts at Active. The first six read as one forward chain in that order; Disqualified stands apart from the chain — it's reachable from any stage, at any time, automatically or manually.
Changing a stage manually
The record detail modal has a Change stage control — a dropdown offering all seven stages, plus an optional free-text reason (up to 1,000 characters), plus a Change Stage button. A manual change isn't restricted to the forward chain or to any particular order: you can set a record to any of the seven stages from any of the other six, including moving it backward.
Change stage
Automatic movement
A background process checks for queued activity once a minute and applies stage moves on its own, with no one clicking anything. Every one of the signals below is queued the moment the underlying event happens; the once-a-minute check is what actually applies it.
| Signal | Moves record to |
|---|---|
| Email opened | Engaged |
| Link clicked | Engaged |
| Hard bounce | Not Interested/Disqualified |
| Recipient unsubscribes | Not Interested/Disqualified |
| Reply tagged or AI-classified Not Interested | Not Interested/Disqualified |
| Reply tagged or AI-classified Interested | Interested |
| Reply tagged or AI-classified Meeting Requested | Meeting Requested |
A soft bounce never queues a move — only a hard bounce does. And a reply's automatic tag/AI-classification signals fire independently: if you manually tag a reply Meeting Requested, that queues a move on its own, separately from whatever the AI classifier already decided for that same reply — either one reaching Meeting Requested is enough to move the record.
Two firm rules govern whether a queued signal actually moves anything:
- The Active → Engaged → Interested → Meeting Requested chain is forward-only. A signal can move a record further along this chain, but never backward, and never skip based on the record's rank relative to the target — a record already at Interested ignores an incoming "move to Engaged" signal as a no-op, not a downgrade.
- Disqualified is the one exception. A disqualifying signal (hard bounce, unsubscribe, or a Not Interested tag/classification) moves a record to Disqualified from any stage, at any time — including from Meeting Booked or Handed to Client.
Meeting Booked and Handed to Client are never set automatically, under any circumstances. No signal in the table above targets either one — both are reachable only through a manual stage change.
History and undo
Every stage change — manual or automatic — writes one entry to the record's history, shown oldest to newest in the detail modal: the stage it moved from and to, who or what caused it, a timestamp, and the reason if one was given.
| Actor label | Meaning |
|---|---|
| Manual change | A person changed it from the detail modal |
| Automatic | The signal-driven process above changed it |
| AI Assistant | Reserved label for an AI-driven change |
| API | Reserved label for an API-driven change |
Only Manual change and Automatic are actually produced by anything in the app today. AI Assistant and API already have labels ready in the UI, but nothing observed in the current codebase writes a pipeline stage change with either of those two actor types yet.
History
Automatic · Aug 12, 2026, 9:04 AM
Pipeline record created — contact enrolled in campaign.
Automatic · Aug 13, 2026, 11:47 AM
Automatic — triggered by email_event:CLICKED
Manual change · Aug 15, 2026, 10:02 AM
Replied asking about enterprise pricing tiers.
Every entry gets an Undo button except two kinds: the record's original creation entry (there's nothing "before" it to revert to), and an entry that's already been undone (which shows "Undone {time}" in place of the button). Clicking Undo doesn't delete anything — it writes a new history entry that moves the record from wherever it is right now back to that old entry's "from" stage, so the full history keeps growing rather than being rewritten. Undo isn't limited to the single most recent entry — you can undo any earlier, not-yet-undone entry in the log too.
Where to go next
Next: Health score