Dashboard de marketing: cómo crear uno propio sin depender de reportes manuales.
Este dashboard de marketing nació en misitioseo como una forma más práctica de consultar campañas de Meta Ads, guardar su historial y preparar actualizaciones automáticas sin depender de reportes manuales ni de un servidor tradicional.
Cloudflare Workers
Cloudflare D1
Marketing Analytics
Si trabajas con campañas de Meta Ads, seguramente conoces la rutina: entrar al administrador, cambiar el rango de fechas, revisar el gasto, comparar campañas y, cuando alguien pide un reporte, volver a exportar los datos.
El administrador de anuncios hace bien su trabajo, pero nosotros queríamos otra cosa: una vista propia, sencilla y con un histórico que pudiéramos consultar sin repetir el mismo proceso cada vez. También queríamos entender de dónde venía cada cifra, en lugar de confiar a ciegas en un indicador bonito.
Con esa idea empezamos misitioseo, un proyecto de dashboard de marketing digital construido con Meta Marketing API, Cloudflare Workers y D1. Aquí contamos cómo lo planteamos, qué resolvimos y qué sigue pendiente. Por seguridad, omitimos cualquier información de clientes o cuentas reales.
¿Qué es un dashboard de marketing y para qué sirve?
Un dashboard de marketing reúne en una sola pantalla las métricas que necesitas para seguir el desempeño de tus campañas: cuánto inviertes, cuántas personas ven los anuncios, cuántos clics recibes y qué resultados genera cada estrategia.
Su utilidad no está en mostrar veinte gráficas. Está en ayudarte a encontrar respuestas sin perder tiempo buscando datos en varios lugares.
¿Cuánto gastamos?
Inversión por campaña y período, con una moneda y fechas bien definidas.
¿Cómo vamos?
Impresiones, clics y tendencias que permiten comparar jornadas.
¿Qué conseguimos?
Resultados según el objetivo real de cada anuncio, sin llamar lead a cualquier acción.
Hay un detalle que suele pasar inadvertido: dos dashboards pueden mostrar números distintos y ambos parecer correctos. Si utilizan rangos de fechas, zonas horarias o definiciones de conversión diferentes, la comparación deja de tener sentido. Por eso empezamos por ordenar el dato antes de diseñar la pantalla.
¿Por qué construir un dashboard propio en lugar de contratar uno?
Hay herramientas de reporting excelentes, y para muchos equipos son la mejor opción. Las conectas, eliges una plantilla y en poco tiempo tienes un informe presentable. Desarrollar desde cero no siempre compensa.
En nuestro caso buscábamos más libertad para decidir qué almacenar, cómo interpretarlo y qué mostrar. También queríamos una base que después pudiera recibir información de otras plataformas.
| Aspecto | Herramienta comercial | Dashboard propio |
|---|---|---|
| Tiempo para empezar | Normalmente más corto | Hay que diseñar, programar y probar |
| Personalización | Depende de la plataforma | Podemos adaptar consultas e indicadores |
| Datos históricos | Según las condiciones del proveedor | Definimos qué conservar y durante cuánto tiempo |
| Mantenimiento | Principalmente lo gestiona el proveedor | Corre por nuestra cuenta |
| Costos | Por lo general, suscripción | Infraestructura más horas de desarrollo |
Así que no partimos de la idea de que lo propio siempre es mejor. Lo elegimos porque queríamos aprender de la integración y tener control sobre el siguiente paso.
La arquitectura: Meta Ads, Cloudflare Workers y D1
La primera decisión importante fue separar dos trabajos distintos: traer los datos y mostrarlos. Parece obvio, pero evita que cada visita al dashboard dispare una consulta completa a Meta.
Cuando toca actualizar, un Worker solicita las métricas a Meta y las guarda en D1. Cuando alguien abre la página, otro recorrido del mismo Worker consulta los datos almacenados. El usuario obtiene una vista ordenada sin esperar a que se descargue todo el histórico publicitario.
Una separación que también ayuda con la seguridad: el navegador no recibe el token de Meta. Las credenciales se guardan como secretos del Worker y el acceso al panel se controla con Cloudflare Access.
Elegimos Cloudflare porque combina ejecución serverless, una base de datos SQL y herramientas de control de acceso. Eso reduce la necesidad de administrar un servidor, aunque no elimina la responsabilidad de mantener el código y vigilar que las tareas funcionen.
Paso 1. Consultar campañas con Meta Marketing API
La Meta Marketing API nos permite consultar campañas y estadísticas por HTTP, siempre que tengamos los permisos correspondientes. En lugar de descargar archivos manualmente, la aplicación recibe los registros en formato JSON.
Separamos el trabajo en dos partes: un conector para conocer qué campañas existen y otro para consultar sus métricas por fecha. Esa división tiene una ventaja práctica: podemos actualizar estadísticas frecuentes sin volver a descargar todo el catálogo cada vez.
El tropiezo más fácil: llamar «leads» a todos los resultados
Al revisar las respuestas de la API encontramos algo que cualquier profesional de pauta debería tener presente. El campo de resultados cambia según el objetivo de la campaña. Una conversación iniciada, un formulario enviado y una compra no son el mismo evento.
Si sumáramos todas esas acciones bajo una sola etiqueta de «leads», obtendríamos una cifra aparentemente útil, pero difícil de defender. Por eso guardamos, cuando la respuesta lo permite, el número de resultados junto con su tipo de acción y una descripción legible.
Lo mismo ocurre con la zona horaria de la cuenta, la moneda y la atribución. Son detalles pequeños hasta que alguien compara el reporte con el administrador de anuncios y los totales no coinciden.
Paso 2. Guardar el histórico en Cloudflare D1
La segunda decisión fue dejar de depender de una consulta en vivo para cada pantalla. Para eso usamos Cloudflare D1, una base de datos SQL administrada basada en SQLite.
En vez de guardar un reporte enorme y difícil de actualizar, organizamos la información en tablas relacionadas:
| Tabla | Qué contiene | Por qué importa |
|---|---|---|
platform_accounts |
Referencia de las cuentas conectadas | Distinguir las fuentes |
campaigns |
Identificadores y datos de campañas | Relacionar las estadísticas |
campaign_metrics |
Métricas por campaña y día | Comparar períodos y recalcular indicadores |
sync_logs |
Estructura prevista para registrar ejecuciones | Facilitar una auditoría cuando se complete el registro automático |
¿Por qué guardar datos diarios?
Porque el número que vemos hoy puede cambiar mañana. Meta puede procesar resultados con retraso y ajustar lo que atribuye a una fecha determinada. Con registros diarios, podemos volver a consultar ese período y actualizarlo sin duplicar campañas.
Además, esa estructura permite calcular indicadores con sus definiciones correctas:
- CPC: inversión dividida entre clics del mismo período.
- CTR: clics divididos entre impresiones, multiplicado por 100, especificando el tipo de clic.
- Costo por resultado: inversión dividida entre resultados comparables, con el mismo criterio de atribución.
Hay un límite importante: si mezclamos campañas con resultados distintos, no conviene mostrar un único «costo por lead». El modelo de datos debe permitir distinguirlos antes de calcularlo.
Paso 3. Preparar una sincronización automática cada hora
Al principio ejecutábamos pruebas manuales. Eso fue útil para entender las respuestas de Meta, pero no servía como rutina diaria. El siguiente paso fue llevar el sincronizador a Cloudflare Workers.
La aplicación separa dos funciones: fetch(), que responde las solicitudes del dashboard, y scheduled(), que contiene el proceso de sincronización programada. Con Cron Triggers podemos pedir a Cloudflare que invoque esta segunda función periódicamente.
La expresión para ejecutarlo a cada hora en punto es:
0 * * * *
Los horarios de Cron se interpretan en UTC. Esto programa la tarea; no significa que las métricas de Meta cambien inmediatamente ni que sean datos en tiempo real.
¿Qué hace el sincronizador?
- Comprueba los datos de la cuenta, incluida su moneda y zona horaria.
- Solicita a Meta las métricas del día actual y el anterior.
- Recorre las páginas de resultados y comprueba que la descarga esté completa.
- Valida cantidades, fechas y tipos de resultado.
- Inserta los registros nuevos y actualiza los ya existentes en D1.
- Deja mensajes en los logs para revisar si la ejecución salió bien o falló.
En qué punto estamos: comprobamos el sincronizador en desarrollo y publicamos su código junto con el dashboard. La ejecución programada en producción todavía debe validarse a través de los registros de Cloudflare y los cambios en D1. No la damos por confirmada solo por haber configurado el horario.
También aprendimos que consultar ayer y hoy no resuelve todas las conversiones tardías. Para un histórico más sólido necesitaremos volver sobre períodos anteriores, con una ventana de reconciliación adaptada a la atribución utilizada.
Paso 4. Darle forma al dashboard y protegerlo
Con los datos en D1 ya podíamos trabajar en lo que verá el usuario. En vez de llenar la pantalla de elementos, empezamos por las preguntas que realmente surgen cuando revisas campañas: cuánto gasté, qué se movió y dónde necesito mirar con más detalle dentro del dashboard de marketing.
La primera versión incluye indicadores generales, filtros de fechas y una tabla para comparar campañas. Las consultas se realizan a través del Worker; la interfaz no necesita conocer el token de Meta ni acceder directamente a la cuenta publicitaria.
La seguridad también forma parte del dashboard
Es fácil concentrarse en el diseño y dejar los permisos para después. Preferimos hacerlo al revés: primero decidimos quién puede entrar y dónde deben quedarse las credenciales.
- Cloudflare Access restringe la entrada a usuarios autorizados.
- Secrets del Worker guardan los datos sensibles necesarios para consultar la API.
- Backend separado del navegador evita exponer credenciales al cargar la página.
- Sin un botón público de sincronización reducimos el riesgo de que cualquiera active consultas privilegiadas.
Estas medidas no sustituyen la revisión de permisos, la rotación de secretos o el monitoreo. Son el punto de partida para no convertir un tablero de marketing en una puerta de entrada a información sensible.
¿Cuánto cuesta un dashboard de marketing con Cloudflare?
Una de las razones para probar esta arquitectura fue la posibilidad de arrancar con los niveles gratuitos de Cloudflare. Para un proyecto pequeño pueden ser suficientes, siempre que el consumo se mantenga dentro de las cuotas aplicables.
Pero sería engañoso prometer un dashboard «gratis para siempre». Hay límites de solicitudes, lecturas y escrituras, almacenamiento y tiempo de ejecución; además, alguien tiene que desarrollar, revisar y mantener la integración.
La forma correcta de estimarlo es calcular cuántas campañas consultaremos, cuántas veces al día se actualizarán y cuánto histórico queremos conservar. Después, contrastar esas necesidades con los límites vigentes de D1 y los límites de Workers.
En pocas palabras: la infraestructura puede resultar económica, pero el proyecto no está libre de costos ni de responsabilidades técnicas.
Lo que aprendimos al construir este dashboard de marketing
La parte visual fue la más agradecida: cambias unos estilos y enseguida ves el resultado. Los retos de verdad estuvieron detrás de la pantalla. Ahí es donde un dashboard de marketing deja de ser una maqueta bonita y se convierte en una herramienta útil.
- Los resultados necesitan contexto. Antes de sumar conversiones hay que revisar su definición y atribución.
- La zona horaria importa. Una diferencia de fechas puede provocar discrepancias difíciles de explicar si no se revisa desde el principio.
- Publicar no es lo mismo que verificar. Un Worker puede responder correctamente a la web y tener problemas al ejecutar tareas programadas.
- Los permisos se prueban de verdad. Tener acceso al panel de Cloudflare no garantiza que todas las operaciones estén autorizadas desde la línea de comandos.
- Los históricos requieren mantenimiento. Las correcciones tardías y las campañas nuevas necesitan procesos adicionales.
¿Qué sigue? Primero, comprobar de forma consistente las ejecuciones horarias y registrar sus resultados. Después, automatizar el descubrimiento de campañas nuevas y mejorar la reconciliación histórica. Más adelante podríamos incorporar conectores para otras plataformas, pero todavía no los presentamos como parte funcional del sistema.
Con qué nos quedamos: construir un dashboard de marketing propio vale la pena cuando sabes qué problema quieres resolver. No empezamos necesitando una plataforma gigantesca; empezamos queriendo dejar de repetir reportes y entender mejor nuestros datos. Esa sigue siendo la brújula del proyecto.
Preguntas frecuentes sobre dashboards de marketing
¿Puedo crear un dashboard de Meta Ads sin contratar un servicio de reportes?
Sí. La API de Meta permite recuperar información publicitaria con los permisos adecuados. Necesitarás una aplicación para procesarla, un lugar donde almacenarla y una interfaz para consultarla. También tendrás que encargarte del mantenimiento.
¿Para qué sirve Cloudflare Workers en este proyecto?
Workers ejecuta el código que consulta Meta, procesa los registros y responde al dashboard. Así evitamos depender de un servidor tradicional para esas tareas.
¿Qué papel tiene Cloudflare D1?
D1 almacena campañas y métricas en tablas SQL. Gracias a eso, el panel puede consultar información ya guardada y trabajar con períodos históricos sin pedirle todo nuevamente a Meta.
¿Cada cuánto se pueden actualizar los datos de Meta Ads?
La frecuencia depende de los límites de la API y la infraestructura. En este caso diseñamos una sincronización horaria. Es una periodicidad de consulta, no una garantía de datos en tiempo real.
¿Por qué no debo sumar todos los resultados como leads?
Porque Meta puede reportar mensajes, formularios, compras u otras acciones según el objetivo de cada campaña. Para calcular un costo por lead confiable primero hay que identificar qué eventos son realmente leads.
¿Es seguro conectar la cuenta publicitaria a un dashboard propio?
Puede serlo si gestionas correctamente permisos, autenticación, secretos y registros de actividad. En nuestra arquitectura, el token de Meta permanece en el backend y el acceso al panel está restringido.
¿Podría agregar Google Ads, TikTok Ads o inteligencia artificial?
La arquitectura permite planear nuevas integraciones, pero cada plataforma tiene métricas y reglas distintas. Las funciones de IA también requieren datos bien definidos y validación de sus conclusiones. Son posibilidades futuras, no características que afirmemos tener listas.
Lecturas relacionadas
Si quieres seguir profundizando después de crear este dashboard de marketing, estas lecturas internas pueden ayudarte a conectar la parte técnica con la estrategia de crecimiento:
- SEO técnico en WordPress: checklist para mejorar rendimiento, indexación y rastreo.
- Cloudflare Workers: qué es, para qué sirve y cuándo conviene usarlo.
- Meta Ads: cómo ordenar campañas, métricas y resultados sin depender de reportes manuales.
- Servicios de SEO para convertir más tráfico en oportunidades reales.
Además, si tu objetivo es crear un dashboard de marketing que también ayude al equipo comercial, conviene definir desde el inicio qué métricas importan, qué fechas se comparan y qué resultados sí son comparables entre campañas.
Documentación que utilizamos como referencia
Si quieres profundizar o comprobar cómo funcionan los servicios, estas son las fuentes técnicas oficiales: