---
name: hubspot-lifecycle-stages
slug: hubspot-lifecycle-stages
description: This skill should be used when the user asks to "set up lifecycle stages in HubSpot", "configure HubSpot lifecycle stages", "customize lifecycle stages in HubSpot", "design lead stages in HubSpot", "map the funnel in HubSpot", "set up MQL SQL stages in HubSpot", "fix lifecycle stages in HubSpot", "configure lead status in HubSpot", "design the lead-to-customer journey in HubSpot", or any variation of configuring lifecycle stage architecture specifically in HubSpot CRM for B2B SaaS.
category: general
---

# HubSpot Lifecycle Stages

HubSpot lifecycle stages are a built-in contact property that tracks where a person is in the journey from first touch to customer. HubSpot ships with 8 default stages. Most B2B SaaS teams need to customize them. The defaults are a starting point, not a destination.

The HubSpot-specific challenge: lifecycle stage is a single property shared across contacts and companies, but it behaves differently than most properties. It has special automation rules, a built-in hierarchy, and quirks around backward movement. Understanding these mechanics matters more than the stage names themselves.

## HubSpot Default Stages vs Recommended B2B SaaS Setup

### HubSpot defaults

| Default stage | HubSpot's intended meaning | Problem for B2B SaaS |
|--------------|---------------------------|---------------------|
| Subscriber | Email subscriber | Fine as-is |
| Lead | Form fill or known contact | Too broad. Needs qualification logic |
| MQL | Marketing qualified | No built-in scoring trigger. Must be configured |
| SQL | Sales qualified | No built-in qualification criteria |
| Opportunity | In a deal | Works, but triggers need configuration |
| Customer | Closed-won | Works |
| Evangelist | Advocate | Rarely used. No built-in criteria |
| Other | Catch-all | Delete this. Contacts in "Other" are untrackable |

### Recommended B2B SaaS configuration

| Stage | Keep/Modify/Add | Configuration |
|-------|----------------|---------------|
| Subscriber | Keep | Auto-set when contact submits newsletter form |
| Lead | Keep | Auto-set on any non-subscriber form fill or import |
| MQL | Keep + configure | Auto-set when lead score ≥ threshold OR high-intent action occurs |
| SQL | Keep + configure | Manually set by SDR after qualifying conversation |
| Opportunity | Keep + configure | Auto-set when associated deal is created |
| Customer | Keep + configure | Auto-set when associated deal moves to Closed Won |
| Evangelist | Keep (optional) | Manually set when customer completes advocacy action |
| Other | Delete or rename | Rename to "Recycled" if you need a recycling stage, otherwise delete |

### Adding custom lifecycle stages (Enterprise only)

HubSpot Enterprise allows custom lifecycle stages. Use sparingly.

**Worth adding:**

| Custom stage | Between | Purpose |
|-------------|---------|---------|
| Recycled | After SQL, before MQL re-entry | Contacts that failed qualification but may re-qualify later |
| Disqualified | Terminal | Contacts permanently removed from active pipeline |

**Not worth adding:**
- "Prospect" (between Lead and MQL) — use lead status instead
- "Nurture" — use a list or lead status, not a lifecycle stage
- "Demo Scheduled" — use deal stages, not lifecycle
- "Evaluation" — use deal stages

**Rule of thumb:** If the stage describes a sales process step (demo, proposal, negotiation), it belongs in deal stages. If it describes where the contact is in the overall journey, it's a lifecycle stage. Max 8-10 lifecycle stages total.

---

## How Lifecycle Stage Works in HubSpot

### The hierarchy and automation rules

HubSpot lifecycle stages have a built-in hierarchy. The platform treats them as ordered:

```
Subscriber < Lead < MQL < SQL < Opportunity < Customer < Evangelist
```

**Key mechanics:**

