What this means for your store
Lifecycle stages - Subscriber, Lead, MQL, SQL, Opportunity, Customer, Evangelist - are HubSpot's shared funnel language. Unlike GA4 sessions, stages change when ops or sales acts: a lead scored, a discovery call booked, finance marks closed-won. Funnel reports show conversion and time-in-stage - what RevOps uses to judge whether LinkedIn leads or cart-recovery email actually becomes paying accounts.
Scenario on a real storefront
Your wholesale plumbing distributor recalibrates stage rules each quarter. For Q2 Google Ads cohorts, marketing pulls Lead → MQL → SQL → Customer with days between each hop:
# HubSpot → Settings → Objects → Contacts → Lifecycle stages
# Example entry rules (workflow or manual):
# MQL = lead score ≥ 50 AND "Request trade pricing" submitted
# SQL = sales accepted + discovery call on calendar
# Customer = associated deal closed-won OR first wholesale order synced
# Report: Marketing → Reports → Funnel
Stages: Lead → MQL → SQL → Customer
Date: Create date in Q2 2026
Breakdown: utm_campaign / Original source
# Export for RevOps
contact_id | lifecyclestage | create_date | days_to_mql | days_to_customer
# Pitfall: CSV imports land at Lead - run a backfill workflow or funnels lie
What to do next
- Slice the funnel by utm_campaign to compare paid search vs abandoned-cart workflows on SQL rate - not raw lead count.
- Pair stages with GA4 generate_lead to catch web forms that create contacts stuck at Lead because no MQL rule fired.
- Watch time-in-stage monthly; bloated SQL often means sales acceptance criteria slipped, not that marketing stopped delivering.
Bottom line
Define stage entry rules everyone agrees on, break funnels down by campaign, and cross-check web lead events so contacts are not stuck at Lead forever.