HubSpot has the concept of Contact & Company Lifecycle Stages, which helps categorize records by where they are in your marketing and sales process.
Driven by HubSpot Segments & Workflows, you can use ClearSync’s Stripe data to automatically update your Contact and Company Lifecycle Stages in real-time.
Step 1: Plan your HubSpot Lifecycle Stage Strategy & Stripe Subscription Status Mapping
The default Lifecycle Stage values are:
- Subscriber, Lead, MQL, SQL, Opportunity, Customer, Evangelist
We recommend adding a custom Lifecycle Stage for “Former Customer” to clearly identify past paid Contacts and Companies.
- You can add an entry in Settings > Objects, Contacts > Lifecycle Stage > Add Stage
Plan out how you might map your Stripe Subscription Statuses to HubSpot Lifecycle Stages, for example:
Stripe Subscription Status | HubSpot Lifecycle Stage |
Active (and $0 MRR) | Subscriber |
Trialing (with optional filtering) | Opportunity |
Active (and > $0 MRR) | Customer |
Canceled (and Number of Paid MRR Events >0) | Former Customer |
Step 2: Create Contact Segments to drive Lifecycle Stages
We’ll reference these Contacts segments in our Workflows to update the Lifecycle Stage.
Example Segments:
Step 3: Create the Contact Workflow — "Set Contact Lifecycle Stage via ClearSync/Stripe"
This is a real-time, Contact-based Workflow. It sets the Lifecycle Stage on the Contact itself and does not touch the Company (the Company has its own Workflow in Step 5).
- Entry Criteria: Contact is a member of any of the Segments from Step 2.
- Do Allow re-enrollment ✅, so a Contact re-evaluates whenever its subscription status changes.
- Then add a Branch based on [AND/OR] filter criteria, checked in order:
- (1) Current Paying Customer → member of [ClearSync] Currently Active Customer Contacts
- (2) Former Paid Customer → member of [ClearSync] Former Paid Contacts (placed before the free branch so a former payer isn't captured as a free user)
- (3) Active Free Subscriber → member of [ClearSync] Currently Active Free Subscribers
- (4) (Optional) Trialing → member of [ClearSync] Trialing Contacts
- (5) Leave the "None met" default as the fallback
- After each branch, add an Edit Record action to set Lifecycle Stage on the Contact to the mapped value from Step 1 (e.g. Customer, Former Customer, Subscriber, Opportunity).
HubSpot treats Lifecycle Stage as a "watermark", a Workflow won't move a Contact backward (e.g. Customer → Former Customer) unless you first clear the value. There are two ways to handle this, and we recommend the first:
- Preferred - order your stages so churn is a forward move. Add your custom Former Customer stage after Customer in Settings > Objects > Contacts > Lifecycle Stage.
- Then Customer → Former Customer is a forward transition and needs no clearing at all.
- Only reactivations (Former Customer → Customer) remain "backward."
- When you genuinely need to move backward, clear then set, but only on that branch.
- Add a branch that checks for the backward situation first specifically (e.g. if Lifecycle Stage is Former Customer but Current MRR > 0).
- Add an Edit Record action to Clear Lifecycle Stage, immediately followed by a second Edit Record action to Set the new stage.
- ⚠️ Don't clear on every branch. Clearing wipes the stage's date-entered / time-in-stage history (which breaks funnel and velocity reporting) and briefly blanks the field, which can re-fire any automation listening for "Lifecycle Stage is known" or "changed to Customer" (onboarding sequences, notifications, etc.).
"None met" branch consideration: you may want an Edit Record action under "None met" to Clear Lifecycle Stage, for Contacts that no longer match any subscription state.
📌 Because this Workflow runs on the Contact, it works whether or not the Contact has an associated Company. Don't add a "set the associated Company's stage" action here. A Company can be associated with multiple Contacts and multiple subscriptions, so we set the Company from its own aggregated data instead (Steps 4–5).
Step 4: Create Company-level Rollup Helper Fields
A HubSpot Company can be associated with multiple ClearSync Stripe Subscriptions — for example one Canceled and one Active. To classify the Company correctly (that example should be a Customer, not a Former Customer), the Company needs its own aggregated view of the subscription data rather than inheriting a single Contact's status.
With ClearSync, create these Company-level rollup fields that aggregate across all subscriptions associated with the Company:
Company Rollup Field | What it aggregates |
Current MRR (Company) | Sum of Current MRR across all associated ClearSync Stripe Subscriptions |
Number of Paid MRR Events (Company) | Total Paid MRR Events across all associated ClearSync Stripe Subscriptions |
These two fields are enough to reproduce the Step 1 mapping at the Company level:
Company State | Lifecycle Stage |
Current MRR (Company) > 0 | Customer |
Current MRR (Company) = 0 AND Paid MRR Events (Company) > 0 | Former Customer |
Step 5: Create the Company Workflow — "Set Company Lifecycle Stage via ClearSync/Stripe"
This is a Company-based Workflow driven directly by the Company rollups from Step 4, not by the Contact. That keeps the two objects decoupled: Contacts update in real time (Step 3), and Companies update based on their own aggregated data. That’s important since a Contact can be a member of a canceled subscription, but there might be another Contact in the company who is part of an active paid subscription.
- Enrollment / Re-enrollment triggers: enroll and re-enroll when the Company rollups update
- [ClearSync] Current MRR (Company) is known / has been updated
- [ClearSync] Number of Paid MRR Events (Company) is known / has been updated
- Do Allow re-enrollment ✅
- Then add a Branch on Company properties, checked in order:
- (1) Customer → Current MRR (Company) > 0
- (2) Former Customer → Current MRR (Company) = 0 AND Number of Paid MRR Events (Company) > 0
- (3) Leave "None met" as the fallback
- After each branch, add an Edit Record action to set Lifecycle Stage on the Company to the mapped value. Apply the same backward-movement guidance as Step 3 (prefer forward-ordered stages; clear-then-set only on genuinely-backward branches).
🔧 A note on triggers: trigger on the rollup being known / updated, then put the actual thresholds (> 0, = 0) inside the branches. Two reasons: re-enrollment fires on any change to the trigger property regardless of value, and HubSpot restricts number enrollment triggers to whole numbers, so a decimal like Current MRR belongs in a branch, not the trigger.
- (If you want the optional Trialing → Opportunity branch to re-trigger on trial changes, add a rollup like [ClearSync] Trialing Subscriptions (Company) and include it as a trigger too, since trial status may not move the MRR rollups.)
✅ This replaces the "trigger a Company field from the Contact" pattern. You may have seen setups where the Contact Workflow flips a "Trigger Company Update" checkbox to make the Company re-evaluate. That workaround only exists because a Company can't re-enroll on Contact or association changes. Since ClearSync writes the rollups directly to the Company, the Company has its own trigger — no cross-object flag to set, reset, or keep in sync.