[CONSEJO — Doc 13] Contrarian: La trampa de las métricas SaaS es medir lo que es fácil de medir (pageviews, registros, usuarios activos) en lugar de lo que predice el negocio (activation rate, expansión MRR, churn por cohorte). Un portal con 1,000 registros y 5 clientes pagando está fallando — aunque las métricas superficiales se vean bien. Optimizar la métrica equivocada es peor que no tener métricas. First Principles: Un negocio SaaS tiene exactamente 3 palancas de crecimiento: adquirir más clientes, retenerlos más tiempo, y expandir su valor. Cada KPI debe mapear claramente a una de estas 3 palancas. Si no puedes decir a qué palanca pertenece una métrica, probablemente no vale medir.
1. North Stars del portal
North Star principal: MRR
MRR = Σ (precio_mensual × suscripciones_activas)
+ Σ (precio_anual / 12 × suscripciones_anuales_activas)
Meta por gate: - Mes 6: MRR $8,500 (escenario base) - Mes 12: MRR $32,000 - Mes 30: MRR $250,000 (Gate #1 → ARR $3M)
North Star de producto: Activation Rate D7
Activation Rate D7 = trials_que_completan_momento_aha_en_7_dias / trials_iniciados
Meta: ≥35% — si cae por debajo, es la palanca #1 a atacar antes que adquisición.
Momento aha por módulo: - StockMind: primera orden de compra generada automáticamente - SalesMind: pipeline configurado con ≥3 oportunidades y primera proyección de cierre - BookMind: primera reconciliación de banco completada o primera FE emitida - PayMind: primera planilla calculada y aprobada por el administrador
2. Funnel completo de conversión
VISITANTE ÚNICO
↓ × visitor_to_trial_rate (meta: ≥4%)
TRIAL INICIADO
↓ × trial_activation_rate (meta: ≥35% en D7)
TRIAL ACTIVADO
↓ × activation_to_paid_rate (meta: ≥55%)
CLIENTE PAGANDO
↓ × retention_rate (meta: ≥97%/mes)
CLIENTE RETENIDO
↓ × expansion_rate (meta: ≥20% tienen 2+ módulos a mes 18)
CLIENTE EXPANDIDO
Queries de funnel (SQL)
-- Funnel mensual completo
WITH cohorte AS (
SELECT DATE_TRUNC('month', created_at) AS mes
FROM ms_subscriptions
WHERE trial_end IS NOT NULL
)
SELECT
mes,
COUNT(*) AS trials,
COUNT(*) FILTER (WHERE activated_at IS NOT NULL) AS activados,
COUNT(*) FILTER (WHERE estado = 'active') AS pagando,
ROUND(100.0 * COUNT(*) FILTER (WHERE activated_at IS NOT NULL) / COUNT(*), 1) AS pct_activation,
ROUND(100.0 * COUNT(*) FILTER (WHERE estado = 'active') /
NULLIF(COUNT(*) FILTER (WHERE activated_at IS NOT NULL), 0), 1) AS pct_conversion
FROM ms_subscriptions s
JOIN cohorte c ON DATE_TRUNC('month', s.created_at) = c.mes
WHERE s.trial_end IS NOT NULL
GROUP BY 1
ORDER BY 1 DESC;
3. Métricas de billing
MRR components
| Métrica | Definición | Frecuencia |
|---|---|---|
| New MRR | MRR de clientes nuevos en el mes | Mensual |
| Expansion MRR | MRR adicional de upgrades + nuevos módulos | Mensual |
| Churned MRR | MRR perdido por cancelaciones | Mensual |
| Contraction MRR | MRR perdido por downgrades | Mensual |
| Net New MRR | New + Expansion - Churned - Contraction | Mensual |
Net New MRR = New MRR + Expansion MRR - Churned MRR - Contraction MRR
Net MRR Growth Rate = Net New MRR / MRR anterior × 100
Meta: Net MRR Growth Rate ≥15% mensual en los primeros 18 meses.
Churn metrics
-- Churn rate mensual (logo churn)
SELECT
DATE_TRUNC('month', cancelled_at) AS mes,
COUNT(*) AS cancelaciones,
(SELECT COUNT(*) FROM ms_subscriptions
WHERE estado = 'active'
AND period_start < DATE_TRUNC('month', cancelled_at)) AS activos_inicio_mes,
ROUND(100.0 * COUNT(*) /
(SELECT COUNT(*) FROM ms_subscriptions
WHERE estado = 'active'
AND period_start < DATE_TRUNC('month', cancelled_at)), 2) AS logo_churn_rate
FROM ms_subscriptions
WHERE estado = 'cancelled'
GROUP BY 1
ORDER BY 1 DESC;
Umbrales de alerta: - Churn <3%/mes → saludable - Churn 3-5%/mes → investigar causas (NPS, entrevistas de churn) - Churn >5%/mes → parar adquisición y resolver retención primero
ARPU y LTV
-- ARPU actual
SELECT
AVG(p.precio_usd) AS arpu_mensual,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY p.precio_usd) AS arpu_mediana
FROM ms_subscriptions s
JOIN ms_planes p ON s.plan_id = p.id
WHERE s.estado = 'active' AND p.periodo = 'monthly';
-- LTV simplificado (supone churn constante)
-- LTV = ARPU / churn_rate_mensual
-- Ejemplo: $349 / 0.03 = $11,633
4. Métricas de activación y onboarding
D7 Activation tracking
-- Tenants en trial y en qué paso del onboarding están
SELECT
t.onboarding_step,
COUNT(*) AS tenants,
AVG(EXTRACT(EPOCH FROM (NOW() - s.created_at))/86400) AS dias_promedio_en_este_paso
FROM ms_tenants t
JOIN ms_subscriptions s ON s.tenant_id = t.id AND s.estado = 'trial'
GROUP BY 1
ORDER BY 1;
Palanca de mejora: Si hay una caída de >30% entre el paso 2 y 3 del wizard, ese es el punto de fricción a resolver, no agregar más features.
Email engagement de onboarding
| Meta de open rate | Meta de click rate | |
|---|---|---|
| D0 — Bienvenida | ≥55% | ≥25% |
| D1 — Primer paso | ≥45% | ≥20% |
| D3 — Punto de activación | ≥40% | ≥15% |
| D7 — Check-in | ≥35% | ≥12% |
| D10 — Urgencia trial | ≥45% | ≥18% |
| D14 — Último día | ≥50% | ≥22% |
5. Métricas de expansión (cross-sell)
-- Módulos por tenant (distribución)
SELECT
COUNT(DISTINCT modulo) AS num_modulos,
COUNT(*) AS tenants,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 1) AS pct
FROM ms_subscriptions
WHERE estado = 'active'
GROUP BY 1
ORDER BY 1;
-- Revenue por número de módulos
SELECT
COUNT(DISTINCT s.modulo) AS modulos_activos,
SUM(p.precio_usd) AS mrr_por_tenant,
COUNT(DISTINCT s.tenant_id) AS tenants
FROM ms_subscriptions s
JOIN ms_planes p ON s.plan_id = p.id
WHERE s.estado = 'active' AND p.periodo = 'monthly'
GROUP BY s.tenant_id
ORDER BY 1;
Meta de expansión: - Mes 12: ≥15% de tenants con 2+ módulos - Mes 18: ≥25% de tenants con 2+ módulos - Mes 24: ≥35% de tenants con 2+ módulos
6. Métricas de partners CPA
| Métrica | Definición | Meta (mes 18) |
|---|---|---|
| Partners activos | Partners con ≥1 referido en los últimos 90 días | ≥20 |
| Clientes adquiridos vía partner | % del total de clientes | ≥20% |
| CAC vía partner | Comisiones pagadas / clientes adquiridos | <$120 |
| Comisión promedio por partner | MRR referido × 20% | >$200/mes |
7. Dashboard de métricas (admin interno)
Vista diaria (Cheryx team)
┌─────────────────────────────────────────────┐
│ MindStack — Dashboard Interno │
│ Actualizado: hace 5 minutos │
├─────────────┬──────────────┬───────────────┤
│ MRR HOY │ TRIALS ACTIVOS│ ACTIVATION D7 │
│ $32,450 │ 47 │ 38% │
│ ▲ +$349 │ ▲ +3 │ ▲ +3pp │
├─────────────┴──────────────┴───────────────┤
│ ALERTAS │
│ ⚠️ 12 tenants sin login >7 días │
│ ⚠️ 3 suscripciones past_due │
│ ✓ 0 webhooks fallidos en las últimas 24h │
└─────────────────────────────────────────────┘
Alertas operacionales
| Alerta | Condición | Destino |
|---|---|---|
| Past due >10% del MRR | Más del 10% del MRR en past_due | Email founders |
| Webhook failures | >5 fallos en 1 hora | Sentry + Slack |
| Trial spike | >10 trials en 1 hora | Email (puede ser bot) |
| Churn spike | >3 cancelaciones en 1 día | Email founders |
| 0 new trials en 48h | Sin registros en 2 días | Email — revisar landing |
8. Reportes mensuales para founders
MRR Report (1er día del mes):
MindStack — Reporte Mayo 2026
──────────────────────────────
MRR: $X,XXX (▲ XX% vs abril)
New MRR: $XXX
Expansion MRR: $XXX
Churned MRR: -$XXX
Clientes activos: XX
StockMind: XX SalesMind: XX
BookMind: XX PayMind: XX
Activation D7: XX%
Trial-to-paid: XX%
Churn: X.X%
NPS: XX
Ver también: Doc 05 (Proyecciones Financieras — escenarios de MRR) · Doc 04 (GTM — funnel de canales) · Doc 12 (Roadmap — criterios de release por fase)