← Todos los artículos

La compra se va al día anterior: sacar el día de event_timestamp en el export de GA4

event_timestamp está en UTC y event_date sigue la zona horaria de la propiedad. Si sacas el día del timestamp, los eventos cerca de medianoche caen en otro día.

Paso 1 de 6 Una compra a las 00:30 del 29 de octubre en Madrid, la zona horaria de la propiedad.
  1. Una compra a las 00:30 del 29 de octubre en Madrid, la zona horaria de la propiedad.
  2. El export guarda event_date = 20261029, en la zona de la propiedad. Pero event_timestamp está en UTC: las 23:30 del día 28.
  3. Si sacas el día con DATE(TIMESTAMP_MICROS(event_timestamp)), la compra cae el 28. Los totales diarios se desplazan.
  4. La causa: las dos columnas usan relojes distintos. Todo lo que pasa cerca de medianoche cambia de día.
  5. La solución: agrupar por event_date, o convertir el timestamp con la zona horaria de la propiedad.
  6. Compruébalo con días cerrados: los totales diarios vuelven a coincidir con GA4.

Cada evento del export de GA4 lleva dos fechas. event_date es un texto en formato AAAAMMDD. event_timestamp es un número: microsegundos desde 1970. Las dos parecen decir lo mismo, y en la mayoría de eventos lo dicen. En los que ocurren cerca de medianoche no, porque cada una usa un reloj distinto.

Cómo es un día desplazado

Un informe de compras por día construido con DATE(TIMESTAMP_MICROS(event_timestamp)):

  • Los totales diarios no cuadran con el informe de GA4, aunque el total del mes sea casi igual.
  • La diferencia se concentra en las primeras o últimas horas del día, según tu zona horaria: en Madrid, las compras entre medianoche y la 1 (las 2 en verano) pasan al día anterior.
  • El primer y el último día de un periodo pierden o ganan eventos en los bordes: un mes filtrado por el timestamp incluye unas horas del mes anterior y deja fuera las últimas horas del suyo.
  • Los desgloses por hora se desplazan lo mismo: los picos aparecen a la hora equivocada.

Por qué event_timestamp da otro día

El esquema del export las define de forma distinta:

  • event_date es la fecha en que se registró el evento, en la zona horaria de la propiedad (la configurada en GA4 para los informes).
  • event_timestamp es el momento, en microsegundos y en UTC, en que Google Analytics recibió el evento.

TIMESTAMP_MICROS convierte el número en un TIMESTAMP, y DATE() sin zona horaria toma la fecha en UTC. En una propiedad configurada en Europe/Madrid, una compra a las 00:30 del 29 de octubre (UTC+1 en invierno) son las 23:30 del día 28 en UTC: event_date dice 20261029 y tu consulta dice 2026-10-28. El blog para desarrolladores de Google recomienda justo esto: si usas event_timestamp, ajústalo a la zona horaria de los informes antes de compararlo con la interfaz.

Cómo encontrar una fecha desplazada

  1. Busca en tus consultas DATE(TIMESTAMP_MICROS(event_timestamp)), EXTRACT(DATE FROM ...) o FORMAT_TIMESTAMP sin argumento de zona horaria.
  2. Para un día cerrado, compara el número de eventos agrupando por event_date con el número agrupando por la fecha del timestamp. Si no coinciden, la consulta está usando UTC.
  3. Comprueba la zona horaria de la propiedad en GA4, en Administrar, Detalles de la propiedad: es la que usa event_date.

Cómo agrupar por el día correcto

  • Para agrupar por día, usa event_date. Ya está en la zona horaria de la propiedad. Para tratarlo como fecha, PARSE_DATE('%Y%m%d', event_date).

  • Si necesitas el timestamp (para horas, o para calcular tiempos entre eventos), conviértelo con la zona horaria de la propiedad:

    DATE(TIMESTAMP_MICROS(event_timestamp), 'Europe/Madrid') AS day,
    EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)
      AT TIME ZONE 'Europe/Madrid') AS hour
    

    Usa un nombre de zona como Europe/Madrid y no un desfase fijo como +01:00, para que se aplique el horario de verano.

  • Filtra las tablas con _TABLE_SUFFIX y los días con el mismo criterio que la agrupación, para no recortar los bordes del periodo de forma distinta.

  • Compara días cerrados: las tablas diarias pueden recibir eventos tardíos hasta tres días después de la fecha.

Documentación: esquema del export a BigQuery y Bridge the gap between the GA UI and BigQuery export (en inglés).

Cómo comprobar que cada evento cae en su día

  • Agrupar por event_date y agrupar por el timestamp convertido dan los mismos totales diarios.
  • Los totales diarios de días cerrados coinciden con el informe de GA4, dentro de la pequeña diferencia habitual.
  • Los picos por hora aparecen a las horas locales en que de verdad llega tu tráfico.

La hora, la zona horaria y las fechas del ejemplo son ilustrativas.