As you probably know, the new version of Google Analytics has now the final name of Google Analytics 4 (previously it was called App + Web).

In this guide I will explain you how to configure an E-commerce for tracking with Google Analytics 4, and  – specifically – I will focus on how to move from the traditional Enhanced E-Commerce tracking to the new e-commerce tracking provided by Google Analytics 4 (it is no longer called “Enhanced E-commerce”, just simply “E-commerce”).

Why should I switch to Google Analytics 4?

There are  – at least –  three good reasons to perform the switch:

  • the “traditional” e-commerce tracking, which involves setting Enhanced E-commerce on Universal Analytics (the version of Google Analytics prior to GA4), is going to be progressively replaced by the new tracking based on Google Analytics 4. In other words, sooner or later, the “traditional” e-commerce tracking will probably be discontinued.

 

  • the GA4-based e-commerce tracking, which unlike the previous one can be set with a Template that allows you to move from the traditional session-based tracking model, to the new event-based model. This means your tracking can be much more accurate than before, because in the new GA4 there are many more events than in the “traditional” Google Analytics (Universal Analytics).

 

  • the use of GA4 allows you to start using Google’s machine learning models, which are able to predict the future actions of our users (eg. the purchases they will make through a Predictive Custom Audience), analyzing the data related to their behavior. The technology is still in beta but already usable, and I definitely recommend you try it.

Introduction

In order to track E-commerce in GA4, we will use the Template I made for this purpose.

You can find it in the official Google Tag Manager Gallery at this link:

https://tagmanager.google.com/gallery/#/owners/matteo-zambon-gtm/templates/EEC-dataLayer-Builder-for-GA4

As I mentioned, GA4 is based on events. You can find the list of events managed by GA4 in the official guide:

lista azioni ecommerce google analytics 4

The good news is that it is possible to reuse some of the actions present in the “traditional” Enhanced E-commerce settings (based on Google Universal Analytics) and to transform them into GA4 actions.

Let’s clarify this point. In this table you can find the GA Universal Analytics event list in Enhanced E-Commerce (EEC for friends) in the first column and the Google Analytics 4 event list in the second column:

e-commerce from universal google analytics to google analytics 4

“Ok, but what are all those colors about?”

Here we go 🙂

  • The green events are handled automatically by my Template, so no further configuration is needed
  • The yellow events will need a specific configuration of the variable. In detail, the step number of the Google Universal Analytics checkout event must be configured. The number indicated in brackets in the image above is the default number that the Template attributes (of course you can change it if the action of GA4 corresponds to a different step number)
  • The red event is not currently managed by my Template. This is because wishlist action management is not present in the “traditional” Google Universal Analytics.

Now let’s go and configure everything 🙂

Step 1 – Import the “EEC dataLayer Builder for GA4 variable” Template

Import the Variable Template “EEC dataLayer Builder for GA4”  You can find it in Google’s Community Template Gallery. It is easier done than said 😀

Just follow these steps:

  • Templates > Variable Templates > Search Gallery
    Search for EEC dataLayer Builder for GA4 and click on “Add to Workspace

Matteo Zambon - Template Variabile - EEC dataLayer Builder for GA4

The EEC dataLayer Builder for GA4 Template that you just imported will look like this:

Matteo Zambon - EEC dataLayer Builder for GA4

Great, now we just have to use this Template to create two custom variables.

Step 2 – Create the two custom variables for GA4

Now you will need to create two custom variables:

  • the GA4 – Event Name variable, which will manage the name of the e-commerce event
  • the GA4 – Items variable, which will manage an object that contains all the parameters

Configure the variable GA4 – Event Name

GA4 – Event Name has the purpose of uniquely identifying the name of the standard event to be passed to GA4 for e-commerce tracking purposes.

