Métricas SaaS — Semana 24
Dashboard generado con Evidence · SQL sobre PostgreSQL AWS RDS · Actualización diaria 06:00 UTC
evidence.dev · SQL-as-Code BI
Período:
Plan:
Canal:
MRR Total
€48.730
↑ +12,4% vs sem anterior
ARR proyectado: €584.760
Clientes Activos
347
↑ +23 esta semana
+8 trials convertidos · +15 nuevos
Churn Mensual
2,1%
↑ +0,3pp vs mes anterior
7 cancelaciones · MRR perdido: €483
Trial → Paid Conv.
34,6%
↑ +2,1pp vs sem anterior
23 trials activos · 8 convertidos
Evolución MRR — Últimas 12 semanas
por plan
Semanas 13–24, 2026 · Fuente: subscriptions (PostgreSQL)
-- pages/mrr-overview.md
```sql mrr_weekly
SELECT
date_trunc('week', s.created_at) AS week,
SUM(s.amount) AS mrr,
s.plan_name
FROM subscriptions s
WHERE s.status = 'active'
AND s.created_at >= current_date - interval '90 days'
GROUP BY 1, 3 ORDER BY 1
```
```sql mrr_weekly
SELECT
date_trunc('week', s.created_at) AS week,
SUM(s.amount) AS mrr,
s.plan_name
FROM subscriptions s
WHERE s.status = 'active'
AND s.created_at >= current_date - interval '90 days'
GROUP BY 1, 3 ORDER BY 1
```
MRR por Plan
Distribución actual · Semana 24
Clínica (199€)
92 clientes
€18.308
37,6%
Pro (79€)
231 clientes
€18.249
37,4%
Starter (29€)
420 clientes
€12.180
25,0%
Upgrades esta semana
Starter → Pro
+12 clientes
Pro → Clínica
+5 clientes
Expansión MRR: +€1.748 esta semana
Churn Mensual
% cancelaciones · Últimas 8 semanas
MRR Churn
€483
Retención
97,9%
Funnel de Trials
Conversión trial → paid · S24
Trials iniciados
23
Onboarding completado
18 (78%)
Feature activation
14 (61%)
Convertidos a paid
8 (34,6%)
Revenue de conversiones S24
+€1.132
Plan promedio: Pro (79€) · 8 clientes nuevos
CAC vs LTV por Canal
Eficiencia de adquisición · Junio 2026
Orgánico / SEO
LTV/CAC 8.2x
CAC: €42
LTV: €344
Payback: 0,5 meses
Referidos
LTV/CAC 6.4x
CAC: €58
LTV: €371
Payback: 0,7 meses
LinkedIn Ads
LTV/CAC 3.1x
CAC: €118
LTV: €366
Payback: 1,5 meses
Paid Google
LTV/CAC 1.8x
CAC: €203
LTV: €365
Payback: 2,6 meses
Clientes en Riesgo de Churn
7 alertas
Score de salud < 40 · Acción CS requerida
| Cliente | Plan | MRR | Health Score | Último login | Acción |
|---|---|---|---|---|---|
| Clínica Vitalcare Barcelona · 3 sedes |
Clínica | €597 |
|
hace 18 días | ● Urgente |
| Centro Nutrición Arco Madrid · 1 sede |
Pro | €79 |
|
hace 12 días | ● Urgente |
| FitLife Consultoría Sevilla · freelance |
Starter | €29 |
|
hace 9 días | ● Revisar |
| HealthPro Granollers Cataluña · 2 sedes |
Clínica | €398 |
|
hace 7 días | ● Revisar |
| NutriCoach Online Valencia · remoto |
Pro | €79 |
|
hace 6 días | ● Revisar |
MRR en riesgo total: €1.182 ·
Ver los 7 clientes →
Retención por Cohorte
% clientes activos por semanas desde signup
| Cohorte | S0 | S1 | S2 | S4 | S8 | S12 | S16 | S20 |
|---|---|---|---|---|---|---|---|---|
| Feb'26 | 100% | 92% | 88% | 84% | 80% | 76% | 73% | 71% |
| Mar'26 | 100% | 91% | 87% | 83% | 81% | 77% | 74% | — |
| Abr'26 | 100% | 94% | 90% | 86% | 82% | — | — | — |
| May'26 | 100% | 93% | 89% | — | — | — | — | — |
| Jun'26 | 100% | 95% | — | — | — | — | — | — |
Tendencia positiva
La cohorte Jun'26 arranca con 95% de retención en S1, la mejor desde el lanzamiento. Las mejoras del onboarding (S20) están funcionando.
Estructura del Proyecto Evidence · NutriTrack Analytics
SQL-as-code · Markdown reports · Deploy Vercel con rebuild diario
Estructura de Archivos
nutritrack-analytics/
├── sources/
│ ├── postgres/
│ │ └── connection.yaml # AWS RDS
│ └── duckdb/
│ └── connection.yaml # CSV exports
├── pages/
│ ├── index.md # Resumen ejecutivo
│ ├── mrr-growth.md
│ ├── churn-analysis.md
│ ├── trial-funnel.md
│ ├── cac-ltv.md
│ └── customers/
│ └── [customer_id].md # Templated
└── evidence.plugins.yaml
├── sources/
│ ├── postgres/
│ │ └── connection.yaml # AWS RDS
│ └── duckdb/
│ └── connection.yaml # CSV exports
├── pages/
│ ├── index.md # Resumen ejecutivo
│ ├── mrr-growth.md
│ ├── churn-analysis.md
│ ├── trial-funnel.md
│ ├── cac-ltv.md
│ └── customers/
│ └── [customer_id].md # Templated
└── evidence.plugins.yaml
Ejemplo: Página de Cliente
<!-- pages/customers/[customer_id].md -->
# Cliente: {params.customer_id}
```sql customer_health
SELECT
c.name, c.plan, c.mrr,
c.health_score,
last(login_at) AS last_login,
renewal_date
FROM customers c
WHERE c.id = '${params.customer_id}'
```
<BigValue
data={customer_health}
value=health_score
title="Health Score"
/>
# Cliente: {params.customer_id}
```sql customer_health
SELECT
c.name, c.plan, c.mrr,
c.health_score,
last(login_at) AS last_login,
renewal_date
FROM customers c
WHERE c.id = '${params.customer_id}'
```
<BigValue
data={customer_health}
value=health_score
title="Health Score"
/>