¿De verdad sabes cómo está rindiendo tu campaña de marketing?
Gastas 200 € en una campaña de LinkedIn. El panel del anunciante dice 4.300 impresiones, 87 clics, 2,30 € de CPC. ¿Buena campaña? ¿Mala? No tienes ni idea — y el panel no puede decírtelo, porque se detiene en el clic. Aquí va cómo medir el rendimiento de una campaña de marketing de punta a punta con un embudo y cinco eventos personalizados, para que la próxima pregunta sobre una campaña tenga respuesta de verdad.
Por qué las impresiones y los clics no te dicen si la campaña funcionó
Las plataformas de anuncios optimizan por las métricas que pueden ver. Ven impresiones, clics y (a veces) un pixel disparándose en una página de gracias. Lo que no pueden ver es si los 87 que hicieron clic se convirtieron en usuarios — y mucho menos en usuarios de pago.
Ese hueco es todo el juego. Una campaña con 87 clics y 4 conversiones a pago es radicalmente distinta de una con 870 clics y 0 conversiones a pago. El panel del anunciante rankeará la segunda mejor en todas las métricas que te enseña. Y será la que esté quemando tu runway en silencio.
La solución no es un stack de analítica más grande. La solución es extender el embudo un paso a la vez, en tu propio dominio, hasta que alcance la acción que paga las facturas.
El embudo de la campaña: cinco pasos, cinco eventos
Pongamos a Inboxly, la pequeña SaaS que llevamos usando como ejemplo. Esta semana ha lanzado una nueva feature de "bandeja compartida" con una campaña de LinkedIn ads de 200 €. El embudo que nos importa se ve así:
clic en el anuncio → visita a la landing → signup iniciado → signup completado → upgrade a pago
Cada flecha es un drop-off potencial. Cada paso es un evento personalizado, disparado en el momento en que ocurre. El panel del anunciante es dueño de la primera flecha. Nosotros somos dueños de las otras cuatro — y las otras cuatro son donde la campaña triunfa o fracasa de verdad.
Paso 1 — Etiqueta el clic en tu propio dominio
No te fíes solo de los UTMs de la plataforma; desaparecen en la segunda navegación. En su lugar, enruta el anuncio por un endpoint fino en tu dominio que estampa la campaña y reenvía:
// /go/li-team-inbox → Cloudflare Worker
export async function handleAdClick(req) {
return Response.redirect(
'https://inboxly.app/team-inbox?c=li_team_inbox',
302
);
}
El parámetro c=li_team_inbox es la etiqueta de campaña — corta, en minúsculas, con prefijo de canal (li_ para LinkedIn, gads_ para Google, nl_ para newsletter). Un prefijo por canal mantiene la lista de eventos ordenada cuando corres varias campañas en paralelo.
Paso 2 — Dispara campaign_click en la landing
En la landing, lee la etiqueta de campaña y dispara un evento por campaña:
const c = new URLSearchParams(location.search).get('c');
if (c) {
window.logly('event', 'campaign_click_' + c);
}
Cada campaña recibe su propio nombre de evento (campaign_click_li_team_inbox). En el panel de eventos de Logly se agrupan de forma natural — alfabetizados por prefijo — así puedes comparar LinkedIn vs Google vs newsletter de un vistazo.
Paso 3 — signup_started y signup_completed
Estos dos son la pareja workhorse del post de eventos. Dispara signup_started cuando el formulario se abre o se enfoca, signup_completed cuando la API confirma la creación de la cuenta. La ratio entre ambos es el drop-off del formulario — la misma ratio para cada campaña, pero el conteo absoluto por campaña es lo que te dice si el canal de verdad alimenta el formulario.
// cuando el formulario se abre o se enfoca por primera vez
window.logly('event', 'signup_started');
// después de que la API confirme la creación de la cuenta
window.logly('event', 'signup_completed');
Paso 4 — paid_upgraded
La única métrica que paga tus facturas. Dispárala server-side desde tu webhook de facturación (Stripe, Paddle, LemonSqueezy) para que un reembolso o un primer cargo fallido no la infle:
// handler del webhook de Stripe, en invoice.payment_succeeded (solo primera factura)
if (invoice.billing_reason === 'subscription_create') {
await sendLoglyEvent('paid_upgraded');
}
Los eventos server-side usan la misma forma window.logly('event', name) vía una llamada HTTP minúscula desde tu Worker. El payload completo está en los docs.
Cómo leer el embudo de la campaña con honestidad
Una semana después de lanzar la campaña de LinkedIn, abres la vista de funnel en Logly y apilas los cinco eventos para la etiqueta li_team_inbox. Obtienes algo como esto:
campaign_click_li_team_inbox 87
landing_team_inbox_viewed 82 (94%)
signup_started 19 (23%)
signup_completed 11 (58%)
paid_upgraded 3 (27%)
El número de abajo son 3 usuarios de pago de 200 € — 66 € por usuario. Si eso es bueno depende de tu LTV; para una SaaS tamaño Inboxly a 19 €/mes con vida media de 14 meses, es rentable. Pero el número de abajo es una vanity metric por sí solo. La lectura interesante vive en los deltas:
- 87 → 82 (94%) — la página carga bien. No la optimices.
- 82 → 19 (23%) — tres cuartas partes de los clickers rebotan sin intentar registrarse. La landing es la fuga. Copy del hero o sitio del CTA, no el anuncio.
- 19 → 11 (58%) — drop-off del formulario es normal. Aceptable.
- 11 → 3 (27%) — solo un cuarto de los signups paga. Esto es la experiencia de trial, no la campaña. La campaña entregó intención cualificada; el onboarding es lo que tiene fuga.
Date cuenta de que ninguna de esas cuatro observaciones es "gasta más en LinkedIn" ni "gasta menos en LinkedIn". El anuncio hizo su trabajo — trajo 87 personas razonablemente cualificadas a una página sobre la nueva feature. Las fugas están aguas abajo, en superficies que controlas y puedes cambiar sin darle más dinero a LinkedIn.
Trata la etiqueta de campaña como la única clave de join. li_team_inbox aparece en la URL, en el nombre del evento y (si quieres) en la fila de la base de datos del signup. En cualquier sitio donde necesites preguntar "¿qué hizo realmente esta campaña?", tienes una sola string que buscar.
Corriendo varias campañas en paralelo
La misma semana, Inboxly también mandó una newsletter (nl_team_inbox) y publicó orgánicamente en LinkedIn con un enlace etiquetado (li_organic_team_inbox). A los 7 días la comparación se ve así:
clic signup_completed paid_upgraded
li_team_inbox (paid ads) 87 11 3
nl_team_inbox (newsletter) 142 38 12
li_organic_team_inbox 54 7 2
La newsletter gana en todas las métricas, con coste marginal cero. LinkedIn de pago produce tres clientes por 200 €. LinkedIn orgánico iguala la ratio de conversión del de pago, pero a un quinto del alcance. Las acciones se escriben solas: sigue haciendo newsletter para lanzamientos, sigue publicando orgánicamente, y o bien mata el canal de LinkedIn de pago o cambia la creatividad — lo que absolutamente no deberías hacer es lo que sugeriría el panel del anunciante, que sería "sube el presupuesto en la campaña con menor CPC".
Qué hacer con esto cada viernes
La parte de disciplina es la misma que en atribución de outreach: bloquea quince minutos el viernes por la mañana para mirar el embudo de cada campaña etiquetada en las dos últimas semanas. Tres decisiones por campaña:
- Matar — conversiones de fondo de embudo ≤ a tu baseline orgánica. Para el gasto, archiva la creatividad, sigue adelante.
- Iterar — top of funnel sano (clics y landing views), bottom con fugas. La campaña está bien; arregla la landing o la experiencia de trial.
- Escalar — el embudo entero convierte igual o mejor que tu media combinada. Dobla el presupuesto en la misma creatividad; no cambies nada más todavía.
La razón por la que la mayoría de presupuestos de marketing se evaporan en silencio es que nadie toma nunca ninguna de esas tres decisiones de forma explícita. Las toman por inercia — dejando que el gasto del trimestre anterior se renueve, optimizando por el número más grande del panel del anunciante, sin conectar nunca el clic con el usuario de pago. Un embudo de campaña construido con cinco eventos arregla eso con cerca de una hora de setup por canal y quince minutos a la semana de lectura.
Variaciones que merece la pena conocer
Campañas multi-touch. Si un prospecto hace clic en el anuncio, se va, y vuelve una semana después desde una newsletter y convierte — son dos campaign clicks para un signup. Guarda la etiqueta de campaña del primer toque y mantenla; no la sobrescribas en el segundo clic. El patrón COALESCE del post de outreach funciona igual aquí.
Retención por cohorte. Una vez tienes paid_upgraded etiquetado por campaña, puedes hacer la pregunta más honesta tres meses después: de los tres usuarios de pago de li_team_inbox, ¿cuántos siguen pagando? Una campaña que produce tres clientes que churnean en el mes dos es peor que una que produce un cliente que se queda un año.
No midas view-through conversions. Las plataformas de anuncios las adoran; son mayormente un truco contable para atribuirse conversiones que habrían pasado igual. Quédate con conversiones por clic — los eventos que disparas en tu propio dominio son inherentemente por clic, y eso es una feature, no una limitación.
Dónde encaja esto con el resto del stack
Este es el endpoint natural del arco de analítica para SaaS pequeñas que llevamos construyendo post a post. Los eventos personalizados nombran los momentos que importan. Los embudos los encadenan en una secuencia. Las etiquetas de campaña particionan esa secuencia por fuente, para que puedas responder a la única pregunta de marketing que de verdad importa: ¿qué canal produce clientes que pagan y se quedan?
Cinco eventos. Un embudo. Respuestas reales sobre tu campaña.
Los eventos personalizados y el embudo de Logly están en todos los planes, incluida la tier gratis. API completa de eventos en los docs.
Empieza gratis →