Velumi
Plantilla descargable · harness de reportes · versión 1.0 · actualizada 2026-09-17

Plantilla de reporte mensual con IA para agencias: el harness con compuerta de cifras, listo para descargar

No es un artículo: es la plantilla que usamos para que un modelo redacte el reporte mensual de un cliente sin tocar un solo número. Los campos con su nombre exacto en las APIs, la compuerta que valida las cifras antes y después del modelo, el prompt en español, el flujo con quién firma cada paso y el checklist. Se descarga en Markdown y en JSON.

La regla que ordena todo: El modelo no calcula, no transcribe de pantallas ni completa huecos: recibe una tabla ya validada y solo redacta sobre ella. Toda cifra del texto tiene que existir en la tabla.

Es la versión empaquetada de la guía de reportes automatizados. Lo que el modelo recibe es una tabla ya validada por código; lo que devuelve pasa por una compuerta que busca cada cifra del texto en esa tabla y rechaza el borrador si alguna no está. Abajo podés probar la compuerta con la tabla de ejemplo antes de descargar nada.

Qué contiene:

  • El flujo de 10 pasos con quién ejecuta y quién firma cada uno.
  • 34 campos de entrada (21 numéricos) con tipo, fuente, nombre en la API y qué pasa si faltan.
  • La especificación de la compuerta: 7 validaciones antes del modelo, 6 después, tolerancias y reintentos.
  • El prompt de narrativa en español con sus 8 variables (sin un solo número adentro: todos entran por la tabla).
  • La estructura del reporte en 8 secciones y el checklist anti-alucinación de 12 puntos.
  • 12 páginas de documentación oficial verificadas el 2026-09-17, con cita literal.

Descargar la plantilla

Dejá tu email de trabajo y se habilitan los dos archivos acá mismo. Se generan en tu navegador; no te mandamos nada por correo.

Guardamos tu email y la página. Nada más. Si cambia una API citada, te avisa una persona.

¿Qué herramientas automatizan el informe mensual de clientes para una agencia?

Antes de bajar la plantilla conviene saber en qué familia estás. Son tres; los nombres salen del mismo dataset que la tabla de la guía de reportes, donde está el precio que cada proveedor publica, por qué unidad cobra y si la IA viene incluida, leídos el 2026-10-19. Acá no se repiten precios: cambian seguido y la fecha de lectura va con ellos.

FamiliaHerramientasCobran porCuándo conviene
SaaS de reportes con IA AgencyAnalytics, Swydo, DashThis, Whatagraph, Reportei por cliente / por fuente de datos (cuenta conectada) / por tablero / por crédito (una cuenta de datos conectada) / no publicado Cuando la agencia no va a mantener nada propio y acepta que la compuerta de cifras y el tono queden en manos del proveedor; el costo crece por cliente, por fuente o por tablero.
Tablero gratuito Looker Studio (Google) por usuario y proyecto en Pro Cuando el cliente quiere consultar datos vivos; resuelve el tablero, no el documento con la lectura de la agencia (ese sigue saliendo de otra cosa).
Harness propio Harness propio (SDK de agentes + APIs de GA4, Google Ads y Meta) por cliente, variable Cuando hay alguien técnico y más de ~10 clientes con configuraciones distintas: es la familia para la que está escrita esta plantilla (la compuerta de cifras es tuya).

Ninguna de las herramientas de la tabla verifica por vos que cada cifra del texto exista en la tabla de datos: esa compuerta es lo que especifica esta plantilla, y sirve con cualquiera de las tres familias.

El flujo, paso por paso, y quién firma

Diez pasos. El código ejecuta siete; el modelo, uno; las personas firman tres veces: la configuración, la aprobación y el envío. Nada llega al cliente sin una firma humana, y ninguna cifra llega al modelo sin pasar por el código.

#PasoQuiénFirmaSalida
1Configurar al clienteAccount manager + dueño interno del harnessAccount manager (una vez; se revisa al cambiar objetivos)IDs de cuentas, moneda, acción que cuenta como resultado, ventana de atribución, umbrales de anomalía, tono, objetivos del trimestre.
2Extraer por APICódigoNadie: queda registradoUn JSON por fuente con fecha de extracción y método «api». Sin capturas de pantalla ni copiar y pegar.
3Consolidar y calcularCódigo con testsNadie: los tests son la firmaTabla final: entrada + derivados + variaciones contra la corrida anterior guardada.
4Compuerta de entradaCódigoEscala al analista si fallaOK, o lista de campos faltantes o inválidos. Sin OK no hay paso 5.
5Marcar anomalíasCódigo con los umbrales del paso 1NadieLista de hechos anómalos (campo, valor, umbral) que la narrativa debe explicar, no descubrir.
6Redactar la narrativaModelo, con el prompt de esta plantillaNadie todavíaBorrador en español con la estructura de ocho secciones.
7Compuerta de cifrasCódigoRechaza y regenera una vez; a la segunda, escalaBorrador con todas las cifras verificadas o lista de cifras huérfanas.
8Revisión de tono y alcanceModelo revisor con criterios explícitos + reglasNadieObservaciones: promesas de resultado, recomendaciones de presupuesto no autorizadas, tono fuera de guía.
9AprobarAccount managerAccount manager (siempre)Reporte editado o aprobado; las ediciones se guardan para mejorar el prompt del mes siguiente.
10Enviar y registrarUna persona, con su nombreQuien envíaReporte enviado; métricas de la corrida: minutos humanos, rechazos, reintentos, ediciones.

Campos de entrada: tipo, fuente y nombre en la API

Cada cifra del reporte entra por uno de estos campos, con el nombre exacto que tiene en la API de su plataforma (verificado el 2026-09-17; los enlaces van a la documentación). «Si falta» dice qué hace la compuerta: bloquea (no hay reporte), sin-dato (la sección dice «sin dato este mes» y el modelo no puede rellenarla) u omite (la sección desaparece y el anexo lo declara).

Metadatos del reporte

CampoTipoOrigen en la APIObligatorioSi falta
cliente
Nombre del cliente
texto configuración del cliente sí bloquea
periodo.anio
Año del periodo
entero configuración de la corrida sí bloquea
periodo.mes
Mes del periodo (1-12)
entero configuración de la corrida sí bloquea
moneda
Moneda de los importes (ISO 4217)
texto moneda de la cuenta publicitaria sí bloquea
objetivos
Objetivos del trimestre acordados con el cliente
texto account manager no sin-dato
acciones_del_mes
Qué hizo la agencia este mes (texto humano)
texto account manager no sin-dato
mes_anterior
Mismos campos del mes anterior
tabla corrida anterior guardada (nunca se vuelve a pedir a mano) no sin-dato

Google Ads · Google Ads API (GoogleAdsService.SearchStream, GAQL)

CampoTipoOrigen en la APIObligatorioSi falta
google_ads.extraido_el
Fecha de extracción
fecha reloj del extractor sí bloquea
google_ads.costo
Inversión
moneda metrics.cost_micros ÷ 1.000.000 sí omite
google_ads.impresiones
Impresiones
entero metrics.impressions sí omite
google_ads.clics
Clics
entero metrics.clicks sí omite
google_ads.conversiones
Conversiones
decimal metrics.conversions sí sin-dato
google_ads.valor_conversiones
Valor de conversiones
moneda metrics.conversions_value no omite

Meta Ads · Marketing API · Insights (/act_<id>/insights)

CampoTipoOrigen en la APIObligatorioSi falta
meta_ads.extraido_el
Fecha de extracción (≥ día 3 del mes siguiente)
fecha reloj del extractor sí bloquea
meta_ads.ventana_atribucion
Ventana de atribución usada
texto action_attribution_windows (p. ej. 7d_click,1d_view) sí bloquea
meta_ads.inversion
Inversión (estimada según la plataforma)
moneda spend sí omite
meta_ads.impresiones
Impresiones
entero impressions sí omite
meta_ads.clics
Clics (all)
entero clicks sí omite
meta_ads.alcance
Alcance
entero reach no omite
meta_ads.frecuencia
Frecuencia
decimal frequency no omite
meta_ads.resultados
Resultados (la acción elegida con el cliente)
entero actions[action_type acordado] sí sin-dato
meta_ads.tipo_resultado
Qué acción cuenta como resultado
texto action_type (p. ej. lead, purchase) sí bloquea

GA4 · Google Analytics Data API (runReport)

CampoTipoOrigen en la APIObligatorioSi falta
ga4.extraido_el
Fecha de extracción
fecha reloj del extractor sí bloquea
ga4.sesiones
Sesiones
entero sessions sí omite
ga4.usuarios_activos
Usuarios activos
entero activeUsers sí omite
ga4.eventos_clave
Eventos clave
entero keyEvents sí sin-dato
ga4.tasa_interaccion
Tasa de interacción
fraccion engagementRate no omite
ga4.sesiones_por_canal
Sesiones por canal
tabla sessions × sessionDefaultChannelGroup no omite

Search Console · Search Console API (searchanalytics.query)

CampoTipoOrigen en la APIObligatorioSi falta
gsc.extraido_el
Fecha de extracción
fecha reloj del extractor sí bloquea
gsc.clics
Clics orgánicos
entero clicks (type=web, dataState=final) sí omite
gsc.impresiones
Impresiones orgánicas
entero impressions sí omite
gsc.ctr
CTR orgánico
fraccion ctr sí omite
gsc.posicion_media
Posición media
decimal position sí omite
gsc.consultas_top
Consultas principales
tabla dimensions=[query], rowLimit acordado no omite

