← Todos los artículos

Ingresos que no cuadran con el backend: errores en el evento purchase de GA4

value como texto, currency sin definir y transaction_id vacío: tres errores del evento purchase que hacen que GA4 pierda o duplique ingresos.

Paso 1 de 5 Este es el evento purchase que la web envía al dataLayer al confirmarse un pedido.
  1. Este es el evento purchase que la web envía al dataLayer al confirmarse un pedido.
  2. Tres campos fallan: transaction_id vacío, value como texto con coma decimal y currency sin definir.
  3. Resultado: ingresos que GA4 no puede sumar y compras que no se pueden deduplicar ni cruzar con el backend.
  4. La solución: un identificador único, un valor numérico y la moneda en formato ISO 4217.
  5. Antes de cada push, limpia el objeto ecommerce y valida el esquema. Luego, compara con el backend.

Es normal que los ingresos de GA4 no coincidan al céntimo con los del sistema de pedidos: hay usuarios que rechazan la medición, bloqueadores de anuncios y pedidos que se cancelan después. Pero esa diferencia suele ser estable y moderada. Cuando es grande, irregular o cambia tras un despliegue, la causa más frecuente está en el propio evento purchase.

Qué ocurre cuando los ingresos de GA4 no cuadran

La web envía un purchase en cada pedido confirmado, pero GA4 no puede usar bien sus datos. Los síntomas típicos son:

  • Ingresos por debajo de lo esperado, o compras que aparecen con ingresos a cero.
  • Compras duplicadas cuando el usuario recarga la página de confirmación.
  • Imposibilidad de cruzar los pedidos de GA4 con los del backend.

Por qué el evento purchase pierde o duplica ingresos

El evento llega con un esquema incorrecto. Los tres fallos más habituales son:

  • value como texto. "49,90" es una cadena con coma decimal. GA4 espera un número con punto decimal (49.90); una cadena con coma no se interpreta como el importe correcto.
  • currency sin definir. Sin un código de moneda ISO 4217 (EUR, USD…), GA4 no puede calcular métricas de ingresos a partir de value.
  • transaction_id vacío o repetido. El identificador del pedido permite deduplicar compras y relacionarlas con el backend. Si está vacío, cada recarga de la página de confirmación puede registrarse como una compra nueva.

A esto se suma un cuarto problema propio de dataLayer: si no se limpia el objeto ecommerce entre eventos, los productos de un evento anterior pueden mezclarse con los del siguiente.

Cómo auditar el evento purchase en DebugView

  1. En DebugView, haz un pedido de prueba y abre el evento purchase. Revisa el tipo y el formato de value, la presencia de currency y el valor de transaction_id.
  2. En la consola del navegador, escribe dataLayer en la página de confirmación y examina el objeto que se envía.
  3. En una exploración, crea una tabla con ID de transacción, compras e ingresos. Los ID vacíos, (not set) o con más de una compra indican el problema.

Cómo corregir value, currency y transaction_id

dataLayer.push({ ecommerce: null }); // limpia el objeto anterior
dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "T-10482", // único por pedido
    value: 49.90,              // número, con punto decimal
    currency: "EUR",           // ISO 4217
    items: [ /* … */ ],
  },
});
  • Genera value a partir del importe numérico del pedido, no del texto formateado que se muestra en pantalla.
  • Envía siempre currency, aunque la tienda solo venda en una moneda.
  • Usa el mismo identificador de pedido que el backend, para poder cruzar ambos sistemas.

Documentación de Google sobre medir el ecommerce.

Cómo comparar los ingresos de GA4 con el backend

  • Repite el pedido de prueba y comprueba en DebugView los tres campos.
  • Recarga la página de confirmación: no debe aparecer una segunda compra con el mismo transaction_id en los informes.
  • Durante unos días, compara pedidos e ingresos de GA4 con el backend por fecha. La diferencia debe estabilizarse en un porcentaje pequeño y explicable.