Here is how to do it:

  • Go to Variables > User-Defined Variables
  • Click on New and choose EEC dataLayer Builder for GA4
  • On the Mode listbox select Event Name
  • Checkout Events > enter the numbers of the checkout steps that will correspond to begin_checkout, add_shipping_info and add_payment_info
  • View Cart Event: if you want to track it, select it and enter the step number
  • Variable name: GA4 – Event Name
  • Save

Here are the step values that you will find in the image below:

  • 1 = view_cart (this is not enabled by default)
  • 2 = begin_checkout (the default step is 1)
  • 3 = add_shipping_info (the default step is 2)
  • 4 = add_payment_info (the default step is 3)

Matteo Zambon - GA4 Event Name

Configure the variable GA4 – Items

GA4 – Items has the purpose of managing the object items which will contain all the information needed for GA4.

In detail, the object will manage two possible scenarios:

Thanks to the management of both these scenarios, with this variable you will always have the correct structure for Google Analytics 4 🙂

Here are the steps to follow for this configuration:

  • Go to Variables > User-Defined Variables
  • Click on New and choose> EEC dataLayer Builder for GA4
  • On the Mode listbox select Items
  • Variable name: GA4 – Items
  • Save

Matteo Zambon - GA4 Items

Step 3 – Create the dataLayer variables for purchase and refund

Unfortunately, the purchase and refund event must handle some parameters – seven to be precise – that are outside the object items.

In detail, the seven parameters to be handled are:

  • transaction_id
  • affiliation
  • value
  • tax
  • shipping
  • currency
  • coupon

These parameters are all contained in different positions inside the GTM dataLayer, depending on whether the dataLayer push was done for Google Universal Analytics or Google Analytics 4.

If you want to handle both the configurations (but this is a very unlikely case) then you would have to create 14 dataLayer variables in GTM.

The first scenario (Google Universal Analytics)

Let’s assume that you only have to manage the dataLayer of the Enhanced Ecommerce of Google Universal Analytics (this is the first of the two scenarios that I mentioned earlier).

Let’s start by creating one Variable for each of the seven parameters.

Here’s how to do it:

  • Go to Google Tag Manager > Variables > User Defined Variables > New > Variable Configuration
  • Variable type: Data Layer Variable.
  • Data Layer Variable Name: ecommerce.purchase.actionField.revenue
  • Data Layer version: Version 2.
  • Rename the Variable “dlv – ecommerce.purchase.actionField.revenue” and save it.

The configuration should look like this:

datalayer variable ecommerce.purchase.actionField.revenue for Google Analytics 4

Now you just have to repeat this operation 6 times, changing the value to red for the other variables with:

  • ecommerce.purchase.actionField.affiliation
  • ecommerce.purchase.actionField.coupon
  • ecommerce.purchase.actionField.id
  • ecommerce.purchase.actionField.shipping
  • ecommerce.purchase.actionField.tax
  • ecommerce.currencyCode

Rename all variables by adding a simple prefix: “dlv –

Please be careful about ecommerce.currencyCode

This parameter is optional in Google Universal Analytics, but it is required in Google Analytics 4. If you don’t pass the currency parameter in GA4, the transaction event has some problems.

My suggestion is to check “Set Default Value” and insert “EUR” (if your e-commerce has Euro currency by default).

dlv - ecommerce.currencyCode Gogole Analytics 4

 

If your e-commerce also handles refunds, then you’d need to add an eighth variable, named

  • ecommerce.refund.actionField.id

Once this is done, you should have a list like this:

datalayer variable ecommerce for ga4 and google tag manager

 

The second scenario (Google Analytics 4)

In the second scenario relating to the management of GA4 events that I described above, you need to create only the variables relating to the management of GA4.

(In this case, the dataLayer push is already passing the object items.)

Consequently, the seven dataLayer variables to create are:

  • ecommerce.purchase.affiliation
  • ecommerce.purchase.coupon
  • ecommerce.purchase.currency
  • ecommerce.purchase.shipping
  • ecommerce.purchase.tax
  • ecommerce.purchase.transaction_id
  • ecommerce.purchase.value

(In the following steps I will not consider this second scenario, and I will refer exclusively to the first scenario).

