Saltar al contenido
Joffre Llerena Automatizaciones e IA para negocios reales
Automatizaciones

Cómo dejé de armar el reporte de campañas a mano

Por Joffre Llerena · 5 min

Perdía dos horas cada lunes copiando números de Meta a una hoja de cálculo. Este es el flujo que lo hace por mí, y los tres sitios donde se me rompió antes de funcionar.

Durante casi dos años, mi lunes empezaba igual: abrir el Administrador de anuncios, filtrar por los últimos siete días, exportar, pegar en Google Sheets, arreglar las columnas que se desordenaban, calcular el costo por lead a mano y escribir un resumen en WhatsApp para cada cliente. Dos horas. Todos los lunes.

Lo peor no era el tiempo. Era que el lunes que estaba ocupado, no lo hacía, y entonces el cliente se enteraba de que una campaña se había disparado tres días tarde.

Qué hace el flujo

Cada lunes a las 7:00 se dispara solo y hace cuatro cosas:

  1. Pide a la API de Meta el gasto, los leads y el costo por lead de los últimos siete días, cuenta por cuenta.
  2. Escribe una fila nueva en una hoja de Google por cada cuenta, sin tocar el histórico.
  3. Le pasa esos números a un modelo de IA para que escriba tres frases en español claro: qué pasó, qué mejoró y qué hay que revisar.
  4. Manda ese resumen por WhatsApp al cliente y una copia a mí.

Yo ya no toco nada. Solo leo la copia que me llega y, si algo pinta mal, entro a arreglarlo.

Lo que necesitas antes de empezar

  • Una cuenta de n8n. La versión en la nube arranca en unos 20 dólares al mes; si tienes un servidor, la puedes instalar gratis.
  • Un token de acceso de la API de Meta con permiso ads_read.
  • Una hoja de Google vacía y una cuenta de servicio con acceso a ella.
  • Cualquier proveedor de IA con API. Yo uso Claude, pero cualquiera sirve para esto.
Antes de que pierdas una tarde El token que te da Meta al principio dura una hora. Si montas todo el flujo con ese token, mañana no funciona y no vas a entender por qué. Cámbialo por uno de larga duración desde el principio.

Paso 1 · El disparador

En n8n, un nodo Schedule Trigger con expresión cron. Yo lo tengo a las siete de la mañana hora de Ecuador:

0 7 * * 1

Los cinco campos son: minuto, hora, día del mes, mes y día de la semana. El 1 del final es lunes. Si lo quieres diario, pon un asterisco ahí.

Paso 2 · Traer los números de Meta

Un nodo HTTP Request apuntando al endpoint de insights. Lo importante es pedir solo lo que vas a usar, porque la API es lenta cuando pides de más:

GET https://graph.facebook.com/v21.0/act_TUCUENTA/insights
?fields=spend,actions,cost_per_action_type,campaign_name
&date_preset=last_7d
&level=campaign

Aquí está el primer sitio donde me rompí. Meta no te devuelve «leads» como un campo. Te devuelve un array llamado actions donde hay de todo: clics, vistas de página, mensajes iniciados. Tienes que buscar dentro el que tenga action_type igual a lead. Si tu campaña es de mensajes, el que buscas es otro. Vale la pena imprimir la respuesta cruda una vez y mirarla con calma antes de seguir.

Paso 3 · Guardar el histórico

Nodo de Google Sheets en modo Append, nunca Update. Cada semana agrega filas nuevas y no pisa nada. Esa hoja se vuelve, sin que hagas nada más, el histórico de todas tus cuentas, y a los seis meses tienes un dato que ninguna herramienta te da: cómo evolucionó tu costo por lead a lo largo del año.

Paso 4 · Que la IA escriba el resumen

Este es el paso donde casi todo el mundo se pasa de listo. Mi primera versión le pedía al modelo que «analizara las campañas y diera recomendaciones». El resultado eran tres párrafos genéricos que servían para cualquier cuenta del planeta.

Lo que funciona es lo contrario: darle los números, decirle el formato exacto y prohibirle inventar.

Eres el analista de una agencia de publicidad.
Estos son los datos reales de la última semana:
{{ $json.datos }}

Escribe exactamente tres frases en español de Ecuador:
1. Qué pasó con el gasto y los leads esta semana.
2. Qué mejoró o empeoró frente a la semana anterior.
3. Una sola cosa concreta a revisar esta semana.

Usa solo los números que te di. Si un dato no está,
di "sin dato". No recomiendes aumentar el presupuesto
si el costo por lead subió.

Esa última línea me ahorró una conversación incómoda con un cliente. El modelo, por defecto, es optimista.

Paso 5 · Enviarlo

Un nodo HTTP a la API de WhatsApp Business, o al proveedor que uses. Yo mando dos mensajes: uno al cliente y otro a mi propio número. El mío lleva además el enlace directo a la hoja, para poder abrirla desde el teléfono si algo llama la atención.

Los tres sitios donde se rompió

El token caducado. Ya lo dije arriba, pero lo repito porque me pasó dos veces. Añade un nodo de error que te avise a ti si la llamada a Meta falla; si no, el flujo se cae en silencio y te enteras cuando el cliente pregunta.

Las cuentas sin gasto. Si una cuenta no gastó nada esa semana, Meta devuelve un array vacío y el nodo siguiente explota al intentar dividir por cero. Un nodo IF antes del cálculo lo resuelve.

El resumen de tres páginas. Sin un límite explícito, el modelo escribe todo lo que puede. Poner «exactamente tres frases» en el prompt no siempre basta: yo además corto la respuesta en el nodo siguiente.

Cuánto tiempo me devolvió

Dos horas los lunes, más el rato de los martes en que me acordaba de que no lo había hecho. Llamémoslo tres horas a la semana. Montarlo me tomó una tarde larga, unas cinco horas contando los errores. Se pagó solo la segunda semana.

Pero lo que de verdad cambió no fue el tiempo: es que ahora el reporte sale siempre, esté yo ocupado, enfermo o de viaje. Un proceso que depende de que te acuerdes no es un proceso.

Guía de automatizaciones para negocios pequeños Te la mando gratis por correo: 24 páginas con todo lo que cuento aquí, listo para copiar.

Recibir la guía gratis