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
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.