Atribución multicanal con orgánico como primer touch

Identifica las rutas de conversión donde orgánico fue el primer punto de contacto. Muestra qué canales complementan al SEO en el camino hacia la conversión.

atribucion-organico-primer-touch.sql
-- Rutas de conversión con orgánico como primer touch
-- Reconstruye el camino de canales por usuario hasta la conversión
WITH sesiones_usuario AS (
  SELECT
    user_pseudo_id,
    PARSE_DATE('%Y%m%d', event_date) AS fecha,
    IFNULL(traffic_source.medium, '(none)') AS medio,
    event_name,
    ROW_NUMBER() OVER(
      PARTITION BY user_pseudo_id
      ORDER BY event_timestamp ASC
    ) AS orden_sesion
  FROM
    `your-project.analytics_XXXXXXXXX.events_*`
  WHERE
    _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
      AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
    AND event_name IN ('session_start', 'generate_lead', 'purchase')
),
usuarios_primer_touch_organic AS (
  SELECT DISTINCT user_pseudo_id
  FROM sesiones_usuario
  WHERE orden_sesion = 1 AND medio = 'organic'
),
rutas AS (
  SELECT
    s.user_pseudo_id,
    STRING_AGG(
      DISTINCT s.medio
      ORDER BY s.medio
    ) AS canales_involucrados,
    COUNTIF(s.event_name IN ('generate_lead', 'purchase')) AS conversiones
  FROM
    sesiones_usuario s
    INNER JOIN usuarios_primer_touch_organic u
      ON s.user_pseudo_id = u.user_pseudo_id
  GROUP BY
    s.user_pseudo_id
)
SELECT
  canales_involucrados AS ruta_canales,
  COUNT(*) AS usuarios,
  SUM(conversiones) AS total_conversiones,
  ROUND(SUM(conversiones) / COUNT(*) * 100, 2) AS tasa_conversion
FROM
  rutas
GROUP BY
  ruta_canales
ORDER BY
  usuarios DESC
LIMIT 20

Explicación paso a paso

  • 3 El CTE sesiones_usuario prepara las sesiones con su canal y orden cronológico por usuario.
  • 9 ROW_NUMBER asigna un orden secuencial a las sesiones de cada usuario para identificar el primer touch.
  • 18 Filtra session_start (para identificar canales) y eventos de conversión.
  • 20 El CTE identifica usuarios cuyo primer punto de contacto fue orgánico.
  • 28 STRING_AGG concatena los canales distintos en la ruta del usuario para ver la combinación de canales.
  • 32 COUNTIF cuenta las conversiones de cada usuario.
  • 43 Calcula la tasa de conversión dividiendo conversiones entre usuarios para cada combinación de canales.

Ejemplo de resultado esperado

ruta_canalesusuariostotal_conversionestasa_conversion
organic54322344.31
(none),organic18761236.56
cpc,organic876879.93
(none),cpc,organic4325412.50

Variaciones y adaptaciones

Reemplazar 'generate_lead' y 'purchase' por los eventos de conversión del sitio. Para ver la ruta completa ordenada (no solo canales distintos), usar STRING_AGG sin DISTINCT y ORDER BY event_timestamp. Para limitar a los últimos 30 días en lugar de 90, ajustar el INTERVAL.