Most cohort tutorials count a user as retained if they logged in or fired an event. That definition drifts: a tracking bug, a consent banner, or a mobile SDK update silently changes retention without a single customer leaving. Billing data has a different property. An invoice exists because someone paid, and the ledger is reconciled monthly by people who care whether the number is right. The Holistics walkthrough builds cohorts from user activities and signup timestamps, which is a fine starting point for product engagement, but it is not something a CFO or an investor can audit the Holistics cohort guide.
Revenue retention is also the metric that feeds unit economics. Lifetime value is commonly written as ARPU times gross margin divided by churn, and that churn input should come from observed cohort behavior rather than a blended company average the LTV-CAC guide. The RaiseMoney guide makes the same point explicitly: review unit economics by cohort and channel before trusting a blended average, because mixing old and new customers hides which one is failing the RaiseMoney unit economics guide. A cohort table from billing data is the artifact that makes that instruction executable.
There is a second reason to build it in SQL rather than in a subscription analytics tool. The query is versioned in your repository, reviewed like any other code, and re-run identically by anyone with database access. When a board deck says the January cohort retained 84% of its revenue at month six, someone can open the .sql file and reproduce the number.



