Flujo 03: Generación de Informes Semanales
El problema
El informe semanal de negocio ocupa entre 2 y 4 horas cada viernes: abrir cuatro hojas de cálculo, copiar KPIs, calcular variaciones, escribir el resumen ejecutivo, formatearlo y distribuirlo. Si quien lo hace está de vacaciones o enfermo, el informe no sale. Este flujo lo entrega automáticamente cada viernes a las 17:00, con análisis narrativo generado por Claude a partir de los datos reales de Google Sheets.
Herramientas necesarias
| Nodo n8n | Función |
|---|---|
| Schedule Trigger | Dispara el flujo cada viernes a las 17:00 |
| Google Sheets | Lee los KPIs de la semana actual y la anterior |
| Set | Consolida los datos en un único objeto JSON |
| HTTP Request | Llama a Claude API para generar el análisis |
| Gmail | Envía el informe por email a los stakeholders |
Servicios externos:
- Google Sheets con datos de KPIs actualizados
- API Key de Anthropic (console.anthropic.com)
- Cuenta Gmail con OAuth2 en n8n Credentials
Configuración paso a paso
Nodo 1: Schedule Trigger
- Trigger Interval: Weeks
- Weeks Between Triggers: 1
- Trigger on Weekdays: Friday
- Trigger at Hour: 17
- Trigger at Minute: 0
Nodo 2: Google Sheets — Leer KPIs semana actual
Añade el nodo Google Sheets y configura:
- Operation: Read Rows
- Document ID: ID de tu hoja (extraído de la URL de Google Sheets)
- Sheet Name:
KPIs_Semanales - Filters:
- Column:
Semana - Value:
={{ $now.toFormat('kkkk-WW') }}(ej:2025-W14)
- Column:
- Return All Columns: ON
Estructura esperada de la hoja KPIs_Semanales:
| Semana | Ventas_€ | Pedidos | Ticket_Medio | Clientes_Nuevos | Satisfaccion_% | Tickets_Soporte |
|---|---|---|---|---|---|---|
| 2025-W14 | 42500 | 87 | 488 | 12 | 94 | 23 |
| 2025-W13 | 38200 | 79 | 483 | 9 | 91 | 31 |
Nodo 3: Google Sheets — Leer KPIs semana anterior
Clona el nodo anterior. Cambia el filtro de semana a la semana previa usando la expresión:
={{ $now.minus({ weeks: 1 }).toFormat('kkkk-WW') }}
Nodo 4: Set — Consolidar datos
Añade un nodo Set con estos campos:
ventas_actual:={{ $('Semana actual').item.json.Ventas_€ }}ventas_anterior:={{ $('Semana anterior').item.json.Ventas_€ }}pedidos_actual:={{ $('Semana actual').item.json.Pedidos }}ticket_medio:={{ $('Semana actual').item.json.Ticket_Medio }}clientes_nuevos:={{ $('Semana actual').item.json.Clientes_Nuevos }}satisfaccion:={{ $('Semana actual').item.json.Satisfaccion_% }}tickets_soporte:={{ $('Semana actual').item.json.Tickets_Soporte }}variacion_ventas:={{ Math.round(($('Semana actual').item.json.Ventas_€ - $('Semana anterior').item.json.Ventas_€) / $('Semana anterior').item.json.Ventas_€ * 100) }}
Nodo 5: HTTP Request — Claude API
- Method: POST
- URL:
https://api.anthropic.com/v1/messages - Authentication: Header Auth
x-api-key: tu API Key de Anthropic
- Headers adicionales:
anthropic-version:2023-06-01content-type:application/json
- Body (JSON):
{
"model": "claude-3-5-haiku-20241022",
"max_tokens": 1200,
"messages": [
{
"role": "user",
"content": "={{ $json.prompt_informe }}"
}
]
}
Crea el campo prompt_informe en el nodo Set anterior con este valor:
Eres el analista de negocio de [EMPRESA]. Genera el informe semanal ejecutivo
para el equipo directivo. Escribe en español, con datos precisos y lenguaje directo.
DATOS DE LA SEMANA {{ $now.toFormat('dd/MM/yyyy') }}:
- Ventas totales: {{ $json.ventas_actual }}€ (semana anterior: {{ $json.ventas_anterior }}€, variación: {{ $json.variacion_ventas }}%)
- Número de pedidos: {{ $json.pedidos_actual }}
- Ticket medio: {{ $json.ticket_medio }}€
- Nuevos clientes: {{ $json.clientes_nuevos }}
- Satisfacción cliente: {{ $json.satisfaccion }}%
- Tickets de soporte abiertos: {{ $json.tickets_soporte }}
Estructura el informe con estas secciones:
1. RESUMEN EJECUTIVO (máximo 3 frases)
2. ANÁLISIS DE VENTAS (variación vs semana anterior con interpretación)
3. PUNTOS POSITIVOS (máximo 3 bullets)
4. ÁREAS DE ATENCIÓN (máximo 3 bullets con dato concreto)
5. ACCIÓN PRIORITARIA PARA LA PRÓXIMA SEMANA (1 recomendación concreta)
Nodo 6: Gmail — Enviar informe
- Operation: Send Email
- To:
equipo-directivo@tuempresa.com(o múltiples emails separados por comas) - Subject:
=Informe Semanal {{ $now.toFormat('dd/MM/yyyy') }} — [EMPRESA] - Message (expresión):
={{ $json.content[0].text }}
---
Informe generado automáticamente por el sistema de BI de [EMPRESA].
Datos extraídos de Google Sheets a las {{ $now.toFormat('HH:mm') }} del {{ $now.toFormat('EEEE dd/MM/yyyy') }}.
- Message Type: Text (puedes cambiar a HTML añadiendo etiquetas básicas)
Ejemplo de prompt IA
Eres el analista de negocio de Acme Corp.
DATOS DE LA SEMANA 18/04/2025:
- Ventas totales: 42.500€ (semana anterior: 38.200€, variación: +11,3%)
- Número de pedidos: 87
- Ticket medio: 488€
- Nuevos clientes: 12
- Satisfacción cliente: 94%
- Tickets de soporte abiertos: 23
Estructura el informe con estas secciones:
1. RESUMEN EJECUTIVO
2. ANÁLISIS DE VENTAS
3. PUNTOS POSITIVOS
4. ÁREAS DE ATENCIÓN
5. ACCIÓN PRIORITARIA
Fragmento de la respuesta de Claude:
RESUMEN EJECUTIVO
Semana sólida: ventas +11,3% respecto a la anterior, impulsadas por un incremento
en el ticket medio y un récord de nuevos clientes (12). La satisfacción se mantiene
en máximos históricos con un 94%.
ANÁLISIS DE VENTAS
42.500€ en ventas (+4.300€ vs semana anterior). El ticket medio sube a 488€ (+1%),
lo que sugiere que los clientes están contratando servicios de mayor valor. Con 87
pedidos, la conversión por cliente es la más alta del mes.
PUNTOS POSITIVOS
• Captación de 12 nuevos clientes: +33% respecto a la media mensual de 9/semana
• Satisfacción en 94%: segundo máximo histórico consecutivo
• Reducción de tickets soporte: de 31 a 23 (-26%), indicador de estabilidad del producto
Ahorro estimado
| Tarea | Antes | Con automatización |
|---|---|---|
| Recopilar KPIs de 4 hojas | 45 min/semana | 0 min |
| Calcular variaciones | 30 min/semana | 0 min |
| Redactar resumen ejecutivo | 60 min/semana | 0 min |
| Formatear y distribuir | 30 min/semana | 0 min |
| Total semanal | 2,75 h/semana | ~10 min (revisión) |
Ahorro neto: ~2,5 horas/semana = 130 horas/año. Coste de Claude por informe: ~€0,003.