My Post-Purchase Upsell Tags Won't Fire in Shopify Checkout

Using the Shopify Post-Purchase Upsells & are having trouble capturing purchase/upsell data in GA4 and Google Ads?

Overview

Scenario:

  • You are using an app (e.g. Zipify, Carthook) that trigger a post-purchase upsell funnel in the native Shopify checkout.
  • You followed our guide to install the Shopify Source. Some of the marketing destinations like Facebook, you are seeing data populate accurately, but in others (e.g. GA4 or Google Ads), you are not seeing data populate.

The Solution:

  • You can setup GA4 and Google Ads to fire their tracking on the final Thank You Page while keeping Facebook firing on the upsell pages!

Add a New DataLayer Code to your Order Status Page

Access Order Status Page Additional Scripts:

  • Begin on your Shopify homepage and click on the "Settings" button or the gear icon in the lower left-hand corner of the page.
    • Once in the settings, use the left-hand menu to click on the "Checkout Settings" tab.
    • Navigate to the "Order Status Page" and locate the "Additional Scripts" box.
    • Add the below code into the Additional Scripts section:
{% if first_time_accessed %}

    <script>

    var elevarLineItems = []

    window.addEventListener('load', function(){

        window.dataLayer = window.dataLayer || [];

        window.dataLayer.push({

            "event": "thankyou_purchase",

            "user_properties":{

              "customer_id": "{{ customer.id | remove: "'" }}",

              "customer_email": "{{ customer.email }}",

              "customer_first_name": "{{ customer.first_name }}",

              "customer_phone": "{{ customer.default_address.phone }}",

              "customer_last_name": "{{ customer.last_name }}",

              "customer_city": "{{ customer.default_address.city }}",

              "customer_zip": "{{ customer.default_address.zip }}",

              "customer_address_1": "{{ customer.default_address.address1 }}",

              "customer_address_2": "{{ customer.default_address.address2 }}",

              "customer_country": "{{ customer.default_address.country_code }}",

              "customer_province": "{{ customer.default_address.province }}",

              "customer_order_count": "{{customer.orders_count}}",

              "customer_total_spent": "{{customer.total_spent}}"

            },

            "ecommerce": {

                "currencyCode": "{{ checkout.currency }}",

                "purchase": {

                    actionField: {

                        {%- if checkout.order_id -%}

                            id: {{- checkout.order_id | json -}},

                        {%- else -%}

                            id: {{- checkout.id | json -}},

                        {%- endif -%}

                        {%- if checkout.order_name -%}

                            order_name: {{- checkout.order_name | json -}},

                        {%- endif -%}

                        affiliation: {{- shop.name | json -}},

                        revenue: "{{- checkout.total_price | times: 0.01 | json -}}",

                        tax: "{{- checkout.tax_price | times: 0.01 | json -}}",

                        shipping: "{{- checkout.shipping_price | times: 0.01 | json -}}",

                        {% if checkout.discount_applications %}

                            coupon: {{ checkout.discount_applications[0].title | json }},

                        {% endif %}

                        {%- if order.subtotal_price -%}

                            subTotal: "{{- order.subtotal_price | times: 0.01 | json -}}",

                        {%- elsif checkout.subtotal_price -%}

                            subTotal: "{{- checkout.subtotal_price | times: 0.01 | json -}}",

                        {%- endif -%}

                        productSubTotal: "{{- checkout.line_items_subtotal_price | times: 0.01 | json -}}",

                        discountAmount: "{{- checkout.discounts_amount | times: 0.01 | json -}}"

                        },

                    "products": [

                     {%- for line_item in checkout.line_items -%}

                        {
                            "name": {{- line_item.product.title | json -}},

                            {%- if line_item.sku != blank -%}

                                "id": {{- line_item.sku | json -}},

                            {%- else -%}

                                "id": "{{- line_item.product_id | json -}}",

                            {%- endif -%}

                            "product_id": "{{- line_item.product_id | json -}}",

                            "variant_id": "{{- line_item.variant_id -}}",

                            "price": "{{- line_item.final_price | times: 0.01 | json -}}",

                            "brand": {{- line_item.vendor | json -}},

                            "category": {{- line_item.product.type | json -}},

                            "variant": {{- line_item.variant.title | json -}},

                            "quantity": "{{- line_item.quantity | json -}}",

                        },

                    {%- endfor -%}

                    ],

                }

            }

        });

    }, false);

    </script>

{% endif %}

Create a New Trigger in Google Tag Manager

Add New Trigger:

  • Begin on your Google Tag Manager homepage and use the left-hand menu to click on the "Triggers" tab.
  • Locate and click on the "New" button.
    • (See Figure 1)

Step 1 screenshotFigure 1

Create "Event - thankyou_purchase" Trigger:

  • An additional pop-up window will appear to create a new Trigger.
    • Navigate to the upper left-hand corner of the page and use the text box to title the Trigger "Event - thankyou_purchase".
    • Navigate to the section of the page titled "Trigger Type" and select "Custom Event".
    • Navigate to the section of the page titled "Event Name" and use the text box to type "thankyou_purchase".
    • Navigate to the section of the page titled "This trigger fires on" and select the "All Custom Events" option.
  • After selecting all of the required information for the new Trigger, be sure to save your changes and click on the "Save" button in the upper right-hand corner of the window.
    • (See Figure 2)

Step 2 screenshot

Figure 2

Update Your Desired Purchase Tags

Access Purchase Tags:

  • Begin on your Google Tag Manager homepage and use the left-hand menu to click on the "Tags" tab.
  • Locate and click on the the Purchase Tag for the marketing destination that isn't able to fire on Shopify's Upsell Page (e.g. GA4 or Google Ads).
    • (See Figure 3)

Step 3 screenshot

Figure 3

Add New Trigger:

  • Once in the desired Purchase Tag, navigate to the section of the page titled "Triggering".
    • Remove the "Event - purchase" Trigger by clicking on the "-" button.
    • Add the newly created "Event - thankyoupurchase" Trigger by clicking on the "+" button.
  • After making the required changes, be sure to save your changes by clicking on the "Save" button in the upper right-hand corner of the page.
    • (See Figure 4)

Step 4 screenshot

Figure 4

(Optional): For Google Ads Only

  • Google Ads will deduplicate transactions sent based on transaction_id. The same transaction_id is passed on the post_purchase page as the thank_you page. To capture the most website conversions in Google Ads, it is recommended that you add both the "Event - purchase" and "Event - thankyou_purchase" as triggers.
  • Update the "Google Ads Conversion - Purchase" and the "Google Ads Remarketing - Purchase" tags.
    • (See Figure 5)

Step 1 screenshot_Figure 5_

🚧

Note: This is not recommended for other marketing destinations as most use different criteria for deduplication and would lead to duplication_

Publish Changes:

  • In your current workspace, click on the "Submit" button in the upper right hand corner of the page.
    • An additional confirmation page will appear. Be sure to click on the "Publish" button in the upper right-hand corner of the page.
    • (See Figure 6)

Step 5 screenshot

Figure 6