Back to Blog
Analytics
Feb 03, 2025
Ludde

The Complete GA4 Ecommerce Tracking Checklist

From view_item to purchase — every event, parameter, and validation step you need for accurate ecommerce reporting.

The Complete GA4 Ecommerce Tracking Checklist

GA4 ecommerce tracking is deceptively simple on the surface — push a few events with an items array and you're done. In reality, most implementations we audit have at least 3 critical issues that silently corrupt revenue data, break funnel reports, and misattribute product performance. GA4 ecommerce is the highest-stakes area of your implementation because errors directly impact business decisions about products, marketing spend, and inventory.

This comprehensive checklist covers every event, required parameter, and validation step you need for accurate GA4 ecommerce reporting — from the first product impression to the completed purchase and beyond.

GA4 purchase event tag configuration in GTM with ecommerce data layer settings enabled

The Complete Event Flow

GA4 ecommerce uses a predefined set of events that map to a typical shopping funnel. For complete funnel reporting, you need these events firing in order:

  1. view_item_list — Fires on product listing or category pages when products are displayed to the user. Captures which products were shown and in what order (list position).
  2. select_item — Fires when a user clicks on a product from a list. Captures which product was selected and from which list.
  3. view_item — Fires on the product detail page. This is one of the most important funnel events for measuring conversion rate by product.
  4. add_to_cart — Fires when a user adds a product to their shopping cart. Should include the exact quantity and variant information.
  5. remove_from_cart — Often overlooked but important for understanding cart abandonment behavior.
  6. view_cart — Fires when the user views their cart page. Include all items currently in the cart.
  7. begin_checkout — Fires when the checkout process begins. This marks the transition from browsing to buying intent.
  8. add_shipping_info — Fires when shipping information is provided. Include the shipping_tier parameter.
  9. add_payment_info — Fires when payment information is provided. Include the payment_type parameter.
  10. purchase — Fires when the order is completed. This is the most critical event — errors here directly affect revenue reporting.

You don't need to implement every event to get value from ecommerce tracking. At minimum, implement view_item, add_to_cart, begin_checkout, and purchase. These four events give you a functional conversion funnel.

The Items Array: Getting It Right

Every ecommerce event must include an items array containing the products involved. Each item object must have these required parameters:

  • item_id (required): Your product's unique identifier (SKU, product ID). Without this, product-level reports are empty.
  • item_name (required): The product name as displayed to the user.
  • price (recommended): The unit price as a number (not a string). Must be the individual item price, not the total.
  • quantity (recommended): The number of units. Defaults to 1 if omitted.
  • item_brand (optional): The brand or manufacturer name.
  • item_category (optional): Primary product category. GA4 supports up to 5 category levels (item_category through item_category5).
  • item_variant (optional): Product variant (size, color, etc.).
  • discount (optional): Per-item discount amount.
  • coupon (optional): Coupon code applied to this item.
dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'T-12345',
    value: 99.98,
    tax: 8.50,
    shipping: 5.99,
    currency: 'USD',
    coupon: 'SUMMER10',
    items: [{
      item_id: 'SKU_001',
      item_name: 'Blue Widget',
      item_brand: 'Acme',
      item_category: 'Widgets',
      item_category2: 'Blue',
      price: 49.99,
      quantity: 2,
      discount: 0
    }]
  }
});

The 5 Most Common Mistakes

  1. Missing item_id:

    Without item_id, GA4's product-level reports (most popular products, product performance, etc.) are completely empty. This is the most common ecommerce tracking error and the easiest to miss because purchase events still fire — they just don't associate with specific products.

  2. Currency mismatches or missing currency:

    Sending value: 49.99 without currency: 'USD' breaks revenue reports. GA4 requires the currency parameter on every ecommerce event with a monetary value. If your site supports multiple currencies, ensure the currency matches the price values in the items array. Mixed currencies in the same event will corrupt your revenue data.

  3. Duplicate purchases (missing transaction_id):

    The transaction_id must be unique per order. If users refresh the thank-you page, re-open a confirmation email, or navigate back to the confirmation page, the purchase event fires again. Without a unique transaction_id, GA4 counts it as a new purchase, inflating your revenue. Always implement server-side deduplication or use a flag in session storage to prevent duplicate fires.

  4. Not clearing the ecommerce object:

    As covered in our dataLayer guide, you must push dataLayer.push({ ecommerce: null }) before every ecommerce event. Without this clear step, GTM may merge old product data with new events, creating phantom products in your reports.

  5. Price as string instead of number:

    Sending price: "49.99" (string) instead of price: 49.99 (number) causes GA4 to treat the value as text rather than a numeric value. Revenue calculations won't work, average order value will be zero, and product performance metrics will be empty.

Purchase Event Validation Checklist

Before going live with your purchase event, verify each of these items:

  • transaction_id is unique per order and doesn't change on page refresh
  • value matches the actual order total (including tax and shipping if applicable)
  • currency is present and matches the price currency (ISO 4217 format: USD, EUR, GBP)
  • ✅ Each item has item_id and item_name
  • price is a number, not a string
  • quantity reflects the actual quantity purchased
  • ecommerce: null push precedes the purchase push
  • ✅ The event only fires once per transaction (no duplicate fires on refresh)
  • ✅ Tax and shipping are included if your reporting requires them

Refund Tracking

GA4 supports refund tracking through the refund event. This is critical for accurate revenue reporting — without refund tracking, your GA4 revenue will always be higher than actual revenue:

dataLayer.push({ ecommerce: null });
dataLayer.push({
  event: 'refund',
  ecommerce: {
    transaction_id: 'T-12345',  // Must match original purchase
    value: 49.99,
    currency: 'USD',
    items: [{
      item_id: 'SKU_001',
      quantity: 1
    }]
  }
});

Ecommerce Validation

NiceLookingData validates your ecommerce implementation against Google's recommended schema and flags missing required parameters, currency issues, duplicate transaction risks, string-vs-number type mismatches, and missing ecommerce clear steps.

Key Takeaways

  • At minimum, implement view_item, add_to_cart, begin_checkout, and purchase events for a functional ecommerce funnel.
  • Every item must have item_id and item_name — without these, product-level reports are empty.
  • Always include currency, use numeric values for price, and ensure transaction_id is unique per order.
  • Clear the ecommerce object (ecommerce: null) before every ecommerce dataLayer push to prevent data bleeding between events.
  • Implement refund tracking to keep GA4 revenue aligned with actual business revenue.
Thanks for reading!