Step 4 – Create GA4 Tag Triggers

Now you just have to identify the name of the events in Google Universal Analytics (you should already have the event list if you have already implemented the Google Analytics Enhanced E-Commerce).

It all depends on how Enhanced E-commerce has been implemented, for example through modules / plugins in your CMS (WooCommerce, Prestashop, Magento, Shopify, etc), or through a custom software solution crafted by a software engineer.

[NOTE] It is possible that some pushes in the dataLayer to manage actions such as: promo impression, detail, checkout or purchase, were performed before the GTM event Container Loaded (ex Page View) and were performed without having declared the name of the event.

(By the way, if you do not declare the name of the event, you should get a slap on the wrist!)

The trick – or #barbatrucco, in Italian slang – to manage this situation (handling Message events in GTM debug) is to use GTM’s “All Pages” native trigger.

Also, if the transaction event (purchase) is done BEFORE the Container Loaded native event, then you will need to create a negative trigger and put it as exception to the Google Analytics 4 Tag which does not handle the transaction (purchase). This is because you would trigger the transaction (purchase) events two times. Don’t worry, you will see it well in step 5.

For the sake of simplicity, I will separate the actions purchase and refund from the other actions.
(I don’t think I have ever seen the action refund configured in Google Analytics).

In this example, I will use the WooCommerce implementation with the Duracell Tomi plugin.

Please note that in this example there are two actions that are not handled with a specific event:

  • detail (product detail)
  • checkout (step 1 of the checkout)

(Duracell Tomi, you should definitely get a slap on the wrist for this!)

Create the trigger GA – EEC Events

My intent here is to track all GA’s Enhanced E-Commerce actions excluding purchase and refund.

  • Click on Trigger > New > Trigger configuration
  • Trigger type: Custom event
  • Event Name: gtm4wp.addProductToCartEEC|gtm4wp.checkoutStepEEC|gtm4wp.productClickEEC|gtm4wp.productImpressionEEC|gtm4wp.promoClickEEC|gtm4wp.promoImpressionEEC|gtm4wp.removeFromCartEEC
  • Flag: Use regex matching
  • Fire this trigger fires on: All custom events
  • Trigger name: “GA – EEC Events”
  • Save

GA EEC Events for Google Analytics 4 by Google Tag Manager

Create the Trigger GA – EEC Purchase

Here the intent is to track the purchase:

  • Click on Trigger > New > Trigger configuration
  • Trigger type: Custom event
  • Event Name: gtm4wp.orderCompletedEEC
  • Fire this trigger fires on: All custom events
  • Trigger name: “GA – EEC Purchase”
  • Save

GA EEC Purchase for Google Analytics 4 by Google Tag Manager

Well, it was easier than expected, wasn’t it?

Let’s move on to the Tags and we’re done 🙂

Step 5 – Create the Google Analytics 4 Tags

Create the Google Analytics 4 property and the data stream

You’ve probably already created your property in Google Analytics 4 and the Data Stream of your site.

In case you have any doubts here is a small intro by Krista Seiden, who explains how to do it:

Retrieve your Google Analytics 4 code G-XXXXXXXX from your data stream.

In my case the value is: G-7CSDVRME94

google analytics 4 - data stream

Well, now let’s move on to the creation of the Tags:

Create the GA4 Configuration Tag

The Google Analytics 4 Configuration Tag will allow us to more easily manage GA4 events in the Event Tags.

  • Tag type: Google Analytics: GA4 Configuration
  • Measurement ID: G-XXXXXXXXX
  • Trigger: All Pages
  • Tag Name: GA4 – Configuration

Google Analytics 4 Tag Configuration in Google Tag Manager

Create the two GA4 Event Tags to manage E-commerce tracking

This is the last step before the final verification with debugging.

Beware of triggers. As explained before in red if not all e-commerce actions are handled by a specific event and are pushed before Container Loaded we will need to use the “All Pages” activator as well.

