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.