Help Centre
COLD EMAIL AGENT · CONCEPTS

Lead lifecycle

The complete state machine a lead moves through - Active, Contacted, ReplyReceived, Interested, MeetingBooked, Bounced, Unsubscribed - and what triggers each transition.

Every lead in a campaign has a status. That status changes in response to specific events - an email sending, a reply landing, a bounce event, a meeting being booked. This page documents every status and the event that drives each transition, so you can read the Leads tab with confidence and understand why a lead is stuck where it is.

The 14 statuses

Source of truth: packages/db/src/types/enums.ts - the OutreachLeadStatus enum.

StatusWhat it means
ActiveDefault. Lead is in the pool, waiting to be contacted.
NotYetContactedLead is explicitly held out of the sequence - imported but not queued.
ContactedStep 1 has been delivered.
ReplyReceivedLead replied to any step (not yet classified).
RepliedReply has been acknowledged / processed.
InterestedReply classified as positive by the AI SDR.
NotInterestedReply classified as negative or objection by the AI SDR.
OutOfOfficeAn auto-reply was detected - lead hasn't seen the email yet.
MeetingBookedA call or meeting has been scheduled on the salesperson's calendar.
CompletedThe booked meeting has occurred.
ConvertedThe deal has closed - lead is now a customer.
BouncedEmail delivery failed (hard or soft bounce).
UnsubscribedLead has unsubscribed.
CompletedNoReplyLegacy status - a lead that walked the whole sequence without replying.

What triggers each transition

Leads are event-driven. Every status change comes from a specific system event:

TransitionEvent
- Contactedemail_sent - step 1 is delivered to the inbox provider.
- ReplyReceivedreply_received or auto_reply_received - any inbound message on the thread.
- Interestedlead_interested - AI SDR classifier decides the reply is positive.
- NotInterestedlead_not_interested - AI SDR classifier decides the reply is negative.
- OutOfOfficelead_out_of_office - detected from the reply content.
- MeetingBookedlead_meeting_booked - a calendar event exists on the assigned salesperson's calendar.
- Completedlead_meeting_completed - the calendar event passed and wasn't cancelled.
- Convertedlead_closed - marked as closed-won in the CRM.
- Bouncedemail_bounced - inbox provider returned a bounce code.
- Unsubscribedlead_unsubscribed or DNC handling - the person opted out or was blocked from future outreach.

Important distinction - classification vs scheduling

Interested and MeetingBooked are two different things:

  • Interested is a classification - the AI decided the reply text sounded positive. The lead hasn't booked anything yet.
  • MeetingBooked is a calendar event - there's an actual slot on your salesperson's calendar.

A lead can be Interested without being MeetingBooked (they expressed interest but didn't click the link yet). A lead rarely becomes MeetingBooked without first being Interested, but it's possible if they reply directly with a time.

The AI SDR's role in this lifecycle

When AI SDR reply handling is on for a campaign:

  • Every reply gets classified automatically - driving the Interested / NotInterested / OutOfOffice transition.
  • Positive replies may be auto-answered to keep the conversation moving toward a booked meeting.
  • A booked meeting is routed to the campaign's Assigned Salesperson - whoever you picked on the Options tab.

If AI SDR is off, replies still land in the AI SDR inbox but you classify them manually.

Bounce handling and unsubscribe

  • Bounced is a terminal state for that lead in that campaign. Re-adding bounced leads should be a deliberate choice (often a mailing error, not a real bounce).
  • Unsubscribed / DNC blocks future outreach to that address. Only remove a person from DNC or the blocklist when they have explicitly re-consented.

Where to see statuses in the UI

  • The Leads tab shows every lead with their current status.
  • Status filters in the Leads table let you jump straight to Bounced, Interested, or any other state.
  • The Leads tab's History view separates manual uploads from lead-search/import batches so you can see where leads came from.
  • The Analytics tab aggregates these statuses into positive reply rate, booked call rate, and bounce rate.

On this page