Also if the specific event of the transaction (in our case it will be gtm4wp.orderCompletedEEC) is pushed before the Container Loaded as in the image below:

push purchase of GA4 is before GTM container lodead

then a universal negative trigger must be set up for the GA4 – EEC Tag.

This is the universal negative trigger for the purchase.

  • Click on Trigger > New > Trigger configuration
  • Trigger typeCustom event
  • Event Name: .*
  • Flag: Use regex matching
  • Fire this trigger: GA4 – Event Name then choose equals and purchase
  • Name: “GA4 Event Name – Purchase”
  • Save.

ga4 event name purchase - universal negative trigger

 

So you have three possible cases, obviously, you will have to choose the one that best suits your situation:

  • case A
    Select as trigger ► GA – EEC – Events 
    If there are pushes before Container Loaded that are not handled by a specific event ► also choose All Pages trigger
    If your purchase event is pushed before Container Loaded ► create the negative trigger “GA4 Event Name – Purchase” and put it as an exception
  • case B
    Select as trigger ► GA – EEC – Events 
    If there are pushes before Container Loaded that are not handled by a specific event ► also choose All Pages trigger
  • case C
    If all events are declared then just choose ► GA – EEC – Events as trigger

 

Case A

  • Tag type: Google Analytics: GA4 Event
  • Configuration Tag: choose from the list > GA4 – Configuration
  • Event Name: choose the variable {{GA4 – Event Name}}
  • Event Parameters: click on Add Row
    • Parameter Name: items
    • Value: choose the variable {{GA – Items}}
  • Trigger: All Pages , then choose the Trigger GA – EEC – Events
  • Exeptions: GA4 Event Name – Purchase
  • Name: GA4 – EEC
  • Save

Google Analytics 4 Ecommerce Events with Google Tag Manager with All Pages and Exception - Matteo Zambon

Case B

  • Tag type: Google Analytics: GA4 Event
  • Configuration Tag: choose from the list > GA4 – Configuration
  • Event Name: choose the variable {{GA4 – Event Name}}
  • Event Parameters: click on Add Row
    • Parameter Name: items
    • Value: choose the variable {{GA – Items}}
  • Trigger: All Pages , then choose the Trigger GA – EEC – Events
  • Name: GA4 – EEC
  • Save

Google Analytics 4 Ecommerce Events with Google Tag Manager - Matteo Zambon

Case C

  • Tag type: Google Analytics: GA4 Event
  • Configuration Tag: choose from the list > GA4 – Configuration
  • Event Name: choose the variable {{GA4 – Event Name}}
  • Event Parameters: click on Add Row
    • Parameter Name: items
    • Value: choose the variable {{GA – Items}}
  • Trigger: choose GA – EEC – Events
  • Name: GA4 – EEC
  • Save

Google Analytics 4 Ecommerce Events with Google Tag Manager with specific events - Matteo Zambon

My case (that of Woocommerce) is case A

Now I am going to create the Tag for the action purchase because, as I mentioned before, I need to pass the seven additional parameters.

  • Tag type: Google Analytics: GA4 Event
  • Configuration Tag: choose from the list > GA4 – Configuration
  • Event Name: choose the variable {{GA4 – Event Name}}
  • Event Parameters: click on Add Row
    • Parameter Name: items
    • Value: choose the variable {{GA – Items}}
  • Event Parameters: click on Add Row
    • Parameter Name: transaction_id
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.id}}
  • Event Parameters: click on Add Row
    • Parameter Name: affiliation
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.affiliation}}
  • Event Parameters: click on Add Row
    • Parameter Name: tax
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.tax}}
  • Event Parameters: click on Add Row
    • Parameter Name: shipping
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.shipping}}
  • Event Parameters: click on Add Row
    • Parameter Name: coupon
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.coupon}}
  • Event Parameters: click on Add Row
      • Parameter Name: value
    • Value: choose the variable {{dlv – ecommerce.purchase.actionField.revenue}}
  • Event Parameters: click on Add Row
    • Parameter Name: currency
    • Value: choose the variable {{dlv – ecommerce.currencyCode}}
  • Trigger: GA – EEC – Purchase
  • Name: GA4 – EEC – Purchase
  • Save

 