Tipos

  • entero: Número entero ≥ 0.
  • decimal: Número con decimales ≥ 0; se publica con un decimal.
  • moneda: Importe ≥ 0 en la moneda de la cuenta; se publica con dos decimales y el código ISO.
  • fraccion: Número entre 0 y 1 tal como lo devuelve la API; el código lo convierte a porcentaje.
  • texto: Cadena no vacía.
  • fecha: Fecha ISO (YYYY-MM-DD).
  • tabla: Lista de filas con claves fijas; cada celda numérica se valida con el tipo de su columna.

Derivados: los calcula el código, nunca el modelo

  • google_ads.ctr_pct = clics ÷ impresiones × 100 (decimal)
  • google_ads.cpc = costo ÷ clics (moneda)
  • google_ads.cpa = costo ÷ conversiones (null si conversiones = 0) (moneda)
  • meta_ads.ctr_pct = clics ÷ impresiones × 100 (decimal)
  • meta_ads.cpc = inversión ÷ clics (moneda)
  • meta_ads.costo_por_resultado = inversión ÷ resultados (null si resultados = 0) (moneda)
  • ga4.tasa_interaccion_pct = tasa_interaccion × 100 (decimal)
  • gsc.ctr_pct = ctr × 100 (decimal)
  • inversion_total = google_ads.costo + meta_ads.inversion (moneda)
  • participacion_google_pct = google_ads.costo ÷ inversion_total × 100 (decimal)
  • variacion.<campo>_pct = (mes − mes_anterior) ÷ mes_anterior × 100, por cada campo numérico presente en ambos meses (decimal)

Entrada de ejemplo (paso 2), tal como la produce el extractor

Cliente y cifras inventados para el ejemplo. Pasa la compuerta de entrada: OK; secciones omitidas por campos opcionales ausentes: 3.

{
  "cliente": "Cliente de ejemplo S.A.",
  "periodo": {
    "anio": 2026,
    "mes": 8
  },
  "moneda": "MXN",
  "objetivos": "Bajar el costo por lead de pauta y sostener el tráfico orgánico durante la temporada baja.",
  "acciones_del_mes": "Rehicimos las tres landings de captación y pausamos el conjunto de anuncios de remarketing amplio en Meta.",
  "google_ads": {
    "extraido_el": "2026-09-02",
    "metodo": "api",
    "costo": 48250.75,
    "impresiones": 412380,
    "clics": 9814,
    "conversiones": 236.5,
    "valor_conversiones": null
  },
  "meta_ads": {
    "extraido_el": "2026-09-03",
    "metodo": "api",
    "ventana_atribucion": "7d_click,1d_view",
    "inversion": 31900.2,
    "impresiones": 1284500,
    "clics": 15320,
    "alcance": 402110,
    "frecuencia": 3.19,
    "resultados": 412,
    "tipo_resultado": "lead"
  },
  "ga4": {
    "extraido_el": "2026-09-02",
    "metodo": "api",
    "sesiones": 58420,
    "usuarios_activos": 44190,
    "eventos_clave": 1385,
    "tasa_interaccion": 0.6132,
    "sesiones_por_canal": null
  },
  "gsc": {
    "extraido_el": "2026-09-02",
    "metodo": "api",
    "clics": 21870,
    "impresiones": 1093500,
    "ctr": 0.02,
    "posicion_media": 14.6,
    "consultas_top": null
  },
  "mes_anterior": {
    "google_ads": {
      "costo": 45100.4,
      "impresiones": 398200,
      "clics": 9120,
      "conversiones": 201
    },
    "meta_ads": {
      "inversion": 33410.9,
      "impresiones": 1310200,
      "clics": 14890,
      "resultados": 355
    },
    "ga4": {
      "sesiones": 60120,
      "usuarios_activos": 45510,
      "eventos_clave": 1412
    },
    "gsc": {
      "clics": 22310,
      "impresiones": 1080900
    }
  }
}

La compuerta de cifras, especificada

El modelo no calcula, no transcribe de pantallas ni completa huecos: recibe una tabla ya validada y solo redacta sobre ella. Toda cifra del texto tiene que existir en la tabla.

Antes de que el modelo vea nada (7 validaciones)

  1. Cada campo obligatorio existe y tiene el tipo declarado (entero, decimal, moneda, fracción, texto, fecha).
  2. Cada fuente trae fecha de extracción, método «api» y, en Meta Ads, la ventana de atribución usada.
  3. Las fracciones están entre 0 y 1; los enteros y los importes no son negativos; los importes vienen en la moneda declarada (Google Ads ya dividido por 1.000.000).
  4. Los derivados se recalculan en código y, si la API también los devuelve (ctr, average_cpc), se comparan: una discrepancia mayor que la tolerancia detiene la corrida como bug de extracción.
  5. Las variaciones contra el mes anterior solo se calculan cuando el mes anterior existe en el registro; si no existe, la columna dice SIN DATO y no se pide al modelo que la estime.
  6. Fecha de extracción dentro de la ventana permitida (≥ día 2 o 3 del mes siguiente, ≤ 7 días antes de la corrida).
  7. Ninguna dimensión demográfica en el pedido a GA4 (evita filas retenidas por umbral) y dataState final en Search Console.

