Subscriber → Lead → MQL → SQL → Opportunity → Customer → Evangelist counts. Sharp drop-offs flag the stage that needs work.
At a glance
Contact counts at each stage of HubSpot’s lifecycle funnel: Subscriber, Lead, MQL, SQL, Opportunity, Customer, Evangelist, Other. Sharp drop-offs between adjacent stages flag the conversion gap that needs work. Pulled from/crm/v3/objects/contactsgrouped bylifecyclestage.
| What it counts | COUNT(distinct contact) GROUP BY lifecyclestage across all contacts in the portal. The stages are the standard HubSpot 8 (subscriber, lead, marketingqualifiedlead, salesqualifiedlead, opportunity, customer, evangelist, other) plus any custom stages defined on the portal. |
| HubSpot Hub scope | All Hubs. The lifecyclestage property exists on every contact regardless of which Hub the portal subscribes to. |
| Stage definition source | HubSpot’s standard taxonomy with custom-stage support via /crm/v3/properties/contacts/lifecyclestage. Two portals with custom stages will show different funnel shapes. |
| Stage move backwards | Counted at current stage. HubSpot allows lifecyclestage to move forward or backward; the card reflects the current value, not the highest-ever. |
| Stage history | Not surfaced on this card. The first/last touchpoint per stage is exposed via the property history endpoint; this card uses point-in-time only. |
| Unset / null lifecyclestage | Counted in the “Other / unset” bucket. A 5%+ unset bucket indicates contact-creation flows that do not seed a default stage. |
| Customer-stage backfill | Customers can be marked via Stripe / Shopify integration triggers, manually, or by workflow. The card does not distinguish; it shows whoever is currently flagged customer. |
| Email-subscription state | Not factored in. An unsubscribed contact at lifecyclestage = customer still counts in the customer bucket. |
| Currency | n/a (count). |
| Time window | RT, real-time read. Distribution is a stock figure. |
| Alert trigger | None on the card itself. Stage-to-stage conversion alerts (Lead-to-MQL <15%, MQL-to-SQL <25%, SQL-to-Customer <20%) live on dedicated cards. |
| Roles | owner, marketing, sales |
Calculation
Calculated automatically from your HubSpot data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
The same B2B SaaS portal with 84,200 total contacts. Reading the lifecycle funnel on 14 Apr 26:| Stage | Count | Share | Conversion to next stage |
|---|---|---|---|
| Subscriber | 38,600 | 45.8% | 58% (Subscriber to Lead trailing 90D) |
| Lead | 22,400 | 26.6% | 39.7% (Lead to MQL) |
| MQL | 8,900 | 10.6% | 34.8% (MQL to SQL) |
| SQL | 3,100 | 3.7% | 29.7% (SQL to Opportunity) |
| Opportunity | 920 | 1.1% | (deal-stage view takes over here) |
| Customer | 4,800 | 5.7% | n/a |
| Evangelist | 320 | 0.4% | n/a |
| Other / unset | 5,160 | 6.1% | n/a |
- Subscriber bucket at 45.8% is the dormant-list reservoir. 38,600 contacts opted in but never converted to lead. For a B2B portal this usually means a popular gated content magnet (whitepaper, webinar) brought volume that nurture sequences never warmed. The fix is workflow enrolment, not more top-of-funnel.
- Lead-to-MQL at 39.7% is healthy. B2B benchmark is 20-30%; this team is above benchmark, suggesting lead scoring is calibrated correctly. Audit HS01 fires below 15%.
- MQL-to-SQL at 34.8% is also above benchmark. B2B benchmark is 25-35%; this team is at the top end. Sales is accepting MQLs as worth working, no junk-rejection problem.
- SQL-to-Opportunity at 29.7% is the bottleneck. B2B benchmark is 30-40%; this team is at the bottom of the band. Most likely cause: BANT or MEDDPICC qualification too strict, deals being created late in the sales cycle. Pair with
Average Deal Cycleto confirm. - The Other / unset bucket at 6.1% (5,160 contacts) is the cleanup target. These contacts will not appear in any funnel calculation, so the rates above are computed on the 79,040 contacts with a stage. Audit HS01 surfaces unset count and recommends a default-stage workflow.
Sibling cards merchants should reference together
The funnel shape is the headline; conversion rates between stages are the sub-headlines:| Card | Why pair it with Lifecycle Distribution |
|---|---|
| Total Contacts | The denominator. Funnel shares sum to 100% of this number minus the unset bucket. |
| Lead to MQL Conversion % | The first major rate. Below 15% indicates lead-scoring drift or stalled nurture. |
| MQL to SQL Conversion % | The marketing-to-sales handoff health. Below 25% means SDRs are rejecting MQLs as junk. |
| SQL to Customer Conversion % | The sales close-rate. Below 20% means pricing, fit, or competitor problems. |
| MQLs (count) | The MQL flow figure (period count) versus the MQL stock here. Stock without flow signals MQL-creation has stalled. |
| Predictive Score Distribution | The complementary view: HubSpot’s 0-100 propensity bucket. Compare lifecycle distribution against score distribution to spot lifecycle-misalignment. |
| Lifecycle Stage to First Purchase Conversion | The cross-channel reality check, lifecycle-customer should approximate commerce-customer. |
| Klaviyo Active Subscribers (when commerce-attached) | If the merchant runs Klaviyo for DTC, Subscriber-stage HubSpot count should approximate Klaviyo subscriber count. Big gaps indicate one of the two ESPs has stale opt-in state. |
Reconciling against the vendor’s own dashboard
Where to look in HubSpot: Two native views give the closest comparison:
HubSpot → Reports → Analytics tools → Contacts analytics (Lifecycle Stage breakdown)
HubSpot → Contacts → Contacts (filter on Lifecycle stage, count per filter)
The Contacts analytics tile breakdown should match this card stage-for-stage to within a few records.
Why our number may legitimately differ from HubSpot’s:
| Reason | Direction | Why |
|---|---|---|
| Sync lag | Ours lower for the most recent 5-15 minutes | Lifecycle moves happen in real time in HubSpot’s UI; Vortex IQ trails by one sync cycle. |
| Backfill workflows | Either | If a workflow re-stages contacts in bulk, both HubSpot and Vortex IQ should converge within 15 minutes. During the backfill window, intermediate states differ. |
| Custom stages | Either | Portals with custom stages (e.g. “Trial Signup”, “Demo Booked”) show those custom stages in this card. HubSpot’s standard analytics tile may bucket them as “Other”. |
| Portal timezone vs UTC | None on a stock figure | Lifecycle distribution is a snapshot, no window-boundary effect. |
| Hard-deleted contacts | Both same | Both sides exclude. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
| Lifecycle Stage to First Purchase Conversion | The customer-stage HubSpot count should approximate Shopify / Stripe distinct-customer count for connected stores | Customers acquired via self-serve checkout never become HubSpot contacts unless a marketing pixel fired; stale customer-stage records (cancelled subscriptions still flagged customer). |
| Top Customers Without HubSpot Contact | Inverse: commerce-platform customers missing from HubSpot contacts | Self-serve onboarding without marketing-tag fire; B2C stores often see 70-90% of customers never reach HubSpot. |
| Klaviyo Active Subscribers | Subscriber-stage HubSpot count should approximate Klaviyo opted-in subscriber count | One ESP holds stale opt-ins; both should sync via two-way integration. |
Known limitations / merchant FAQs
Why is my customer count different from my Stripe / Shopify customer count? HubSpot lifecycle-customer is a contact attribute, not an actual purchase. A contact may be marked “customer” by a workflow, by a sales rep, or by a stale Stripe integration that did not unflag cancelled subscribers. Stripe / Shopify customers are anyone with a payment record. Use the cross-channelTop Customers Without HubSpot Contact card to surface the actual gap.
Lifecycle-stage backfill, what is it and how does it affect this card?
HubSpot allows running a workflow that re-stages contacts in bulk based on property values. During a backfill the distribution shifts in real time. Vortex IQ catches up within one sync cycle (15 minutes). For long-running backfills the card reflects intermediate state until the workflow completes.
Why is the unset / Other bucket so big?
Most-common cause: contacts created via API or import without a default-stage assignment. The fix is a “set lifecyclestage to subscriber when created” workflow. Audit HS01 surfaces unset count and recommends this.
Why does HubSpot allow lifecycle to move backward?
By default it does not. There is a portal setting (Settings → Properties → lifecyclestage → “Disable lifecycle stage downgrade”) that prevents backward moves. This card reflects whatever HubSpot currently shows; if backward moves are enabled and a customer churned back to subscriber, that contact appears in the subscriber bucket.
Sequence enrolment vs send timing, does it affect lifecycle?
Sequence enrolment is a Sales Hub Sequences feature, separate from lifecycle. Lifecycle changes via workflow are independent. A sequence enrolment does not move lifecycle; only an explicit workflow rule or rep manual edit does.
List-segment lag, does it move my distribution?
Active list-membership refreshes every 15 minutes; lifecycle changes triggered by list-membership therefore lag by up to 15 minutes. The distribution converges within one cycle.
Multi-portal aggregation, can I see lifecycle across portals?
No. One card per portal because lifecycle taxonomies (especially custom stages) are portal-specific. Aggregating two portals with different custom stages would mix incomparable buckets.
Today-volatility, why does the funnel shape shift hourly?
Three sources: (a) form submissions move contacts subscriber-to-lead, (b) workflows that fire on engagement-based triggers move contacts to MQL, (c) sales reps manually progress contacts. Hourly shifts of <0.5% are normal; >2% in an hour means a bulk workflow or import is running.
Why is my deal pipeline number different from my dashboard?
This is the lifecycle (contact-side) card, not the deal-pipeline (deal-side) card. Lifecycle and deal pipelines are independent objects. Opportunity-stage lifecycle contacts may not all have deals; conversely, deals may exist for contacts at SQL-stage. The cross-reference is in Lifecycle Stage to First Purchase Conversion.