Google Analytics 4 Ecommerce Purchase Event with Google Tag Manager - Matteo Zambon

Step 6 – Debug and verify operation

Activate the Google Tag Manager Debug Preview and check if the Tags are activated and if they actually manage the parameters in GA4 🙂

debug preview tag assistant - google analytics 4 ecommerce in GTM

As you can see, product impressions are handled. Events number 3 and 4 have the tag GA4 – EEC fired:

debug GTM - GA4 Tag Ecommerce promo

If you click the Tag and check the Values, you can notice that both the name of the event view_item_list and the values of the items are handled correctly:

debug GTM - GA4 Tag Ecommerce promo - detail

 

Now it’s time for the final test: let’s check if Google Analytics 4 actually receives the values.

To do this, just change the GTM code to the GA4 code on the Tag Assistant.

debug GTM - GA4 Tag Ecommerce change Tag assistant

Now you will see all the Hit Sent in Google Analytics 4.

In detail, I have the values ​​3, 4 and 5 which correspond to the GA4 event:

  • Page View
  • View Item List

debug GTM - GA4 Tag Ecommerce hit sent

What about the purchase? That works too 🙂

debug google analytics 4 purchase with google tag manager

Check GA4 transaction on GTM Debug

Go to debug of GTM and click the G-XXXXXX icon on the left-top menù. Search your purchase transaction and check if there are all transaction parameters:

debug GA4 transaction with GTM debug

Conclusion

Well, now you have no more excuses! You can track your e-commerce with Google Analytics 4 and start exploring all the new features of the new version of Google Analytics.

If you have any doubts or questions, please leave me a comment;)

