Skip to main content

SaaS Metrics

The SaaS metrics system provides an internal founder dashboard for tracking business health. This is not customer-facing — it is used by the founding team to monitor growth, retention, and financial sustainability.

Metrics Tracked

MRR/ARR with Waterfall

Monthly Recurring Revenue broken down by movement:

ComponentDefinition
New MRRRevenue from tenants who subscribed this month
Expansion MRRRevenue increase from existing tenants (plan upgrades, overage growth)
Contraction MRRRevenue decrease from existing tenants (plan downgrades)
Churn MRRRevenue lost from tenants who cancelled
Reactivation MRRRevenue from previously churned tenants who resubscribed

ARR is calculated as MRR * 12.

Retention

MetricFormula
Net Revenue Retention (NRR)(Starting MRR + Expansion - Contraction - Churn) / Starting MRR
Gross Revenue Retention (GRR)(Starting MRR - Contraction - Churn) / Starting MRR
Logo ChurnTenants lost / Total tenants at start of period
Revenue ChurnChurn MRR / Starting MRR

Unit Economics

MetricFormula
ARPUTotal MRR / Active tenants
LTVARPU / Revenue churn rate
CACTotal acquisition cost / New tenants acquired
LTV:CACLTV / CAC (target: >3x)
Gross Margin(Revenue - COGS) / Revenue

COGS includes: Cloudflare Workers/KV/Queues, ClickHouse, Azure hosting, Stripe fees.

Financial Health

MetricDefinition
Burn RateMonthly net cash outflow
RunwayCash position / Burn rate (in months)
Cash PositionCurrent bank balance

Architecture

Stripe Webhooks
→ StripeWebhookController (.NET Management API)
→ SQL (invoice, subscription_event, mrr_snapshot tables)
→ Azure Function (monthly snapshot, timer-triggered)
→ Admin API endpoints
→ Dashboard UI (Portal, admin-only routes)

Data Flow

  1. Stripe Webhooksinvoice.paid, invoice.payment_failed, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted events are received by the .NET Management API.
  2. StripeWebhookController — Processes webhook events, updates invoice records and subscription state in SQL.
  3. Monthly Snapshot Function — Azure Function runs on the 1st of each month. Computes MRR waterfall, retention metrics, and unit economics. Writes a point-in-time snapshot to the mrr_snapshots table.
  4. Admin API — Exposes endpoints for the dashboard to query current and historical metrics.
  5. Dashboard UI — Portal pages (admin-only) render charts and tables for MRR waterfall, retention trends, and financial health gauges.

SQL Tables

TablePurpose
invoicesAll Stripe invoices with status, amounts, line items
subscription_eventsChronological log of subscription changes (created, upgraded, downgraded, cancelled, reactivated)
mrr_snapshotsMonthly point-in-time snapshots of all computed metrics