| Mechanic | Behavior | Implication |
|----------|----------|-------------|
| Forward-only by default | HubSpot won't auto-set a lifecycle stage that's "lower" than the current one | A Customer who fills a form won't regress to Lead. Good |
| Manual backward movement | Admins can manually move a stage backward | Use for recycling or disqualification. Don't automate backward movement carelessly |
| Workflows can force backward | Workflows can explicitly set any stage regardless of hierarchy | Use for Recycled/Disqualified flows. Gate with conditions to prevent accidental regression |
| Clear and reset | You can clear the lifecycle stage (set to blank) then set a new one. This bypasses the hierarchy | Use for re-engagement flows (Churned → Opportunity) |
| Deal creation trigger | Creating a deal and associating a contact can auto-set lifecycle to Opportunity | Enable this in Settings → Objects → Deals. Saves manual work |
| Deal close trigger | Closing a deal as Won auto-sets associated contacts to Customer | Enable this in Settings → Objects → Deals |

### Lifecycle stage vs lead status

HubSpot has two related but separate fields. Using them correctly prevents the most common lifecycle architecture mistakes.

| Dimension | Lifecycle Stage | Lead Status |
|-----------|----------------|-------------|
| Scope | Broad journey position | Current operational status within a stage |
| Values | 8-10 stages across the full journey | 5-8 statuses within one or two stages |
| Changes | Infrequently (stage transitions) | Frequently (daily operational updates) |
| Automation | Forward-only by default | No hierarchy restrictions |
| Reporting | Funnel-level conversion | Operational-level tracking |

**Lead status values to configure:**

| Lead status | Used when lifecycle = | Meaning |
|------------|----------------------|---------|
| New | Lead or MQL | Just entered, not yet worked |
| Open | Lead or MQL | Assigned, working in progress |
| In Progress | MQL | SDR actively attempting contact |
| Connected | MQL | SDR reached the contact, conversation started |
| Qualified | MQL → SQL | SDR qualified, passing to AE |
| Unqualified | MQL | SDR reached contact, not a fit right now |
| Recycled | Any | Failed qualification, returned to nurture |
| Bad Timing | SQL | Qualified but not ready. Re-engage later |

**Lead status rules:**
- Lead status is operational. Reps update it daily. Lifecycle stage is strategic. It moves only at key transitions
- Never use lifecycle stage for operational tracking ("Attempting Contact", "Demo Scheduled"). Use lead status or deal stages
- Lead status resets when lifecycle stage changes. When a contact moves from MQL to SQL, reset lead status to "New" (or your equivalent) so the AE starts fresh

---

## Configuring Lifecycle Stage Transitions

### Transition 1: Unknown → Subscriber / Lead

**Trigger:** Contact is created in HubSpot.

**Configuration:**
- In HubSpot Settings → Objects → Contacts → Lifecycle stage: set default lifecycle stage for new contacts
- Set to "Lead" by default. Only set to "Subscriber" if the creation source is explicitly a newsletter/blog subscription
- If using forms: set lifecycle stage per form. Newsletter form → Subscriber. Content download form → Lead. Demo request form → MQL (skip Lead)

**HubSpot setup:**
```
Settings → Objects → Contacts → Lifecycle Stage
  Default lifecycle stage: Lead

Per form override:
  Newsletter form → Subscriber
  Demo request form → MQL
  Contact us form → MQL
  Content download form → Lead
```

### Transition 2: Lead → MQL

**Trigger:** Lead score reaches threshold OR high-intent action.

**Configuration (workflow):**

```
Workflow: Lead → MQL Promotion
Trigger: Contact-based
Enrollment:
  - Lifecycle stage IS Lead
  - AND (HubSpot Score IS >= 50 OR
         Contact has submitted form: Demo Request OR
         Page views includes Pricing Page >= 2 times)
Action:
  1. Set lifecycle stage to MQL
  2. Set lead status to "New"
  3. Set MQL date to today (custom property)
  4. Trigger notification to assigned SDR (or routing workflow)
```

**MQL scoring model (basic):**