Condividi anche tu Google Tag Manager!
  • Reply

    Daniel Velasquez

    20 11 2020

    Hi! “add_shipping_info event” need “shipping_tier” value.

    How do I add this value?

    Regards from Argentina!

    • Matteo Zambon

      24 11 2020

      Yep, you right.
      add_payment_info need payment_type also. I will fix it with option parameters in EEC checkout and EEC checkout_option.

      You will see and update in GTM variable in the next days

  • Reply

    Polly

    13 11 2020

    Hi, thank you for the amazing guide! I have followed the steps, but I can’t make GA4 to show the value e.g. the price of the product which have been purchased. I’m confused where the problem may come from. Any help will be appreciated. Thanks in advance!

    • Matteo Zambon

      13 11 2020

      Hi Polly, sure. Are you sure that you have ecommerce.currencyCode in your variable? Check if you have these parameters in GA4 transaction debug:
      GA4 transaction debug

      Let me know, if you have problems, please contact me on LinkedIn 🙂

  • Reply

    Francesco

    10 11 2020

    Ciao Matteo,
    grazie della preziosa e dettagliata guida. Ho configurato correttamente i vari step da te indicati ed i vari TAG sono attivati in modo corretto.

    Due problemi:
    – Nella scheda in Tempo Reale vedo correttamente le 4 conversioni di test che ho effettuato ma nel rapporto Monetizzazione > Acquisti E-commerce non compare niente
    – Come puoi vedere da questa immagine https://ibb.co/z6YN4sw non vengono correttamente passati i parametri da TAG Manager

    Il sito web è con WooCommerce con plugin TAG Manager da te suggerito e nella sezione delle integrazioni con WooCommerce è tutto spuntato su attivo com suggerito.

    Dove è saltato qualcosa?

    Grazie in anticipo,
    Francesco

    • Matteo Zambon

      10 11 2020

      Ciao Francesco e grazie del feedback. Trovi l’articolo in versione italiana qui: https://www.tagmanageritalia.it/come-tracciare-l-ecommerce-con-google-analytics-4-in-google-tag-manager/

      Guardando il problema, sembra che le variabili dello step 3:
      ecommerce.purchase.actionField.revenue
      ecommerce.purchase.actionField.affiliation
      ecommerce.purchase.actionField.coupon
      ecommerce.purchase.actionField.id
      ecommerce.purchase.actionField.shipping
      ecommerce.purchase.actionField.tax
      ecommerce.currencyCode

      non abbiano dei valori. I motivi possono essere 2:

      1) Hai sbagliato la configurazione delle variabili (attenzione maiuscole e minuscole)
      2) Quei dati non sono passati nella transazione.

      Per verificarlo ti basta vedere cosa c’è nel push del dataLayer nella transazione dell’EEC di Google Universal Analytics .

      Fammi sapere!

    • Francesco

      10 11 2020

      Avevo erroneamente usato il prefisso “dlv -” nonostante stia testando questa configurazione con GA4.

      Adesso i dati vengono passati e tramite TAG Manager è verificabile. Su Google Analytics ancora appare l’acquisto solo nei rapporti in Tempo Reale.

      Può essere che visto l’attivazione di questa proprietà GA4 da solo qualche ora ancora non sia tutto attivo e funzionante? Anche per generici Eventi non vedo niente…

      Saluti
      Francesco

    • Matteo Zambon

      10 11 2020

      Su Google Analytics 4 devi attendere molte ore per vedere i dati odierni (eventi). Ti conviene verificarlo con: Tempo Reale di GA4 e la funzionalità nativa del Debug 🙂

      Fammi sapere

    • Francesco

      11 11 2020

      Buongiorno, i dati sono finalmente apparsi ma non viene passato il valore dell’articolo in € nelle vendite la colonna dell’importo è zero. Dove posso/devo controllare per capire il problema?

      Grazie

    • Matteo Zambon

      11 11 2020

      Ciao occhio alla variabile dlv. Controlla la configurazione che sia ecommerce.currencyCode

    • Francesco

      12 11 2020

      Avevo perso un pezzo inserendo ecommerce.currency senza Code di seguito e senza valore predefinito EUR. Ora dovrebbe andare

    • Matteo Zambon

      13 11 2020

      Ottimo!

  • Reply

    Praba Ponnambalam

    09 11 2020

    A must-read article… thank you so much for the template & the article Matteo. Greetings from Sri Lanka 🙏

    • Matteo Zambon

      09 11 2020

      Thank you Praba! Your comment is really appreciated 🙂

    • Praba Ponnambalam

      09 11 2020

      Hi Matteo,

      Thank.you so much for your reply, I really appreciate it.

      I’m already using Tomi’s GTM4WP for my EEC on UA. Now trying to follow your guide to set up e-commerce on GA4.

      On the EEC event trigger, there’s a conflict between Tomi’s documentation (https://gtm4wp.com/how-to-articles/how-to-setup-enhanced-ecommerce-tracking) & yours. I’ve put up a comparison chart to get this clarified from you 🙂

      Screenshot: https://share.getcloudapp.com/Z4uy8BRA
      Google sheet: https://bit.ly/32pNMYI

      Appreciate your advice.

      Thanks once again 🙏

    • Matteo Zambon

      09 11 2020

      Hi Praba, you just have to enter the exact name of the events you used. It depends on your plugin settings, so check what your events look like and set them with them 🙂

    • Praba Ponnambalam

      09 11 2020

      Hi Matteo, thank you so much for replying to my query. Now I got it, thanks once again 🙂

    • Matteo Zambon

      09 11 2020

      You’re welcome 🙂

  • Reply

    Nuno Barreto

    09 11 2020

    Really nice article.
    Thanks!

    • Matteo Zambon

      09 11 2020

      Thank you Nuno 🙂

  • Reply

    Thắng

    05 11 2020

    Hello, How can I receive notifications for articles written in English from your blog? Thank you

Hai ancora qualche dubbio?
Chiedi pure qui sotto, sarò pronto a risponderti!

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.