Para seguir el recorrido del primer clic a la venta cerrada necesitas un identificador que viva en los dos sistemas: GA4 aporta la sesión y el origen de tráfico, el CRM la oportunidad y el importe facturado. El puente es un `user_id` propio que escribes en el lead al crearlo y mandas a GA4. Lo montamos en los servicios de datos y medición de Codezone.
Sin ese puente decides con dos verdades parciales. GA4 dice qué campaña trajo más formularios y el CRM qué comerciales cerraron más, pero nadie sabe qué campaña trajo la facturación. Optimizas por volumen de lead mientras el margen está en otra parte del mix.
Al terminar sabrás qué identificador usar y qué guardar en el lead. El gobierno del dato propio está en cómo se gobiernan los datos propios de la empresa; aquí va la medición.
Qué es la medición de recorrido completo
Es la capacidad de atribuir una venta registrada en el CRM a la sesión y la campaña del primer contacto, uniendo los dos sistemas por un identificador compartido en lugar de comparar informes aparte. Convierte dos paneles en una cifra de ingreso por campaña.
El identificador que une las dos partes
Dos piezas que conviene no confundir. El `client_id` identifica dispositivo y navegador: en el export de BigQuery es `user_pseudo_id`. El `user_id` es tu identificador propio, el que asignas cuando alguien envía un formulario.
Google exige que ese `user_id` no contenga información personal, con un máximo de 256 caracteres, único por persona y nunca reutilizado ni vacío, según la documentación de User-ID de GA4. Un UUID de tu backend cumple; el email hasheado entra en el terreno que Google prohíbe.
Qué se guarda en el lead al crearse
La creación del lead es el único momento en que tienes todo delante. Si no lo escribes ahí, hay que reconstruirlo y se pierden filas.
- user_id: el UUID que mandas también a GA4. La clave del cruce.
- client_id: el dispositivo; respaldo si el `user_id` llegó tarde.
- gclid: identificador de clic de Google, necesario para la devolución de la venta a la plataforma de anuncios.
- session_id y timestamp: anclan el lead a una fila concreta del export.
- origen declarado: campaña, fuente y medio como llegaron en la URL, por si luego se deniega el consentimiento.
Por qué los informes de GA4 no te dan la venta
La interfaz de GA4 agrega y modela. Verás conversiones por campaña, pero no la fila de la oportunidad ni el importe facturado: esos datos viven en el CRM.
El Measurement Protocol permite mandar interacciones de servidor y offline, con dos límites declarados: obliga a tener etiquetado con gtag o Tag Manager, y hay parámetros reservados que no se pueden enviar por esa vía, según la guía oficial del Measurement Protocol. Sirve para marcar hitos, no para llevarte el pipeline a GA4.
El papel del export a BigQuery
Aquí el cruce se vuelve real. El export crea tablas diarias `events_YYYYMMDD` y una intradía `events_intraday_YYYYMMDD`, con `user_id`, `user_pseudo_id`, el origen de tráfico y los parámetros de evento. Al ser tu almacén, unes esas filas con una tabla de ventas del CRM y contestas con SQL lo que la interfaz no contesta.
El export estándar tiene un límite de un millón de eventos diarios; el de streaming no limita volumen pero se factura por gigabyte. Decide antes cuál necesitas.
CodeZone Pro Tip: cruza las sesiones del export de GA4 con la tabla de ventas del CRM por user_id y saca el ingreso real por campaña, para repartir presupuesto por facturación y no por formularios.
-- Ingreso real por campana: sesiones de GA4 cruzadas con ventas del CRM.
WITH primera_sesion AS (
SELECT
user_id,
-- Primer contacto atribuido: nos quedamos con la campana del evento
-- mas antiguo de cada usuario, no del ultimo, para medir adquisicion.
ARRAY_AGG(
STRUCT(traffic_source.name AS campana, traffic_source.medium AS medio)
ORDER BY event_timestamp ASC LIMIT 1
)[OFFSET(0)] AS origen
FROM `proyecto.analytics_000000.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260701' AND '20260930'
AND user_id IS NOT NULL -- sin user_id no hay cruce posible
GROUP BY user_id
)
SELECT
s.origen.campana,
s.origen.medio,
COUNT(DISTINCT v.oportunidad_id) AS ventas,
SUM(v.importe_facturado) AS ingreso,
-- Ingreso medio por venta: delata campanas con mucho volumen y poco ticket.
ROUND(SUM(v.importe_facturado) / COUNT(DISTINCT v.oportunidad_id), 2) AS ticket_medio
FROM primera_sesion s
-- INNER JOIN a proposito: solo cuentan las ventas que podemos atribuir.
JOIN `proyecto.crm.ventas_cerradas` v
ON v.user_id = s.user_id
WHERE v.estado = 'ganada'
GROUP BY 1, 2
ORDER BY ingreso DESC;La consulta cambia la conversación de presupuesto. Pasas de defender un coste por lead a poner delante cuántas ventas y cuánta facturación trajo cada campaña, con su ticket medio. La que trae muchos leads y ticket bajo deja de parecer la buena.
Las Métricas que Pasan a Gobernar el Presupuesto
Con el cruce montado, tres cifras sustituyen al coste por conversión. Coste por oportunidad: gasto de la campaña entre oportunidades creadas, no entre formularios. Coste por venta: ese gasto entre ventas cerradas y atribuidas. Ingreso por campaña: la facturación de cada origen, con su ticket medio.
Esas tres soportan la discusión con dirección y alimentan la activación de la automatización conectada al CRM. Para priorizar qué lead se atiende antes está el scoring por intención de compra.
Los Límites Legales de lo que Puedes Mandar
Google prohíbe pasarle datos que pueda reconocer como información personal: nombra email, teléfono personal, nombres, identificadores de dispositivo no reiniciables y geolocalización fina. El riesgo se concentra donde es fácil colarlos: el propio `user_id`, las dimensiones personalizadas y las URL.
Esto no bloquea el proyecto, lo ordena: el dato personal se queda en tu almacén y a GA4 solo va el identificador opaco. El consentimiento se gestiona antes, en la capa de etiquetas, como en todo despliegue de contenedor de servidor verificado.
Decide qué sistema es dueño del identificador y quién lo escribe primero: ese orden determina cuántas filas podrás cruzar. Si el campo no existe, el trabajo arranca en la conexión entre ERP y CRM en Madrid. Si los paneles no cuadran, el diagnóstico está en la diferencia entre conversiones y ventas registradas, y en Meta el montaje paralelo en la arquitectura de eventos de servidor y navegador.
Si ves tus campañas y tus ventas pero nunca juntas, revisamos tu medición extremo a extremo y te decimos qué identificador falta.