| Action | Points | Decay |
|--------|--------|-------|
| Content download | +5 | -1/month |
| Webinar registration | +10 | -2/month |
| Webinar attendance | +15 | -2/month |
| Pricing page view | +15 | -3/month |
| Case study view | +10 | -2/month |
| Demo form submission | +50 (instant MQL) | None |
| Email click | +3 | -1/month |
| Blog visit | +1 | -1/month |

**Firmographic score (added to behavioral):**

| Criterion | Ideal (+15) | Good (+10) | Acceptable (+5) | Poor (0) |
|-----------|------------|-----------|-----------------|---------|
| Employee count | 50-500 | 20-50 or 500-2000 | 10-20 | < 10 or > 5000 |
| Industry | Core vertical | Adjacent vertical | Tangential | Non-ICP |
| Seniority | VP, Director | Manager | IC | Unknown |
| Geography | Primary market | Secondary market | Other | Restricted |

**MQL threshold:** Set at a point where ~30-50% of MQLs are accepted by sales. If acceptance rate is below 30%, the threshold is too low. If above 60%, the threshold is too high and you're leaving pipeline on the table.

### Transition 3: MQL → SQL

**Trigger:** SDR qualifies the contact manually.

**Configuration:**
- SDR manually updates lifecycle stage to SQL after a qualifying conversation
- Or: SDR updates lead status to "Qualified" and a workflow promotes to SQL

```
Workflow: MQL → SQL Promotion
Trigger: Contact-based
Enrollment:
  - Lifecycle stage IS MQL
  - AND Lead status IS Qualified
Action:
  1. Set lifecycle stage to SQL
  2. Set lead status to "New" (reset for AE)
  3. Set SQL date to today (custom property)
  4. Notify assigned AE
```

**SDR qualification must include (minimum):**
- Confirmed need (the contact articulated a problem)
- Budget range discussed (even directionally)
- Timeline indicated (this quarter, next quarter, exploring)
- Next step agreed (meeting with AE)

### Transition 4: SQL → Opportunity

**Trigger:** AE creates a deal and associates the contact.

**Configuration:**
```
Settings → Objects → Deals
  ✓ "Set lifecycle stage to Opportunity when a deal is associated"
```

This is a native HubSpot setting. Enable it. No workflow needed.

### Transition 5: Opportunity → Customer

**Trigger:** Associated deal moves to Closed Won.

**Configuration:**
```
Settings → Objects → Deals
  ✓ "Set lifecycle stage to Customer when a deal is won"
```

Also native. Enable it.

### Transition 6: Recycling (MQL/SQL → Recycled)

**Trigger:** SDR marks contact as unqualified but potentially re-engageable.

**Configuration:**
```
Workflow: Recycle Contact
Trigger: Contact-based
Enrollment:
  - Lead status IS "Unqualified" OR "Bad Timing"
  - AND Lifecycle stage IS MQL or SQL
Action:
  1. Set lifecycle stage to Lead (or custom "Recycled" stage if on Enterprise)
  2. Set lead status to "Recycled"
  3. Enroll in re-nurture email sequence
  4. Set "Recycle Date" to today (custom property)
  5. Set "Recycle Reason" (custom property, from a dropdown)
```

**Recycling rules:**
- Recycled contacts must re-qualify through the scoring model to become MQL again. Don't manually re-MQL recycled contacts
- Set a cooling-off period. Recycled contacts should not be re-eligible for MQL for at least 30 days
- Track recycle reasons. The top 3 recycle reasons tell you what's wrong with MQL criteria or targeting

### Transition 7: Customer → Churned

**Trigger:** Subscription cancelled or contract not renewed.

**Configuration depends on your billing system integration:**
- If using HubSpot Payments or Commerce Hub: automate on subscription status change
- If external billing (Stripe, Chargebee): sync via integration or API
- If manual: CS team updates lifecycle stage when churn is confirmed

