Use this when: You are charging money but your financial picture is scattered across Stripe, spreadsheets, and gut feeling. You know you should track MRR and CAC but have not set up the infrastructure to do it correctly.
You're done when: You have an automated MRR waterfall, per-channel CAC calculations, NRR tracking by cohort, a weekly operational dashboard, and a monthly board-ready view.
The Sequence
Template
Your Billing System Is Not Your Source of Truth
The biggest mistake startups make with financial metrics is treating Stripe (or Chargebee, or Recurly) as the source of truth. Billing systems are optimized for collecting payments, not for analytics. They will give you a revenue number, but that number conflates recurring and one-time charges, does not handle prorations consistently, and knows nothing about your cost structure.
Your billing system is a data source, not a reporting layer. The source of truth for financial metrics should be your data warehouse, where billing data is joined with CRM data (for CAC attribution), support data (for COGS classification), and product data (for usage-based billing reconciliation).
Stripe's MRR dashboard, for example, includes setup fees in MRR by default. It does not separate expansion from new revenue in the way you need for a proper waterfall. And it cannot calculate NRR because it does not think in cohorts. These are not bugs. Stripe is a payments platform. Asking it to be your financial analytics layer is like asking your CDI tool to be your BI layer. Different jobs.
The practical sequence: pipe billing events into your warehouse (Stripe webhooks or Fivetran/Airbyte connector), model the data in your transformation layer (dbt is the standard), and build dashboards on top of the modeled data. This gives you control over definitions, the ability to join revenue data with cost data, and historical auditability.
Revenue Classification Matters More Than You Think
The first step in the sequence is revenue classification, and it deserves emphasis because most teams skip it. If you sell a product with a $99/month subscription, a $500 onboarding fee, and occasional consulting at $200/hour, you have three revenue types. Only the first is MRR.
Why does this matter? Because MRR multiples drive SaaS valuations. A company with $100K MRR at a 10x multiple is worth $12M. A company with $80K MRR and $20K in one-time revenue at a 10x multiple is worth $9.6M plus whatever multiple one-time revenue gets (usually 1-2x). The difference is millions of dollars, and it starts with how you classify your first few invoice line items.
The practical implication: tag every revenue source in your billing system from day one. Create separate products or line items for recurring subscriptions, one-time fees, usage-based charges, and services. If everything is lumped into one line item, you will spend days untangling it later when you need clean numbers for fundraising.
CAC Attribution Is Where Teams Lie to Themselves
Calculating CAC per channel requires honest attribution. "Honest" means: if a customer came from a Google ad, found your blog post two weeks later, then signed up after an SDR called them, who gets the credit?
A practical starting point: last-touch attribution (whatever the customer did immediately before converting gets credit). It is imperfect, but it works. Multi-touch attribution is a rabbit hole that consumes months and produces marginal improvements in accuracy. The goal is not perfect attribution. The goal is knowing whether paid acquisition is broadly efficient versus organic, and whether specific channels are catastrophically over- or under-performing.
What matters more than the attribution model is making sure your CAC is fully loaded. A subtle trap: calculating "marketing CAC" (ad spend only) instead of "fully loaded CAC" (everything that contributed to acquiring the customer). A $50 Google Ads CAC sounds great until you add the $8K/month marketing manager, the $2K/month in tools, and the $3K/month in content production. Fully loaded CAC might be $400. That changes every decision.
Example
A vertical SaaS company for fitness studios had $150K MRR and was "tracking financial metrics" in a spreadsheet updated monthly by the CFO. The spreadsheet had MRR (pulled from Stripe), a rough CAC estimate, and runway. When they went through this sequence, three things changed.
First, revenue classification revealed that $18K of their "$150K MRR" was setup fees and migration charges. Real MRR was $132K. This was a 12% correction that had been inflating their growth rate for a year.
Second, building the MRR waterfall showed that expansion MRR had gone negative for three straight months. Contraction from studios downgrading during slow season was outpacing upsells. The total MRR number was still growing because new sales were strong, but the existing base was eroding. This was invisible before the waterfall.
Third, per-channel CAC showed that their outbound sales motion (BDR team cold-calling studio owners) had a fully loaded CAC of $2,100, while their inbound motion (content marketing and referrals) had a CAC of $340. Both channels produced similar quality customers (comparable NRR). They reallocated budget from outbound to inbound and reduced blended CAC by 40% in one quarter.
The entire setup took eight days. Four days to pipe Stripe and HubSpot data into BigQuery. Two days to build dbt models for the MRR waterfall and CAC calculations. Two days to build dashboards in Metabase. The $18K MRR correction alone was worth the effort, because they had been making hiring decisions based on a growth rate that was 12% higher than reality.
Written with ❤️ by a human (still)