Después de que el modelo redacta (6 validaciones)

  1. Se extrae cada número del texto generado (con separadores de miles y decimales en español o inglés, con o sin símbolo de porcentaje o de moneda).
  2. Cada número se busca en la tabla final (entrada + derivados + metadatos del periodo) con la tolerancia declarada; el signo se ignora en la comparación y se verifica aparte con el sentido de la frase.
  3. Si alguna cifra no aparece en la tabla, el borrador se rechaza y se regenera una vez con la lista de cifras huérfanas en el prompt; a la segunda falla se escala a una persona.
  4. El texto no puede contener las palabras «aproximadamente», «alrededor de», «estimamos» ni «cerca de» delante de una cifra: si la tabla tiene el número, se escribe el número.
  5. Las secciones marcadas SIN DATO en la tabla tienen que decir «sin dato este mes» en el texto; una sección redactada sobre un campo SIN DATO se rechaza.
  6. Se registran por corrida: cifras verificadas, cifras rechazadas, reintentos, tiempo de máquina y quién aprobó.

Tolerancias y reintentos

Una cifra del texto coincide con una de la tabla si la diferencia absoluta es ≤ 0.05 o la relativa ≤ 0.1 %; para valores de la tabla menores que uno (tasas como fracción) rige solo la relativa. Reintentos antes de escalar a una persona: 1. Los tres valores son criterio propio, no salen de ninguna fuente; están listados más abajo con los demás supuestos nuestros para que los ajustes.

Qué pasa si falta un dato

Regla del campoQué hace la compuerta
bloqueaNo se genera el reporte; se avisa al analista con el campo faltante.
sin-datoLa sección se redacta diciendo «sin dato este mes» y se explica por qué (acceso, cambio de API, campaña pausada). El modelo no puede rellenarla.
omiteLa sección desaparece del reporte y el anexo lo declara.

Probá la compuerta con la tabla de ejemplo

El texto de abajo es una narrativa que pasa: sus 8 cifras están en la tabla del ejemplo (entrada + derivados + variaciones). Editalo, cambiá un número o cargá el ejemplo que no pasa (2 cifras huérfanas y 1 muletilla) y verificá. Corre en tu navegador con la misma función que va en el JSON.

Tabla de referencia: la entrada de ejemplo de arriba más los derivados (inversión total 80150.95, CPA de Google Ads 204.02, variación de conversiones 17.7 %, entre otros).

El prompt de narrativa, en español

No contiene ningún número: todas las cifras entran por {{tabla}}, ya formateadas por el código. Variables:

  • {{cliente}}: Nombre del cliente tal como figura en la configuración.
  • {{periodo}}: Mes y año en palabras (p. ej. «agosto de este año»), generados por código.
  • {{tabla}}: La tabla final validada, en JSON, con cada cifra ya formateada como debe aparecer (separadores, decimales, moneda).
  • {{anomalias}}: Lista de hechos anómalos marcados por el código, con campo, valor y umbral.
  • {{objetivos}}: Objetivos del trimestre acordados con el cliente, o SIN DATO.
  • {{acciones_del_mes}}: Texto del account manager sobre qué hizo la agencia, o SIN DATO.
  • {{tono}}: Guía de tono del cliente (tratamiento, palabras prohibidas, nivel técnico).
  • {{secciones_sin_dato}}: Secciones que la compuerta marcó SIN DATO u omitió.
Sos el analista de una agencia de marketing que redacta el reporte mensual de {{cliente}} correspondiente a {{periodo}}. Escribís en español neutro, para el dueño o el gerente de marketing del cliente.

REGLA CENTRAL. Solo podés usar las cifras que figuran en la tabla de abajo, escritas exactamente como figuran ahí (mismos separadores, mismos decimales, misma moneda). No calculés nada: ni sumas, ni promedios, ni porcentajes, ni redondeos. No completés lo que falta. Si una sección figura en {{secciones_sin_dato}}, escribí «sin dato este mes» y el motivo que indica la tabla, sin estimar.

PROHIBIDO. Escribir «aproximadamente», «alrededor de», «cerca de» o «estimamos» delante de una cifra. Prometer resultados futuros. Recomendar aumentar o bajar presupuesto salvo que {{objetivos}} lo mencione como opción. Inventar causas: toda explicación de una anomalía se escribe como hipótesis («una hipótesis es que…») para que el account manager la confirme o la reemplace.

ESTRUCTURA. Ocho secciones, en este orden y con estos títulos: Resumen ejecutivo; Pauta: Google Ads; Pauta: Meta Ads; Orgánico: Search Console y Google Analytics; Anomalías y explicación; Qué hicimos este mes; Próximos pasos; Anexo: cifras y fuentes.