```
Workflow: Customer → Churned
Trigger: Contact-based
Enrollment:
  - Lifecycle stage IS Customer
  - AND (Custom property "Subscription Status" IS "Cancelled"
         OR Deal property "Renewal Status" IS "Not Renewed")
Action:
  1. Set lifecycle stage to "Other" (or custom "Churned" stage)
  2. Remove from customer-only campaigns
  3. Enroll in churn-recovery email sequence
  4. Notify CS manager
```

---

## Reporting on Lifecycle Stages

### Essential reports

| Report | Type | Purpose |
|--------|------|---------|
| Lifecycle stage funnel | Funnel report | Conversion rates between each stage |
| Stage velocity | Custom calculated | Average days in each stage |
| MQL → SQL acceptance rate | Ratio report | Marketing-sales alignment indicator |
| Stage volume over time | Time-series | Trend of contacts entering each stage per month |
| Recycled re-conversion rate | Custom | % of recycled contacts that re-qualify as MQL |
| Lead source by stage | Breakdown | Which sources produce contacts that reach each stage |

### Building in HubSpot

```
Reports → Create Report → Contact reports

Funnel report:
  X-axis: Lifecycle stage
  Filter: Created date in last 90 days
  Breakdown by: Lead source (optional)

Stage velocity:
  Create calculated property "Days as MQL":
    = SQL Date - MQL Date
  Report on average "Days as MQL" over time
```

---

## Common HubSpot Lifecycle Mistakes

| Mistake | Why it's wrong | Fix |
|---------|---------------|-----|
| Using lifecycle stage for operational tracking | "Attempting Contact" and "Demo Scheduled" clog the funnel with process steps | Use lead status or deal stages for operational tracking |
| Not enabling deal-based lifecycle automation | Manual lifecycle updates on deal creation/close are forgotten | Enable in Settings → Objects → Deals |
| MQL with no scoring model | "Marketing thinks they're ready" is not a definition | Build a scoring model with behavioral + firmographic points |
| No lead status field | Lifecycle stage alone can't track operational status within a stage | Configure lead status values per lifecycle stage |
| Backward lifecycle movement without controls | A workflow accidentally resets customers to Lead when they fill a form | Add conditions: only change lifecycle if current stage < target stage |
| "Other" stage has 5,000 contacts | Nobody knows what "Other" means. Contacts rot there | Delete "Other" or rename to a specific purpose (Recycled, Disqualified) |
| No MQL or SQL date properties | Can't measure velocity without timestamps | Create custom date properties: MQL Date, SQL Date, set via workflow |
| Lifecycle on company but not contact | Company lifecycle and contact lifecycle serve different purposes | Use both. Contact lifecycle = individual journey. Company lifecycle = account-level status |

---

## Anti-Pattern Check

- 15 lifecycle stages. HubSpot functions best with 8-10. More than that creates reporting confusion and automation complexity. Use lead status and deal stages for granularity within stages
- MQL threshold produces 80% rejection rate. The threshold is too low. SDRs lose trust in MQLs and stop following up. Calibrate until acceptance rate is 30-50%
- No recycling mechanism. Contacts that fail SQL go to "Disqualified" and are never re-engaged. Many are right-company-wrong-timing. Build a recycling flow that re-enters nurture and allows re-qualification
- Lifecycle stage changes are all manual. Forward transitions (Lead → MQL, Opportunity → Customer) should be automated. Manual-only lifecycle management means stages are always outdated
- No velocity tracking. "How long do contacts spend as MQLs?" is unanswerable without MQL Date and SQL Date properties. Add these custom date fields and set them via workflow on each transition
- Same lifecycle stage setup as HubSpot defaults with no customization. The defaults don't include scoring triggers, lead status, transition workflows, or recycling. They're a skeleton, not a finished system
- Lifecycle stage never audited. Run a monthly report: contacts per stage, contacts with blank lifecycle, contacts in "Other." If any number looks wrong, investigate
- No SLA on MQL follow-up. An MQL that sits for 5 days is a dead MQL. Configure a workflow that alerts the SDR manager if an MQL is untouched after 4 hours