v2.7.3

Customer success · book of business

Portfolio Pulse

Upload your account list and get an instant read on the health of your book: one score per account, rolled up into a single portfolio number, six charts on state and — if you also upload monthly revenue history — four more on movement over time, including the silent decliners who pay on time while quietly disengaging. Nothing you upload is stored.

Upload your book of business

Portfolio Snapshot (required) — one row per account. Required columns: account_id, account_name, segment, industry, csm_owner, customer_since, contract_start, renewal_date, auto_renew, plus avg_monthly_revenue_6mo and total_revenue_36mo — unless you also upload a Timeline, in which case those two are computed from it instead.

Revenue Timeline (optional) — one row per account per month: account_id, month (YYYY-MM), mrr, plus optional usage columns. Uploading it unlocks trends, NRR/GRR, the ARR bridge, and silent-decliner detection. If both files are uploaded, the Timeline's numbers win — it's the more granular source of truth.

Portfolio health

68.3%

ARR-weighted · 70.6% unweighted

Total ARR

$5,000,000

50 accounts · avg $100,000

ARR renewing next quarter

$1,306,551

6 of your 50 largest are Critical/At-risk

NRR / GRR

111.0%

GRR 98.9% · full uploaded window

Critical 8 $1,045,248
At-risk 15 $1,353,615
Healthy 27 $2,601,137

Book is 68% healthy at $5.0M ARR, running 111% NRR; $1.3M renews next quarter with 6 large accounts softening.

How health and risk are calculated

Every account starts at 100 points. Five signals — days since contact, an overdue-payment flag, ticket load (weighted up if a lot of those tickets were high-priority), seat utilisation, and active-user rate — subtract points on a continuous ramp: the deduction grows smoothly between a "clean" and a "bad" threshold, so an account at 89 days since contact scores almost the same as one at 91 days — never a cliff-edge jump. A missing signal contributes zero deduction, never a penalty; thresholds are also segment-aware (Enterprise tolerates longer gaps than SMB).

Summing those five deductions gives the Risk score — the raw, unweighted signal read, independent of timing. Health is calculated from the same deductions but adjusted by three multipliers that account for context: renewal proximity (×1.25 if renewal is within 90 days — the same problems matter more when the contract is about to turn over), tenure (×1.15 if the account is under 6 months old, ×0.9 if over 3 years — a new relationship is more fragile), and momentum (×1.15 if spend is shrinking, ×0.9 if it's growing). Risk and Health are deliberately different numbers — an account can carry real risk signals (say, a high ticket count) but still show strong Health if its renewal isn't imminent and it's a long-tenured, growing account; conversely, the same risk signals right before a renewal date will drag Health down harder than Risk alone would suggest.

The portfolio's headline number is the ARR-weighted average Health score across every account, so a struggling $500k account moves it more than a struggling $10k one. Every weight and threshold is a plain constant in scoring.py — no ML, nothing hidden.

Revenue tiers

Accounts sorted into Gold / Silver / Bronze by ARR rank — how concentrated is the book?

Revenue vs. risk

x = raw risk score (signals only, no timing context), y = current ARR.

Revenue vs. health

x = final health score (risk adjusted for renewal timing, tenure, momentum), y = current ARR. Compare against the risk chart — they diverge where context matters.

Renewal wall

ARR at risk by forward quarter, segmented by health band — the money question.

Industry breakdown

ARR by industry, coloured by that industry's average health.

Coverage & engagement

Days since contact vs. ARR — high value, long since contact is the neglect zone.

Momentum / spend trajectory

Run-rate vs. lifetime average, per account — the "big-but-shrinking" and "small-but-surging" accounts.

Performance over time

ARR bridge

Start → expansion → contraction → churn → end, over the full uploaded window.

Portfolio health & NRR trend

Trajectory, not a snapshot — up to 36 months.

Usage vs. revenue divergence

x = revenue trend, y = usage trend. The shaded quadrant — revenue flat/up, usage down — is where silent decliners hide: paying on time while quietly disengaging.

Flagged this cycle: Meridian Retail, Orbit Software, Beacon Medical Group

Revenue by group over time

Stacked MRR by segment — which parts of the book are compounding vs. stalling.