general hubspot-lifecycle-stages

hubspot-lifecycle-stages

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.
Download .md

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
Want agents that use skill files like this?
We customize skill files for your brand voice and methodology, then run content agents against them.
Book a call