What is Lifecycle Stage Management?
Effective lifecycle stage management is crucial for maintaining a healthy sales pipeline and ensuring proper lead handoff between marketing and sales teams.
HubSpot’s lifecycle stages provide a framework for tracking a contact’s journey from first interaction to loyal customer, but without automation, managing these transitions can become inconsistent and time-consuming.
Why Lifecycle Stage Management Matters
Lifecycle stage management serves as the backbone of your marketing and sales alignment. When implemented correctly, it:
- Creates clear definitions for each stage in the buyer’s journey
- Establishes objective criteria for moving contacts between stages
- Eliminates subjective decision-making about lead quality
- Provides accurate funnel metrics for reporting and forecasting
- Ensures leads receive appropriate nurturing based on their stage
- Prevents premature sales outreach to unqualified leads
- Reduces friction between marketing and sales teams
Setting Up Your Lifecycle Stage Management Workflow
Let’s build a comprehensive workflow that automatically updates lifecycle stages based on contact behavior and engagement.
Step 1: Define Your Lifecycle Stage Criteria
Before building the workflow, establish clear criteria for each lifecycle stage:
- Subscriber: Opted in to receive communications
- Lead: Shown initial interest (e.g., downloaded content)
- Marketing Qualified Lead (MQL): Met specific engagement thresholds
- Sales Qualified Lead (SQL): Verified by sales as having genuine interest and fit
- Opportunity: Actively in sales process
- Customer: Completed purchase
- Evangelist: Advocate for your brand (e.g., referral program participant)
Step 2: Create the Base Workflow
- Navigate to Automation > Workflows in your HubSpot account
- Click “Create workflow” > “From scratch”
- Select “Contact-based” workflow
- Name it “Lifecycle Stage Progression”
Step 3: Set Up Lead Stage Enrollment
First, let’s handle the transition from Subscriber to Lead:
- Set enrollment trigger: “Form submission” OR “Property change” (if Subscriber was set manually)
- Add an “If/then branch” to check current lifecycle stage
- If lifecycle stage equals “Subscriber” or is empty, continue
- Add “Set property value” action to update lifecycle stage to “Lead”
Step 4: MQL Qualification Logic
Next, add logic to identify Marketing Qualified Leads:
- Add another “If/then branch” after the Lead stage update
- Create a branch that checks for MQL criteria, such as:
- Lead score is greater than or equal to your MQL threshold (e.g., 50)
- Has visited high-value pages (pricing, product) at least 3 times
- Has opened or clicked on at least 5 marketing emails
- Has viewed at least 2 bottom-of-funnel content pieces
- If criteria are met, add “Set property value” action to update lifecycle stage to “MQL”
- Add a “Create task” action to notify the appropriate sales rep
- Optionally, add an internal notification email to the sales team
Step 5: SQL and Beyond
For later stages, create a parallel workflow that listens for sales activity:
- Create a new workflow named “Sales Lifecycle Progression”
- Set enrollment trigger: “Deal created” OR “Deal stage updated”
- Add an “If/then branch” to check if associated contact’s lifecycle stage is “MQL”
- If true, add “Set property value” action to update lifecycle stage to “SQL”
- Add similar branches for Opportunity and Customer stages based on deal stages
Step 6: Re-engagement and Recycling
Create logic for handling stalled leads:
- Add a parallel branch in your main workflow for leads that don’t progress
- Set conditions like “Last engagement date > 30 days” AND “Lifecycle stage = MQL”
- Add actions to:
- Enroll in a re-engagement campaign
- Create a task for sales to follow up one final time
- If no response after re-engagement, update lead status to “Recycled”
Advanced Implementation: Custom Code for Predictive Lifecycle Stage Management
To take your lifecycle management to the next level, implement this custom code that uses historical data to predict when a lead is ready to move to the next stage:
// Custom code for predictive lifecycle stage management
exports.main = (functionContext, sendResponse) => {
// Get contact properties from the workflow
const {
contact_id,
current_lifecycle_stage,
lead_score,
first_conversion_date,
page_views,
email_clicks,
form_submissions,
company_size,
industry
} = functionContext.parameters;
// Initialize HubSpot client
const hubspot = require('@hubspot/api-client');
const hubspotClient = new hubspot.Client({
accessToken: process.env.PRIVATE_APP_ACCESS_TOKEN
});
async function predictNextStage() {
try {
// Calculate days since first conversion
const daysSinceConversion = calculateDaysSinceConversion(first_conversion_date);
// Get historical data for similar contacts
const similarContactsData = await getSimilarContactsData(company_size, industry);
// Build prediction model input
const modelInput = {
current_stage: current_lifecycle_stage,
lead_score: parseInt(lead_score),
days_in_pipeline: daysSinceConversion,
page_view_count: parseInt(page_views),
email_click_count: parseInt(email_clicks),
form_submission_count: parseInt(form_submissions),
similar_contacts_avg_days_to_next_stage: similarContactsData.avgDaysToNextStage,
similar_contacts_conversion_rate: similarContactsData.conversionRate
};
// Make prediction
const prediction = predictStageProgression(modelInput);
// Return prediction results
sendResponse({
statusCode: 200,
body: {
recommended_next_stage: prediction.nextStage,
probability: prediction.probability,
estimated_days_to_conversion: prediction.daysToConversion,
confidence_score: prediction.confidenceScore,
key_factors: prediction.keyFactors
}
});
} catch (error) {
// Handle errors
sendResponse({
statusCode: 500,
body: {
error: error.message
}
});
}
}
// Helper function to calculate days since first conversion
function calculateDaysSinceConversion(conversionDate) {
const firstConversion = new Date(conversionDate);
const today = new Date();
const diffTime = Math.abs(today - firstConversion);
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}
// Helper function to get data on similar contacts
async function getSimilarContactsData(companySize, industry) {
// In a real implementation, this would query HubSpot for contacts with
// similar attributes who have successfully progressed through stages
// For this example, we'll return mock data
return {
avgDaysToNextStage: 14,
conversionRate: 0.35
};
}
// Helper function to predict stage progression
function predictStageProgression(modelInput) {
// This is where you would implement your prediction logic
// Could use a simple rule-based approach or integrate with an external ML service
// Simplified example using rule-based logic:
let nextStage;
let probability;
let daysToConversion;
let confidenceScore;
let keyFactors = [];
switch(modelInput.current_stage) {
case 'SUBSCRIBER':
nextStage = 'LEAD';
probability = 0.9;
daysToConversion = 1;
confidenceScore = 'HIGH';
keyFactors = ['Email subscription active'];
break;
case 'LEAD':
if (modelInput.lead_score > 30 && modelInput.page_view_count > 5) {
nextStage = 'MARKETING QUALIFIED LEAD';
probability = 0.75;
daysToConversion = Math.max(0, 10 - modelInput.days_in_pipeline);
confidenceScore = 'MEDIUM';
keyFactors = ['Lead score above threshold', 'High page view count'];
} else {
nextStage = 'LEAD';
probability = 0.3;
daysToConversion = 15;
confidenceScore = 'LOW';
keyFactors = ['Insufficient engagement'];
}
break;
case 'MARKETING QUALIFIED LEAD':
if (modelInput.lead_score > 70 && modelInput.form_submission_count > 2) {
nextStage = 'SALES QUALIFIED LEAD';
probability = 0.6;
daysToConversion = Math.max(0, modelInput.similar_contacts_avg_days_to_next_stage - modelInput.days_in_pipeline);
confidenceScore = 'MEDIUM';
keyFactors = ['High lead score', 'Multiple form submissions'];
} else {
nextStage = 'MARKETING QUALIFIED LEAD';
probability = 0.4;
daysToConversion = 20;
confidenceScore = 'LOW';
keyFactors = ['Needs more nurturing'];
}
break;
// Additional cases for other lifecycle stages
default:
nextStage = modelInput.current_stage;
probability = 0.1;
daysToConversion = 30;
confidenceScore = 'VERY LOW';
keyFactors = ['Insufficient data'];
}
return {
nextStage,
probability,
daysToConversion,
confidenceScore,
keyFactors
};
}
// Execute the main function
predictNextStage();
};
This serverless function analyzes a contact’s behavior patterns and compares them to historical data from similar contacts who successfully progressed through your funnel.
The output provides predictive insights about when a contact is likely to be ready for the next lifecycle stage, allowing for more proactive sales engagement and better resource allocation.
Integrating with Company Records
For B2B organizations, it’s crucial to align contact and company lifecycle stages. Add these elements to your workflow:
- After updating a contact’s lifecycle stage, add a “Company information” action
- Set up logic to update the associated company’s lifecycle stage based on its contacts:
- If any contact reaches a new highest stage (e.g., SQL), update the company to match
- Alternatively, use custom properties to track the number of contacts at each stage
Measuring Success
To evaluate the effectiveness of your lifecycle stage management workflow, monitor these key metrics:
- Stage conversion rates: Percentage of contacts that progress from one stage to the next
- Time in stage: Average time contacts spend in each lifecycle stage
- Stage distribution: Proportion of your database at each lifecycle stage
- Sales and marketing alignment: Reduction in rejected leads between teams
- Revenue attribution: Ability to track revenue back to specific lifecycle transitions
Real-World Impact
A well-implemented lifecycle stage management workflow delivers significant business benefits. One of our clients in the SaaS industry achieved:
- 68% reduction in sales-rejected leads
- 41% decrease in average time from MQL to SQL
- 23% increase in lead-to-customer conversion rate
- More accurate sales forecasting with 92% prediction accuracy
The key to their success was establishing clear, objective criteria for stage progression and using automation to enforce these standards consistently.
Best Practices for Lifecycle Stage Management
- Start with clear definitions: Ensure everyone in marketing and sales agrees on the criteria for each stage.
- Use multiple factors: Don’t rely solely on lead score; incorporate engagement metrics and explicit buying signals.
- Implement bi-directional movement: Allow contacts to move backward in the funnel if engagement drops.
- Audit regularly: Review and refine your criteria quarterly based on conversion data
- Sync with sales stages: Align contact lifecycle stages with your deal stages for consistency.
- Document everything: Create comprehensive documentation of your lifecycle stage definitions and criteria
By implementing this lifecycle stage management workflow, you’ll create a systematic approach to lead progression that improves marketing-sales alignment, increases conversion rates, and provides more accurate funnel metrics for your business.