Subscriptions
A customer's ongoing commitment to pay for a product on a recurring basis. Captured as discrete events that drive every subscription report.
A subscription is a customer's ongoing commitment to pay for a product on a recurring basis. SaaSFlow doesn't store subscriptions as a single "active" record — it stores every change to a subscription as a discrete subscription event, and reconstructs the current state by replaying those events.
Where subscription data comes from
| Source | What lands as subscription data |
|---|---|
| Stripe | Every Subscription, SubscriptionItem, and Invoice event becomes a SaaSFlow subscription event. |
| HubSpot | Commerce subscriptions and contracts. |
| Manual | You can add subscription events from the customer's detail page — useful for off-Stripe contracts (annual deals, special pricing). |
A subscription event is always attached to a customer and a plan item (the priced variant under a product).
Event types
| Type | Meaning |
|---|---|
| New | The customer started a paid subscription for the first time, or a previously-churned customer started fresh. |
| Expansion | Existing subscription grew — upgraded plan, added seats, added an add-on. Recurring revenue went up. |
| Contraction | Existing subscription shrank — downgraded plan, removed seats, removed an add-on. Recurring revenue went down but the customer is still active. |
| Churn | The customer cancelled. Recurring revenue drops to zero for them. |
| Reactivation | A previously-churned customer started a new subscription. Counts separately from "new" so you can analyse win-back. |
The Subscriptions report groups events by period and shows the net impact of each type.
Two timestamps per event
Each event carries two dates that matter for analytics:
- Effective time — the date the change took financial effect (when revenue recognition begins / ends).
- Committed time — the date the customer or counterparty committed to the change (when the contract was signed).
These are usually the same date. They differ when there's a gap between booking and go-live — for example, a customer signs an annual contract on Jan 1 that starts Feb 1. The distinction drives the MRR vs CMRR split — see MRR & subscriptions for what that means in the reports.
Editing events
Editing a single event is supported (correct an amount, change the type, attach to a different plan item) but rare in practice. Most events come from integration sync and re-running a full sync is usually the right answer when the underlying data was wrong.
You can also delete an event from the customer's event log if it was clearly created in error — for example, a duplicate after a manual entry that crossed with an integration sync.