Read account health
WeeklyEvery Monday: give each paying account three separate reads, never one blended score. Read-only on every source.
- Pull the data in parallel for every active paying account (exclude free and internal accounts): subscription and renewal date from Stripe; usage from
PostHog (core-action count and last date over 30 days, active people over this and the previous 30 days, whether the key setup step is in place); deal, owner and contacts from
HubSpot; the latest calls from Granola. If one source fails, log it, treat that signal as missing for everyone, and carry on.
- Lifecycle phase from first paid date: *activating* (first 60 days, default), *established* (after that), *leaving* (cancellation pending).
- Risk tier, first match wins. High: cancellation pending; no core action in 30 days; last core action over 21 days ago; key setup step missing past day 14; established usage down by more than half month on month. Medium: usage down 30–50%; last core action 14–21 days ago; active people halved; outputs produced but nobody reviewing them. Defaults: tune every threshold against your own churned accounts. Only read momentum above a minimum activity floor.
- Expansion tier (active accounts only): near or over plan limits, repeated top-ups, new teams or use cases appearing, a stated ask for more.
- Write all three reads to the CRM with the reason each changed. Only a change of tier triggers anything downstream.
- Alert on change: a new high risk goes to the account owner today via
Slack; a new high expansion goes to the expansion owner. Everything else waits for the weekly digest.
Output: three reads per account in the CRM, change alerts, and a weekly digest of movers.