The Indie Hacker's Guide to Customer Retention Metrics
You're acquiring new users but not sure if you're retaining them. You've heard of churn rate, cohort analysis, and LTV but they feel like concepts for companies with data teams. As a solo founder, you need a simpler model — one that you can actually implement and act on without hiring an analyst.
This guide breaks down the five retention metrics that actually matter for micro-SaaS, how to calculate them without spreadsheet hell, and what actions follow from each metric.
Why retention matters more than acquisition
Acquiring a new customer typically costs 5–7x more than retaining an existing one. For indie hackers with small marketing budgets, leaky retention makes growth impossible — you're constantly refilling a bucket with a hole in it.
More importantly, retention is signal. When customers stay, your product is solving their problem. When they leave, something is broken. Understanding retention metrics helps you distinguish between "bad product" churn and "wrong customer" churn — and only one of those is fixable with code.
Metric 1: Monthly churn rate
Churn rate is the percentage of paying customers who cancel in a given month. It's the most fundamental retention metric.
Monthly Churn Rate = (Customers Lost This Month / Customers at Start of Month) × 100
Example:
Start of month: 100 paying customers
Cancellations this month: 5
Churn rate: (5/100) × 100 = 5%For early-stage micro-SaaS, a churn rate under 5% is generally healthy. Over 10% means something is structurally wrong — either with the product, the onboarding, or the customer fit.
How to track it with customer data: Filter your customer database by status = 'paid' at the start of the month. At the end of the month, count how many transitioned to status = 'free' or were cancelled. That's your denominator and numerator.
Metric 2: Activity-based retention
Churn is a lagging indicator — customers have already left by the time you measure it. Activity-based retention is a leading indicator that lets you spot churn risk before it happens.
The simplest version: track last_activity_at for each customer. Customers who haven't logged in for 14+ days are at-risk. Customers who haven't logged in for 30+ days are very likely to churn.
Implementation: Call tinycrm.ping(email) on each user login or session. Then sort your customer table by last_activity_at to see who's gone quiet. Paid customers who haven't been active in 14 days deserve a personal email.
// Track activity on every authenticated request
// middleware.ts
if (session?.user?.email) {
tinycrm.ping(session.user.email).catch(() => {});
}
// Dashboard query: find at-risk customers
// Filter: status = 'paid' AND last_activity_at < 14 days agoMetric 3: Activation rate
Activation is the moment a new user first gets value from your product. It's different from signup. A user might sign up and never reach the moment where they understand why your product is useful.
Activation rate = (users who reach activation event / total signups) × 100.
You define the activation event based on your product. For a CRM SDK, it might be "called identify() for the first time." For a writing tool, it might be "published first document." Pick one clear action that separates tire-kickers from actual users.
How to track it: Use a param to mark activation when the event happens:
// When user completes the activation event
await tinycrm.identify({
email: user.email,
params: {
activated: true,
activated_at: new Date().toISOString(),
activation_event: 'first_project_created',
},
});Then filter your customer table for customers where activated = true vs false to see your activation rate.
Metric 4: Trial-to-paid conversion rate
If you offer a free trial, this is one of the most important metrics. It measures whether your free trial is doing its job — getting people to the point where they'll pay.
Trial-to-paid rate = (users who converted to paid / users who started a trial) × 100.
Industry benchmarks vary by product complexity, but 15–25% is a reasonable target for B2B SaaS. Under 10% usually indicates either a product problem or an onboarding problem.
How to track it: Mark trial start in params, then compare against paid conversions:
// On trial start
await tinycrm.identify({
email: user.email,
status: 'free',
params: { trial_started_at: new Date().toISOString() },
});
// On payment / conversion
await tinycrm.identify({
email: user.email,
status: 'paid',
params: { converted_at: new Date().toISOString() },
});Metric 5: Customer lifetime value (simplified)
LTV is the total revenue you expect from a customer over their lifetime with your product. For subscription businesses, the simplified formula is:
LTV = Average Monthly Revenue Per Customer / Monthly Churn Rate
Example:
Average MRR per customer: $9/month
Monthly churn rate: 5%
LTV = $9 / 0.05 = $180LTV matters because it tells you how much you can afford to spend acquiring a customer. If your LTV is $180, spending $50 on acquisition is a good deal. Spending $200 is not.
The actionable insight from LTV: reducing churn has an outsized impact. Going from 5% to 3% monthly churn increases LTV from $180 to $300 — a 67% increase — without acquiring a single new customer.
Building a simple retention dashboard
You don't need a complex analytics tool for these metrics. A filtered view of your customer database covers most of them:
- Weekly review: Sort by last_activity_at. Identify paid customers inactive for 14+ days. Reach out personally.
- Monthly review: Count paid vs free. Calculate month-over-month changes. Identify churn.
- Activation check: Filter new signups from last month. How many have activated = true?
Export the filtered data as CSV monthly for deeper analysis. For most indie hackers at early stage, this level of rigor is sufficient to spot problems and take action.
Start tracking what matters
TinyCRM gives you last_activity_at, status tracking, and custom params — the data you need to measure retention without a data team.