Churn analytics dashboard

Four panels from a subscription churn and revenue tool: where new revenue actually comes from, which tenure cohorts leave, what the year ends at under three forecasting methods, and how churn compares to published benchmarks.

What this was for

I was reporting monthly cancellation counts to the company president. The billing platform couldn't produce an accurate figure on its own, because the way service is sold puts an offset between when a subscription starts and when its revenue actually begins, and the standard reports don't account for that. The real numbers were worked out by hand by an outside accounting firm, in a system nobody making day-to-day decisions could see.

So the president and the sales manager were calling plays against a figure that was close but wrong. This is the reporting I built so they could act on the actual one.

Active MRR
$447K
+8.5% vs prior year
Net new MRR
$73K
trailing 12 months
Expansion share
57%
of new revenue, up from 30%
Annual churn
8.4%
MRR-weighted

New logo vs expansion revenue

Monthly new recurring revenue, split by whether it came from a first-time customer or an existing one.

New logo Expansion Expansion share of total Hover any month for detail.

This panel is the largest on the page because it is the one that changed a decision. A headline new-revenue number hides what matters operationally. Split, it showed expansion revenue climbing from roughly a third of new revenue to more than half. That moves the argument: if most growth comes from customers you already have, the return sits in keeping and growing them. This is the chart that started an account management program.

Cancellations by tenure

Count by how long the customer had been active.

Tenure anchored on
Year 1 Year 2

Try the toggle. Same cancellations, two anchors. The wrong one distorted early churn. I found it, documented it, and kept both rather than quietly changing a number other charts already depended on.

Churn vs benchmarks

Annual MRR-weighted churn against market research.

Benchmarks need their limits stated. The production version draws on six market-research firms and three SaaS benchmark providers, and says plainly where they disagree: analyst sizing varies by up to 20% between firms, and private competitors publish nothing. A comparison without that caveat invites a conclusion the data cannot support.

Year-end projection, three methods

Actual through July, then the same year projected three ways.

Actual

Click a method to isolate it. All three run off historical data. The gap between them is the sensitivity that a single projected number would have hidden.

Outcome

The findings on revenue sources led to the creation of the account management program, with defined contact flows for the largest accounts and attempted contact below that. Combined with the proactive outreach it informed, churn fell against both the prior month and the prior year.

How the numbers were checked first

I validated the MRR derivation before building on it, reconciling every line item across two snapshots with zero derivation errors. That pass caught a live defect: the paid-through rule was keyed on the wrong date field, so subscriptions that never billed were counting as active revenue.

The rule that came out of it is in the pipeline now. Any metric definition that cannot reproduce its own published value is reported as UNVALIDATED rather than shipped.

The production tool runs the company brand system, which I wrote the internal standards for so anyone could produce consistent output. This rebuild uses an equivalent palette of my own rather than reproducing theirs.