The indicator: churn rate
Churn rate is the share of customers active at the start of the period who are no longer active at its end. In B2B it is worth pairing it with the value lost, because losing ten small customers and losing one large one do not weigh the same.
Customer churn = customers lost in the period ÷ customers active at the start
Retention = 1 − customer churn
Value churn = value of renewals lost ÷ recurring value at the start
The hard part is defining an “active customer” and a “lost customer”. The guide to customer churn rate explains the possible choices and has a calculator.
What the dashboard shows
- Churn for the month and the last twelve months, in number of customers and in value.
- Renewals due in the next ninety days, with their status in HubSpot.
- Customers at risk: those showing signs of drifting away, ordered by value, with the account owner.
- Signals from tickets: companies opening more tickets than usual, or with tickets open for too long.
- Churn by segment: industry, size, acquisition channel.
The data you need from HubSpot
| Object | Typical fields | What it is for |
|---|---|---|
| Companies | name, industry, size, owner, lifecycle stage | The list of customers and the view per owner |
| Deals | amount, stage, close date, pipeline, associated company | Renewals won and lost, recurring value |
| Tickets | open and close dates, status, priority, company | Signs of dissatisfaction |
| Contacts | role, company, last activity | Changes of contact person at the customer |
If orders live in an ERP, the same logic can be applied to orders: a B2B customer who leaves usually orders less often before stopping.
The steps in Muvia
In New source choose HubSpot, connect the account and pick the objects: companies, deals, tickets and, if needed, contacts. Muvia copies them on the schedule you choose and writes nothing to HubSpot.
A query writes the definition: which deals are renewals, when a company counts as active and when as lost. It becomes a dataset with stable fields.
If you want a risk score, your team writes it in a Python function that a flow runs every Monday: for example a renewal coming up, more tickets than usual and no recent activity.
The dashboard shows churn and customers at risk; a PDF report sends each owner the list of whom to call first.
An alarm opens when a valuable customer enters the high-risk band, and the register says who handled it.
The pitfalls of a CRM
- Renewals not recorded as deals: if some renewals happen without a deal in HubSpot, those customers look lost. Decide where the renewal is read from, and write it in the query.
- Duplicate companies: the same company with two records counts as one lost customer and one new one. Data rules help find duplicates by VAT number or domain.
- Lifecycle stages updated by hand: if nobody moves a company to “former customer”, the stage is not enough to measure churn; deal dates are more reliable.
- Measurement period: with annual contracts monthly churn swings a lot. Look at the rolling twelve-month window too.
Frequently asked questions
Contacts, companies, deals and tickets. You choose which to copy; the source only reads and changes nothing in HubSpot.
No. Your team defines the score, with simple rules or with a model, in a function that Muvia runs as often as you choose. That way the criteria stay yours and can be read.
Yes, but it needs a rule: for example a customer is lost if they have had no won deals or orders for a given number of months. The rule is written in the query and holds for every report.
Yes. The use case on customers at risk uses the account data in Salesforce and the orders in the ERP; the logic is the same.