- Resumen ejecutivo: tres frases como máximo, cada una con una cifra y su variación respecto del mes anterior si la tabla la trae.
- Secciones de pauta y orgánico: primero las cifras de la tabla en el orden en que aparecen; después una lectura de dos frases; después una recomendación como máximo, marcada como «propuesta para revisar».
- Meta Ads: al pie de la sección, escribí la ventana de atribución que figura en la tabla y que la inversión es la estimada por la plataforma.
- Anomalías: una por párrafo, tomadas de {{anomalias}}; primero el hecho con su cifra, después la hipótesis.
- Qué hicimos este mes: transcribí {{acciones_del_mes}} corrigiendo solo ortografía.
- Próximos pasos: entre dos y cuatro puntos coherentes con {{objetivos}}.
- Anexo: no lo redactés; escribí «[el anexo lo genera el sistema]».

TONO. {{tono}}. Frases cortas. Sin adjetivos de entusiasmo. Sin signos de exclamación.

TABLA (única fuente de cifras):
{{tabla}}

ANOMALÍAS MARCADAS POR EL SISTEMA:
{{anomalias}}

Cuando termines, releé el texto y borrá cualquier número que no puedas señalar en la tabla.

Estructura del reporte que recibe el cliente

#SecciónContenidoCifras
1Resumen ejecutivoTres frases: qué pasó con la inversión total, con el resultado principal y con el orgánico, cada una con su cifra y su variación.inversion_total, resultados por plataforma, variaciones
2Pauta: Google AdsInversión, clics, CTR, CPC, conversiones y CPA con variación mensual; una lectura de dos frases; una recomendación como máximo, marcada como propuesta.google_ads.*
3Pauta: Meta AdsInversión estimada, alcance, frecuencia, clics, resultados y costo por resultado, con la ventana de atribución escrita al pie de la sección.meta_ads.*
4Orgánico: Search Console y Google AnalyticsClics e impresiones orgánicas, CTR, posición media, sesiones, usuarios activos y eventos clave; consultas principales si el cliente las pidió.gsc.*, ga4.*
5Anomalías y explicaciónLas que marcó el código con sus umbrales; el modelo redacta el hecho y propone hipótesis etiquetadas como hipótesis; el account manager confirma o reemplaza.anomalias[]
6Qué hicimos este mesTexto del account manager, transcrito sin cambios de fondo.acciones_del_mes
7Próximos pasosBorrador de dos a cuatro puntos coherentes con los objetivos del trimestre; nada de presupuesto sin que el account manager lo haya marcado como opción.objetivos
8Anexo: cifras y fuentesLa tabla completa, la fecha de extracción por fuente, la ventana de atribución, la moneda y la nota de que las cifras de Meta pueden revisarse hasta 28 días después.todas

Checklist anti-alucinación (12 puntos verificables)

Los primeros los verifica el código y deja el resultado en el registro de la corrida; los últimos los verifica el account manager antes de firmar. Están pensados para que un reporte con una cifra inventada no pueda salir aunque todos tengan prisa.

  1. Cada cifra del texto se encuentra en la tabla final con la tolerancia declarada (lo verifica el código; el resultado queda en el registro). (verifica: código)
  2. Ningún número entró por captura de pantalla, copia manual o memoria: todos los campos tienen fecha de extracción y método «api». (verifica: código)
  3. Los importes de Google Ads fueron divididos por un millón antes de la tabla y la moneda coincide con la de la cuenta. (verifica: código)
  4. Las variaciones porcentuales las calculó el código contra la corrida anterior guardada, no el modelo contra un número recordado. (verifica: código)
  5. La ventana de atribución de Meta figura al pie de su sección y es la misma que en la configuración del cliente. (verifica: código + persona)
  6. Las cifras de Meta se extrajeron después del segundo día del mes siguiente y el anexo avisa que pueden revisarse durante veintiocho días. (verifica: código)
  7. Ninguna sección redacta sobre un campo marcado SIN DATO; las secciones omitidas están declaradas en el anexo. (verifica: código)
  8. No aparece «aproximadamente», «alrededor de», «cerca de» ni «estimamos» delante de una cifra. (verifica: código)
  9. Cada anomalía del texto existe en la lista que marcó el código, y cada explicación está escrita como hipótesis. (verifica: persona)
  10. No hay promesas de resultado ni recomendaciones de presupuesto que el account manager no haya habilitado. (verifica: persona)
  11. El texto de «Qué hicimos este mes» es el del account manager, no una reconstrucción del modelo. (verifica: persona)
  12. El reporte lo aprueba y lo envía una persona con su nombre; el registro de la corrida guarda quién, cuándo y qué editó. (verifica: persona)

Lo que es criterio propio

