Shopify Customer Events Custom Pixel
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-XXXXXXX'); window.dataLayer = window.dataLayer || []; analytics.subscribe("product_viewed", (event) => { window.dataLayer.push({ 'event': 'product_viewed', 'ecommerce': { 'currency': event.data.prouctVariant.price.currencyCode, 'value' : event.data.prouctVariant.price.amount, 'items':[{ "item_id" : event.data.prouctVariant.prouct.id, "item_name" : event.data.prouctVariant.prouct.title, "currency" : event.data.prouctVariant.price.currencyCode, "price" : event.data.prouctVariant.price.amount, "item_brand" : event.data.prouctVariant.product.vendor, "item_category" : event.data.prouctVariant.product.type, "item_variant" : event.data.prouctVariant.title }] } }); }); analytics.subscribe("collection_viewed", (event) => { window.dataLayer.push({ 'event': 'collection_viewed', 'ecommerce': { 'item_list_id' : event.data.collection.id, 'item_list_name': event.data.collection.title, 'items' :[{ "item_id" : event.data.collection.prouctVariants.product.id, "item_name" : event.data.collection.prouctVariants.product.title, "currency" : event.data.collection.prouctVariants.price.currencyCode, "price" : event.data.collection.prouctVariants.price.amount }] } }); }); analytics.subscribe("product_added_to_cart", (event) => { window.dataLayer.push({ 'event': 'product_added_to_cart', 'ecommerce': { 'currency' : event.data.cartLine.cost.totalAmount.currencyCode, 'value' : event.data.cartLine.cost.totalAmount.amount, 'items' :[{ "item_id" : event.data.cartLine.merchandise.product.id, "item_name" : event.data.cartLine.merchandise.product.title, "currency" : event.data.cartLine.merchandise.price.currencyCode, "price" : event.data.cartLine.merchandise.price.amount, "item_brand" : event.data.cartLine.merchandise.product.vendor, "item_category" : event.data.cartLine.merchandise.product.type, "item_variant" : event.data.cartLine.merchandise.title }] } }); }); analytics.subscribe("checkout_completed", (event) => { window.dataLayer.push({ 'event': 'checkout_completed', 'ecommerce': { 'transaction_id' : event.data.checkout.order.id, 'shipping' : event.data.checkout.shippingLine.price.amount, 'email' : event.data.checkout.email, 'phone' : event.data.checkout.phone, 'tax' : event.data.checkout.totalTax.amount, /* 'coupon' : */ 'currency' : event.data.checkout.currencyCode, 'value' : event.data.checkout.subtotalPrice.amount, /* 'items':[{ "item_id" : "item_name" : "currency" : "price" : "item_brand" : "item_category" : "item_variant" : }] */ } }); }); analytics.subscribe("checkout_started", (event) => { window.dataLayer.push({ 'event': 'checkout_started', 'ecommerce': { 'currency': event.data.checkout.currencyCode, 'value' : event.data.checkout.subtotalPrice.amount, /* 'items':[{ "item_id" : "item_name" : "currency" : "price" : "item_brand" : "item_category" : "item_variant" : }] */ } }); }); analytics.subscribe("payment_info_submitted", (event) => { window.dataLayer.push({ 'event': 'payment_info_submitted', 'ecommerce': { 'currency' : event.data.checkout.currencyCode, 'value' : event.data.checkout.subtotalPrice.amount, /* 'payment_type' : event.data.checkout. 'items':[{ "item_id" : "item_name" : "currency" : "price" : "item_brand" : "item_category" : "item_variant" : }] */ } }); }); analytics.subscribe("checkout_shipping_info_submitted", (event) => { window.dataLayer.push({ 'event': 'checkout_shipping_info_submitted', 'ecommerce': { 'currency' : event.data.checkout.currencyCode, 'value' : event.data.checkout.subtotalPrice.amount, /* 'shipping_tier' : 'items':[{ "item_id" : "item_name" : "currency" : "price" : "item_brand" : "item_category" : "item_variant" : }] */ } }); }); analytics.subscribe("search_submitted", (event) => { window.dataLayer.push({ 'event': 'search_submitted', 'ecommerce': { 'search_term': event.data.searchResult.query, } }); });
add_to_cart
<script> document.addEventListener('DOMContentLoaded', function() { const addToCartButton = document.getElementById('XXXXXXXXX'); //Replace XXXXXXXXX with button id. if (addToCartButton) { addToCartButton.addEventListener('click', function(event) { dataLayer.push({ ecommerce: null }); dataLayer.push({ 'event': 'add_to_cart', 'ecommerce': { 'currency': '{{ shop.currency }}', 'value': '{{ product.price | times: 0.01}}', 'items': [{ 'item_id': '{{ product.id }}', 'item_name': '{{ product.title }}', 'item_brand': '{{ product.vendor }}', 'item_category': '{{ product.type }}', 'item_variant': '{{ product.selected_variant.sku }}', 'currency': '{{ shop.currency }}', 'price': '{{ product.price | times: 0.01}}' }] } }); }); } }); </script>
begin_checkout
<button onclick="handleBeginCheckout()">Begin Checkout</button> <script> // JavaScript function to handle the initiation of the checkout process function handleBeginCheckout() { // Clear any previous ecommerce data from the data layer dataLayer.push({ 'ecommerce': null }); // Push the begin checkout event to the data layer with product details dataLayer.push({ 'event': 'begin_checkout', 'ecommerce': { 'currency': '{{ shop.currency }}', 'value': '{{ product.price | times: 0.01 }}', 'items': [{ 'item_id': '{{ product.id }}', 'item_name': '{{ product.title }}', 'item_brand': '{{ product.vendor }}', 'item_category': '{{ product.type }}', 'item_variant': '{{ product.selected_variant.sku }}', 'currency': '{{ cart.currency }}', 'price': '{{ product.price | times: 0.01 }}' }] } }); } </script>
contact_information,add_shipping_info,add_payment_info
<script> // Wait for the document to be ready document.addEventListener("DOMContentLoaded", function () { function handleCheckoutStep() { // Define a function called 'handleCheckoutStep' to check and respond to the current checkout step. var dataLayer = window.dataLayer || []; // Initialize a 'dataLayer' array if it doesn't already exist or use an existing one. if (Shopify.Checkout.step === "contact_information") { // Check if the current step is "contact_information". dataLayer.push({ 'ecommerce': null }); dataLayer.push({ 'event': 'begin_checkout', 'ecommerce':{ 'currency': "{{ shop.currency}}", 'value': '{{ checkout.total_price | money_without_currency | replace: ",","."}}', 'items': [ {% for line_item in checkout.line_items %} { "item_id": '{{ line_item.product_id }}', "item_name": '{{ line_item.title }}', "item_brand": '{{ line_item.vendor }}', "item_variant": '{{ line_item.variant_id }}', "quantity": '{{ line_item.quantity }}', "price": '{{ line_item.final_price | money_without_currency | replace: ",",'.' }}' } {% unless forloop.last %},{% endunless %} {% endfor %} ] } }); } else if (Shopify.Checkout.step === "shipping_method") { // Check if the current step is "shipping_method". dataLayer.push({ 'ecommerce': null }); dataLayer.push({ 'event': 'add_shipping_info', 'ecommerce':{ 'currency': "{{ shop.currency}}", 'value': '{{ checkout.total_price | money_without_currency | replace: ",","."}}', 'items': [ {% for line_item in checkout.line_items %} { "item_id": '{{ line_item.product_id }}', "item_name": '{{ line_item.title }}', "item_brand": '{{ line_item.vendor }}', "item_variant": '{{ line_item.variant_id }}', "quantity": '{{ line_item.quantity }}', "price": '{{ line_item.final_price | money_without_currency | replace: ",",'.' }}' } {% unless forloop.last %},{% endunless %} {% endfor %} ] } }); } else if (Shopify.Checkout.step === "payment_method") { // Check if the current step is "payment_method". dataLayer.push({ 'ecommerce': null }); dataLayer.push({ 'event': 'add_payment_info', 'ecommerce':{ 'currency': "{{ shop.currency}}", 'value': '{{ checkout.total_price | money_without_currency | replace: ",","."}}', 'items': [ {% for line_item in checkout.line_items %} { "item_id": '{{ line_item.product_id }}', "item_name": '{{ line_item.title }}', "item_brand": '{{ line_item.vendor }}', "item_variant": '{{ line_item.variant_id }}', "quantity": '{{ line_item.quantity }}', "price": '{{ line_item.final_price | money_without_currency | replace: ",",'.' }}' } {% unless forloop.last %},{% endunless %} {% endfor %} ] } }); } // Add more 'else if' conditions as needed for other steps. } handleCheckoutStep(); }); </script>
purchase
/* Use this if statement below if you drop this in checkout.liquid else use script as is in checkout settings */ /* if(Shopify.Checkout.page == "thank_you"){ ADD SCRIPT HERE} */ {% if first_time_accessed %} <script> dataLayer.push({ ecommerce: null }); dataLayer.push({ 'event': 'purchase', 'ecommerce': { 'transaction_id': '{{ order.order_number | prepend: "#" }}', 'value': '{{ checkout.subtotal_price | money_without_currency | replace: ",","." }}', 'shipping': '{{ shipping_method.price | money_without_currency | replace: ",","." }}', 'currency': "{{ order.currency }}", 'coupon': '{{ discount.title }}', 'email': '{{ checkout.email }}', 'phone': '{{ order.phone }}', 'tax': '{{ checkout.tax_price | money_without_currency | replace: ",","." }}', "items": [ {% for line_item in line_items %} { "item_id": '{{ line_item.product_id }}', "item_name": '{{ line_item.title }}', "currency": '{{ order.currency }}', "item_brand": '{{ line_item.vendor }}', "item_category": '{{ product.type }}', "item_variant": '{{ line_item.variant_id }}', "quantity": '{{ line_item.quantity }}', "price": '{{ line_item.final_price | money_without_currency | replace: ",",'.' }}' } {% unless forloop.last %},{% endunless %} {% endfor %} ] } }); </script> {% endif %}
remove_from_cart
<button onclick="handleRemoveFromCart()">Remove from Cart</button> <script> // JavaScript function to handle the removal of a product from the cart function handleRemoveFromCart() { // Clear any previous ecommerce data from the data layer dataLayer.push({ 'ecommerce': null }); // Push the remove from cart event to the data layer with product details dataLayer.push({ 'event': 'remove_from_cart', 'ecommerce': { 'currency': '{{ cart.currency }}', 'value': '{{ product.price | times: 0.01 }}', 'items': [{ 'item_id': '{{ product.id }}', 'item_name': '{{ product.title }}', 'item_brand': '{{ product.vendor }}', 'item_category': '{{ product.type }}', 'item_variant': '{{ product.selected_variant.sku }}', 'currency': '{{ cart.currency }}', 'price': '{{ product.price | times: 0.01 }}' }] } }); } </script>
select_item
<script type="text/javascript"> window.addEventListener('load', function() { // Replace 'YOUR_CLASS_NAME_HERE' with the actual class name of the product items in your collection. // This class should be on the clickable element that represents each product. var productItemLinks = document.querySelectorAll(".YOUR_CLASS_NAME_HERE"); for (let i = 0; i < productItemLinks.length; i++) { productItemLinks[i].addEventListener('click', function() { // This code will execute when a product item is clicked. dataLayer.push({ 'event': 'select_item', 'ecommerce': { 'items': [{ 'item_id': {{product.id | json}}, 'item_variant': {{product.selected_variant.title | json}}, 'item_name': {{product.title | json}}, 'price': {{product.price | money_without_currency | replace: ',', '.' | json}}, 'item_brand': {{product.vendor | json}}, 'item_category': {{product.type | json}}, 'item_list_name': {{collection.title | json}}, 'currency': {{shop.currency | json}} }] } }); }); } }); </script>
view_cart
{% if request.page_type == 'cart' %} <script> var isCartPage = true; </script> {% else %} <script> var isCartPage = false; </script> {% endif %} <script> // Check the JavaScript variable to determine if it's a cart page if (isCartPage) { // Your custom JavaScript code for cart pages dataLayer.push({ 'event' : 'view_cart', 'ecommerce' :{ 'currency' : '{{ cart.currency.iso_code }}', 'value': "{{ cart.total_price | money_without_currency | replace: ",","." }}", } }); } </script>
view_item
{% if request.page_type == 'product' %} <script> dataLayer.push({ ecommerce: null }); dataLayer.push({ 'event' : 'view_item', 'ecommerce' :{ 'currency': "{{ shop.currency }}", 'value': "{{ product.price | money_without_currency | replace: ",","." }}", 'items':[{ "item_id": "{{ product.id }}", "item_name": "{{ product.title }}", "currency": "{{ shop.currency }}", "item_brand": "{{ product.vendor }}", "item_category": "{{ product.type }}", "item_variant": "{{ product.selected_variant.title }}", "price": "{{ product.price | money_without_currency | replace: ",",'.' }}" }] } }); </script> {% endif %}
view_item_list
{% if template contains 'collection' %} <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'view_item_list', 'item_list_id': '{{ collection.id}}', 'item_list_name': '{{ collection.title}}', 'items': [ {% for product in collection.products %} { 'item_id': '{{product.id}}', 'item_name': '{{product.title}}', 'item_category': '{{product.type}}', "item_brand": "{{ product.vendor }}", 'price': '{{ product.price | times: 0.01 }}' }, {% endfor %} ] }); </script> {% endif %}