Startup Growth Metrics: North Star Metric, Growth Accounting, and Cohort Analysis
Master startup growth metrics in 2026 — North Star Metric framework, growth accounting (new + expansion - contraction - churned MRR), cohort retention analysis,
Startup Growth Metrics: North Star Metric, Growth Accounting, and Cohort Analysis
Vanity metrics look good in investor decks but don't tell you whether the business is healthy. Total signups, page views, and gross revenue are symptoms, not drivers. The metrics that matter are the ones that predict where your business will be in 12 months.
North Star Metric
The North Star Metric (NSM) is the single number that best captures the value your product delivers to customers. It's not a financial metric — it measures user success, which leads to financial outcomes.
Good North Star Metrics:
- Airbnb: Nights booked
- Slack: Messages sent per DAU
- Spotify: Time spent listening
- Stripe: Payment volume processed
- HubSpot: Contacts managed
What makes a good NSM:
- Measures customer value, not company revenue
- Every team can influence it
- It predicts long-term revenue
- It's a leading indicator, not lagging
Finding your NSM:
## NSM Discovery Framework
Step 1: What action do customers take when they get value from your product?
(Not "they signed up" — what do they DO that creates value for them?)
Example: "They set up their first automated workflow"
Step 2: What metric captures that action at scale?
Example: "Active workflows running"
Step 3: Does this metric predict retention?
Test: Do users with > X active workflows have significantly higher 90-day retention?
If yes → you have a leading indicator
Step 4: Can every team affect it?
- Product: make workflow setup easier
- Marketing: acquire users who need automation
- Customer Success: help users create more workflows
If yes → it's a good organizational rallying point
Final check: Is there a simple number you'd put on a big dashboard
in the engineering room that tells you if this week was good or bad?
🚀 SaaS MVP in 8 Weeks — Seriously
We have launched 50+ SaaS platforms. Multi-tenant architecture, Stripe billing, auth, role-based access, and cloud deployment — all handled by one senior team.
- Week 1–2: Architecture design + wireframes
- Week 3–6: Core features built + tested
- Week 7–8: Launch-ready on AWS/Vercel with CI/CD
- Post-launch: Maintenance plans from month 3
Growth Accounting
Growth accounting decomposes MRR change into its components — showing you not just whether you grew, but why:
MRR Movement = New MRR + Expansion MRR - Contraction MRR - Churned MRR + Reactivation MRR
-- MRR movement query (PostgreSQL)
-- Requires: subscriptions table with monthly MRR snapshots
WITH monthly_mrr AS (
SELECT
tenant_id,
DATE_TRUNC('month', period_start) AS month,
SUM(mrr_cents) AS mrr_cents
FROM subscription_periods
GROUP BY 1, 2
),
mrr_movement AS (
SELECT
curr.month,
curr.tenant_id,
curr.mrr_cents AS current_mrr,
COALESCE(prev.mrr_cents, 0) AS previous_mrr,
CASE
WHEN prev.mrr_cents IS NULL THEN 'new'
WHEN curr.mrr_cents > prev.mrr_cents THEN 'expansion'
WHEN curr.mrr_cents < prev.mrr_cents AND curr.mrr_cents > 0 THEN 'contraction'
WHEN curr.mrr_cents = 0 OR curr.mrr_cents IS NULL THEN 'churned'
ELSE 'flat'
END AS movement_type,
curr.mrr_cents - COALESCE(prev.mrr_cents, 0) AS delta_cents
FROM monthly_mrr curr
LEFT JOIN monthly_mrr prev
ON curr.tenant_id = prev.tenant_id
AND prev.month = curr.month - INTERVAL '1 month'
)
SELECT
month,
SUM(CASE WHEN movement_type = 'new' THEN delta_cents ELSE 0 END) AS new_mrr,
SUM(CASE WHEN movement_type = 'expansion' THEN delta_cents ELSE 0 END) AS expansion_mrr,
SUM(CASE WHEN movement_type = 'contraction' THEN delta_cents ELSE 0 END) AS contraction_mrr,
SUM(CASE WHEN movement_type = 'churned' THEN -previous_mrr ELSE 0 END) AS churned_mrr,
SUM(delta_cents) AS net_new_mrr
FROM mrr_movement
GROUP BY month
ORDER BY month;
Reading growth accounting:
Month: May 2026
New MRR: +$12,400 (acquired 45 new customers)
Expansion MRR: +$3,200 (22 upgrades)
Contraction MRR: -$800 (5 downgrades)
Churned MRR: -$4,100 (12 cancellations)
Net New MRR: +$10,700
Growth rate: (+$10,700 / $156,000 beginning MRR) = 6.9% MoM ← healthy
Quick ratio: ($12,400 + $3,200) / ($800 + $4,100) = 3.2 ← good (>4 is excellent)
The Quick Ratio: (New + Expansion) / (Contraction + Churn). > 4 is excellent growth efficiency. < 1 means you're losing more than you're gaining.
Cohort Retention Analysis
Cohort analysis groups users by signup month and tracks what percentage remain active over time:
# scripts/cohort_analysis.py
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
engine = create_engine(os.environ['DATABASE_URL'])
# Load subscription data
df = pd.read_sql("""
SELECT
tenant_id,
DATE_TRUNC('month', first_paid_at) AS cohort_month,
DATE_TRUNC('month', period_start) AS activity_month,
mrr_cents
FROM subscription_periods
WHERE first_paid_at IS NOT NULL
ORDER BY 1, 2
""", engine)
# Build cohort table
cohort_pivot = df.pivot_table(
index='cohort_month',
columns='activity_month',
values='tenant_id',
aggfunc='nunique',
fill_value=0,
)
# Convert to retention %
cohort_size = cohort_pivot.iloc[:, 0] # Month 0 = cohort size
retention = cohort_pivot.div(cohort_size, axis=0).mul(100).round(1)
print("Cohort Retention (% of original cohort active)")
print(retention.to_string())
What healthy cohort retention looks like:
Cohort M0 M1 M2 M3 M6 M12
Jan 2026 100% 82% 74% 70% 65% 58% ← Consumer SaaS (flattens = healthy)
Feb 2026 100% 85% 79% 76% - -
Mar 2026 100% 88% 83% - - -
If cohorts flatten → you have a retained core (LTV positive)
If cohorts continue declining → you have a leaky bucket (fix retention before growth)
MRR retention (Dollar Retention) vs user retention:
-- Net Dollar Retention by cohort
-- > 100% = expansion revenue exceeds churn (NRR > 100%)
SELECT
cohort_month,
month_number,
SUM(mrr_cents) AS cohort_mrr,
FIRST_VALUE(SUM(mrr_cents)) OVER (
PARTITION BY cohort_month ORDER BY month_number
) AS initial_mrr,
ROUND(
100.0 * SUM(mrr_cents) / FIRST_VALUE(SUM(mrr_cents)) OVER (
PARTITION BY cohort_month ORDER BY month_number
), 1
) AS dollar_retention_pct
FROM cohort_mrr_data
GROUP BY cohort_month, month_number
ORDER BY cohort_month, month_number;
💡 The Difference Between a SaaS Demo and a SaaS Business
Anyone can build a demo. We build SaaS products that handle real load, real users, and real payments — with architecture that does not need to be rewritten at 1,000 users.
- Multi-tenant PostgreSQL with row-level security
- Stripe subscriptions, usage billing, annual plans
- SOC2-ready infrastructure from day one
- We own zero equity — you own everything
Engagement Metrics: DAU/WAU/MAU
The ratio of DAU/MAU (Daily Active Users / Monthly Active Users) measures habit formation:
| DAU/MAU Ratio | What It Means | Examples |
|---|---|---|
| > 50% | Highly sticky product, daily habit | Slack (63%), Facebook (66%) |
| 25–50% | Regular use, good engagement | Notion, Linear |
| 10–25% | Weekly product, OK for category | B2B tools used in workflows |
| < 10% | Infrequent use, retention risk | One-off tools, report generators |
// lib/engagement-metrics.ts
export async function getEngagementMetrics(
period: { start: Date; end: Date },
): Promise<EngagementMetrics> {
const [dau, wau, mau] = await Promise.all([
// DAU: unique users who performed any meaningful action today
db.events.groupBy({
by: ['userId'],
where: {
createdAt: {
gte: startOfDay(period.end),
lte: period.end,
},
// Only count meaningful events (not page views)
eventType: { in: ['feature_used', 'data_created', 'report_generated'] },
},
}).then(rows => rows.length),
// WAU: last 7 days
db.events.groupBy({
by: ['userId'],
where: {
createdAt: { gte: subDays(period.end, 7), lte: period.end },
eventType: { in: ['feature_used', 'data_created', 'report_generated'] },
},
}).then(rows => rows.length),
// MAU: last 30 days
db.events.groupBy({
by: ['userId'],
where: {
createdAt: { gte: subDays(period.end, 30), lte: period.end },
eventType: { in: ['feature_used', 'data_created', 'report_generated'] },
},
}).then(rows => rows.length),
]);
return {
dau,
wau,
mau,
dauMauRatio: mau > 0 ? (dau / mau) * 100 : 0,
wauMauRatio: mau > 0 ? (wau / mau) * 100 : 0,
};
}
The Metrics Hierarchy
Metrics Priority for Stage
Pre-PMF (< $50K MRR): Focus: Engagement and retention
- Weekly retention rate (do users come back?)
- Time to value (when do users first succeed?)
- NPS (do users recommend you?) Don't obsess over: MRR growth (fixing retention first)
Post-PMF ($50K–$1M MRR): Focus: Growth efficiency
- MoM MRR growth rate (target: 15–25%)
- Quick ratio (target: > 3)
- CAC payback period (target: < 12 months)
- NDR / NRR (target: > 100%)
Scale ($1M+ MRR): Focus: Unit economics and predictability
- LTV:CAC ratio (target: > 3:1)
- Gross margin (target: > 70%)
- Rule of 40 (growth% + profit% > 40)
- Burn multiple (net burn / net new ARR; target: < 1.5)
---
## Working With Viprasol
We help SaaS teams instrument their products correctly — event tracking pipelines, cohort analysis dashboards, growth accounting SQL, and the engineering behind metrics infrastructure that actually answers business questions.
→ [Talk to our team](/contact) about analytics and growth engineering.
---
See Also
- Product Analytics — event tracking with PostHog/Mixpanel
- SaaS Metrics and KPIs — comprehensive SaaS KPI guide
- Embedded Analytics — showing metrics to customers
- Product-Led Growth — growth metrics in a PLG context
- Web Development Services — analytics engineering
About the Author
Viprasol Tech Team
Custom Software Development Specialists
The Viprasol Tech team specialises in algorithmic trading software, AI agent systems, and SaaS development. With 100+ projects delivered across MT4/MT5 EAs, fintech platforms, and production AI systems, the team brings deep technical experience to every engagement. Based in India, serving clients globally.
Building a SaaS Product?
We've helped launch 50+ SaaS platforms. Let's build yours — fast.
Free consultation • No commitment • Response within 24 hours
Add AI automation to your SaaS product?
Viprasol builds custom AI agent crews that plug into any SaaS workflow — automating repetitive tasks, qualifying leads, and responding across every channel your customers use.