Estos valores no salen de ninguna fuente externa. Son decisiones de diseño nuestras, publicadas como tales para que las ajustes a tu agencia. El resto de la plantilla (nombres de campos, tipos, comportamiento de las APIs) está citado con documentación oficial abierta el 2026-09-17.
  • tolerancia: Una cifra del texto coincide con una de la tabla si la diferencia absoluta es ≤ 0,05 o la relativa ≤ 0,1 %. Para valores de la tabla menores que uno (tasas como fracción) rige solo la relativa. Permite el redondeo a un decimal que pide el prompt y rechaza «unos 4.300» cuando la tabla dice 4.320,45.
  • reintentos: Ante una cifra no encontrada el borrador se regenera una vez con el error señalado; a la segunda falla se escala al analista. Más reintentos gastan tokens sin mejorar el texto.
  • dia_extraccion: Meta Ads se extrae desde el día 3 del mes siguiente porque sus métricas «pueden seguir actualizándose un par de días» después de terminar un anuncio; las demás fuentes, desde el día 2. El día exacto es criterio nuestro; el motivo está en la documentación citada.
  • antiguedad: Una extracción de más de 7 días respecto de la corrida bloquea el reporte: se vuelve a extraer. El plazo es criterio nuestro.
  • anomalias: Los umbrales de anomalía por defecto (±30 % mensual en costo por resultado, canal que cae a cero, CTR que se duplica o se reduce a la mitad) son puntos de partida para que el account manager los ajuste por cliente; no salen de ningún estudio.
  • longitud: Resumen ejecutivo de tres frases como máximo y una recomendación por canal como máximo: lo que el account manager puede leer y firmar en diez minutos. Es criterio editorial nuestro.

Lo que dicen las APIs, con fecha

Lo que la plantilla asume sobre cada plataforma sale de estas páginas, abiertas el 2026-09-17. Si una cambia, cambia la plantilla y sube la versión.

PlataformaDocumentoCita literalQué se toma
GA4Google Analytics Data API · Quotas
verificado 2026-09-17
«All daily quotas are refreshed at midnight Pacific Standard Time. All hourly quotas are refreshed within an hour but not necessarily on the whole hour boundaries.»Página actualizada el 16-09-2026 según su pie. Propiedades estándar: 200.000 tokens por propiedad por día, 40.000 por hora, 10 solicitudes concurrentes por propiedad, 10 errores de servidor por proyecto y propiedad por hora (Analytics 360: 2.000.000, 400.000, 50 y 50). El consumo de tokens depende de la complejidad del pedido (filas, dimensiones, filtros, rango de fechas, cardinalidad); el parámetro returnPropertyQuota devuelve el consumo real. Un reporte mensual por cliente consume una fracción mínima de la cuota diaria.
GA4Google Analytics Data API · API Dimensions & Metrics
verificado 2026-09-17
«sessions — The number of sessions that began on your site or app (event triggered: session_start).»Página actualizada el 16-09-2026. Nombres de API usados por la plantilla: métricas sessions, activeUsers («The number of distinct users who visited your site or app»), keyEvents («The count of key events. Marking an event as a key event affects reports from time of creation. It doesn't change historic data»), engagementRate («returned as a fraction; for example, 0.7239 means 72.39% of sessions were engaged sessions»), screenPageViews; dimensiones date (YYYYMMDD) y sessionDefaultChannelGroup (enumeración con Direct, Organic Search, Paid Social, Organic Social, Email, Referral, Paid Search…). Las tasas llegan como fracción: el código las convierte a porcentaje, el modelo no.
GA4Ayuda de Google Analytics · Data thresholds
verificado 2026-09-17
«Data may be withheld when viewing a report or exploration or making an API call that includes demographic data or audiences defined using demographic data.»Los umbrales existen para que nadie infiera la identidad de usuarios individuales; son del sistema y no se pueden ajustar. También aplican a filas con consultas de búsqueda cuando no hay suficientes usuarios. Consecuencia para la plantilla: los campos de GA4 se piden sin dimensiones demográficas ni de intereses, así ninguna fila del reporte mensual queda retenida por umbral; si un cliente exige cortes demográficos, ese corte se marca como «puede faltar por umbral» y nunca se completa a mano.
Google AdsGoogle Ads API · Reporting overview
verificado 2026-09-17
«This guide describes the steps necessary to create and submit a query to the Google Ads API to get back data.»Página actualizada el 10-09-2026. Los datos de rendimiento se obtienen con GoogleAdsService.Search o SearchStream mediante consultas en Google Ads Query Language (GAQL); soporta segmentación (segments.date), filas con métricas en cero y paginación o streaming para volúmenes grandes. La referencia de recursos consultables está en la versión v25.
Google AdsGoogle Ads API · Reports reference v25 · metrics
verificado 2026-09-17
«metrics.cost_micros — The sum of your cost-per-click (CPC) and cost-per-thousand impressions (CPM) costs during this period. Data Type INT64.»Página actualizada el 10-09-2026. Tipos de dato de los campos que usa la plantilla: metrics.clicks INT64 («The number of clicks»), metrics.impressions INT64 («Count of how often your ad has appeared on a search results page or website on the Google Network»), metrics.conversions DOUBLE («The number of conversions. This only includes conversion actions which include_in_conversions_metric attribute is set to true»), metrics.conversions_value DOUBLE, metrics.ctr DOUBLE («Clicks divided by Impressions»), metrics.average_cpc DOUBLE («The total cost of all clicks divided by the total number of clicks received»). Las conversiones son DOUBLE porque la atribución puede repartir fracciones: el reporte las muestra con un decimal, no las redondea a entero sin decirlo.
Google AdsGoogle Ads API · Reports reference v25 · campaign_budget (definición de «micros»)
verificado 2026-09-17
«Amount is specified in micros in the account's local currency. One million micros is equivalent to one currency unit.»Página actualizada el 10-09-2026. Todo importe de la API llega en micros de la moneda de la cuenta: el código divide por 1.000.000 antes de armar la tabla. Es una conversión determinista que nunca hace el modelo.
Google AdsGoogle Ads API · Access levels and permissible use
verificado 2026-09-17
«15,000 operations / day for both test and production accounts.»Página actualizada el 11-09-2026. Niveles: cuenta de prueba (15.000 operaciones/día, solo cuentas test), Basic (15.000 operaciones/día en test y producción; requiere verificación de marca) y Standard (operaciones ilimitadas por día; requiere auditoría manual). Todas quedan sujetas a los límites de tasa del sistema. Para reportes mensuales de decenas de clientes, Basic alcanza con margen.
Meta AdsMeta Marketing API · Insights API (overview)
verificado 2026-09-17
«By default, GET requests will return basic metrics for the ad object, typically from the past 30 days.»Los insights se leen de los edges /{ad-account-id}/insights, /{campaign-id}/insights, /{ad-set-id}/insights y /{ad-id}/insights. El pedido se ajusta con parámetros (rangos de tiempo, ventanas de atribución), fields (las métricas) y breakdowns. Ejemplo oficial con date_preset=last_7d. Consecuencia: el periodo nunca se deja por defecto; la plantilla exige time_range explícito o date_preset=last_month.
Meta AdsMeta Marketing API · Ad Account Insights (referencia de campos y parámetros)
verificado 2026-09-17
«spend — The estimated total amount of money you've spent on your campaign, ad set or ad during its schedule.»Definiciones oficiales de los campos: impressions («The number of times your ads were on screen»), clicks («The number of clicks on your ads»), ctr («The percentage of times Accounts Center accounts saw your ad and performed a click (all)»), cpc («The average cost for each click (all)»), cpm («The average cost for 1,000 impressions»), actions («The total number of actions Accounts Center accounts took that are attributed to your ads»), reach, frequency. Parámetros: time_range con since/until en YYYY-MM-DD; date_preset con valores como last_month, last_30d, this_month; level con ad, adset, campaign o account; time_increment con monthly, all_days o un entero de 1 a 90 días; action_attribution_windows con valores como 7d_click, 1d_view, 28d_click o default. La inversión es «estimated»: el reporte la nombra como inversión estimada según la plataforma.
Meta AdsMeta Marketing API · Insights API · Limits and best practices
verificado 2026-09-17
«Insights refresh every 15 minutes and do not change after 28 days of being reported.»«Insights metrics may continue to update for a couple of days after an ad has completed»: por eso la plantilla exige extraer Meta no antes del tercer día del mes siguiente y registrar la fecha de extracción junto a cada cifra. Límite de carga fijo por aplicación por segundo, con el encabezado x-fb-ads-insights-throttle para monitorear el uso; recomendación de probar llamadas sincrónicas y pasar a asincrónicas cuando hay timeout. Desde el 10-06-2025 las consultas estándar con breakdowns no devuelven reach para datos de más de 13 meses.
Search ConsoleSearch Console API · Search Analytics: query
verificado 2026-09-17
«rowLimit — [Optional; Valid range is 1–25,000; Default is 1,000] The maximum number of rows to return. To page through results, use the startRow offset.»Página actualizada el 11-08-2026. Fechas en formato YYYY-MM-DD en hora del Pacífico; dimensiones country, device, page, query, searchAppearance, date y hour; type web (por defecto), image, video, news, discover, googleNews; dataState «final» (o ausente) devuelve solo datos finalizados, «all» incluye datos frescos aún en proceso y «hourly_all» el corte por hora. La plantilla usa dataState final: los datos frescos pueden estar incompletos y cambiar.
Search ConsoleSearch Console API · Usage limits
verificado 2026-09-17
«Per-site quota: 1,200 QPM. Per-user quota: 1,200 QPM.»Search Analytics: 1.200 consultas por minuto por sitio y por usuario; por proyecto, 30.000.000 por día y 40.000 por minuto. Inspección de URLs: 2.000 por día y 600 por minuto por sitio. Un reporte mensual son unas pocas consultas por cliente.

Lo que no citamos porque no lo pudimos verificar hoy: los meses de historial que conserva cada API (Search Console y Meta publican cifras que no volvimos a leer en la fecha de verificación, así que la plantilla no depende de ellas: el mes anterior sale de la corrida anterior guardada, no de volver a pedirlo).

Lo que esta plantilla no promete. Que el reporte se escriba solo: la firma del account manager es un paso del flujo, no un adorno. Ni que el ahorro sea de un porcentaje fijo: medí las horas por reporte una semana antes y un mes después. El diagnóstico te da una estimación por rol; el cronómetro te da el dato.

¿Cuántas horas de reportes tiene tu agencia hoy?

El diagnóstico gratuito lo estima por rol con supuestos públicos. Si reportes es el área con más horas, este es el harness por el que conviene empezar, y esta plantilla es su punto de partida.

Sin spam y sin secuencias automáticas: un humano lee cada pedido y responde en menos de 48 h hábiles.

Preguntas frecuentes

¿Qué descargo exactamente?

Dos archivos generados en tu navegador a partir de esta misma página: un Markdown (la plantilla legible: flujo, campos, compuerta, prompt, estructura del reporte, checklist, criterio propio y fuentes) y un JSON con los mismos datos estructurados para cargarlos en un harness (los 34 campos con tipo y origen en la API, la especificación de la compuerta con sus tolerancias, el prompt con sus variables, el flujo con quién firma). Versión 1.0, actualizada el 2026-09-17. No hay PDF ni correo: el archivo se arma en tu máquina.

¿Por qué tengo que dejar el email si el archivo se genera en mi navegador?

Porque queremos saber a qué agencias les sirve y poder escribirles a mano si cambia una API citada (Meta y Google las mueven varias veces al año). Guardamos tu email y la página desde la que pediste la plantilla; nada más. Sin secuencias automáticas: si te escribimos, lo hace una persona con nombre y apellido.

¿La compuerta de cifras depende de un modelo en particular?

No. La compuerta es código que corre antes y después del modelo: valida tipos y fechas de extracción, extrae cada número del texto generado y lo busca en la tabla con una tolerancia declarada. El prompt está escrito para cualquier modelo de lenguaje; lo que cambia entre modelos es cuántas veces rechaza la compuerta, y eso se mide.

¿Por qué el modelo no puede calcular las variaciones si son una resta y una división?

Porque no hay forma de auditar que lo hizo bien sin volver a calcularlas, y si vas a volver a calcularlas, que lo haga el código desde el principio. El modelo redacta; las variaciones, los costos por resultado y las participaciones salen de funciones con tests, contra la corrida anterior guardada, y entran a la tabla como una cifra más. Así el «17,7 % más que el mes pasado» del texto se verifica igual que cualquier otro número.

¿Qué pasa si Meta cambia las cifras después de que enviamos el reporte?

Puede pasar y está documentado: los insights «no cambian después de 28 días de reportados» y «pueden seguir actualizándose un par de días después de que un anuncio termina» (Meta Marketing API · Insights API · Limits and best practices, verificado el 2026-09-17). Por eso la plantilla extrae Meta desde el día 3 del mes siguiente, registra la fecha de extracción junto a cada cifra y el anexo del reporte avisa que las cifras de Meta pueden revisarse. Si el cliente vuelve a mirar el panel un mes después y ve otro número, el reporte ya explicó por qué.

¿Sirve con n8n o Make, o hace falta código?

Sirve. La extracción y la llamada al modelo son nodos estándar en cualquiera de los dos; la compuerta de entrada y la de cifras son un nodo de código (unas decenas de líneas, la lógica está descrita en la especificación y en el JSON). Lo que no conviene es saltearse la compuerta porque «la herramienta no la trae»: ninguna la trae.

¿Puedo usarla con mis clientes o bajo mi marca?

Sí: adaptá los campos, los umbrales y el tono a cada cliente y usala bajo tu marca. Si la republicás o la citás públicamente, mencioná la fuente. Lo que no recomendamos es cambiar la regla central: el modelo no toca los números.

¿Qué herramientas automatizan el informe mensual de clientes para una agencia?

Tres familias, con el detalle en la guía de reportes: SaaS de reportes con IA (AgencyAnalytics, Swydo, DashThis, Whatagraph, Reportei), el tablero gratuito de Looker Studio (Google) y un harness propio sobre el SDK de agentes y las APIs de GA4, Google Ads y Meta. La tabla de la guía compara el precio que cada proveedor publica (leído el 2026-10-19), por qué unidad cobra y si la IA viene incluida. Esta plantilla es el punto de partida de la tercera familia; con las dos primeras sirve igual como especificación de la compuerta de cifras, porque ninguna la trae.

¿En qué se diferencia de la guía de reportes automatizados?

La guía explica la arquitectura y por qué cada pieza existe. La plantilla es el artefacto: los campos con su nombre exacto en la API, la especificación de la compuerta con tolerancias, el prompt listo, el flujo con quién firma cada paso y el checklist. Leé la guía si vas a decidir; descargá la plantilla si vas a construir.