Skip to content
  • There are no suggestions because the search field is empty.

Code for Tracking Purchases in Shopify with the legacy tracking code

Only use the following code if you are using the legacy tracking code:

🔧 Global Project JS Code

console.log('URL:' + location.href);
let enableCurrencyFunctionality = false;

_conv_q = window._conv_q || [];
_conv_q.push({
    what: 'addListener',
    params: {
        event: 'snippet.experiences_evaluated',
        handler: function() {
            let session_cookie = convert.getCookie('_conv_s');
            if (
                (JSON.stringify(convert.currentData.experiments) != '{}' ||
                    JSON.stringify(convert.historicalData.experiments) != '{}') &&
                session_cookie
            ) {
                let session_id = session_cookie.substring(
                    session_cookie.lastIndexOf('sh:') + 3,
                    session_cookie.lastIndexOf('*')
                );

                let exp_list = [];
                let variation_list = [];

                let varID;
                if (convert.currentData && convert.data && convert.data.experiments) {
                    let new_exp = convert.currentData.experiments;
                    for (let expID in new_exp) {
                      varID = new_exp[expID].variationId;
                        // Check for tp attribute from the main data object
                        if (convert.data.experiments[expID] && convert.data.experiments[expID].tp !== "4") {
                            if (!exp_list.includes(convert.data.experiments[expID].id)) {
                                exp_list.push(convert.data.experiments[expID].id);
                                variation_list.push(varID);
                                console.log(
                                    'Adding experiment: ' +
                                    convert.data.experiments[expID].id +
                                    ':' +
                                  varID);
                            }
                        }
                    }
                }
                if (convert.historicalData && convert.data && convert.data.experiments) {
                    let old_exp = convert.historicalData.experiments;
                    for (let expID in old_exp) {
                      varID = old_exp[expID].variationId;
                        // Check for tp attribute from the main data object
                        if (convert.data.experiments[expID] && convert.data.experiments[expID].tp !== "4") {
                            if (!exp_list.includes(convert.data.experiments[expID].id)) {
                                exp_list.push(convert.data.experiments[expID].id);
                                variation_list.push(varID);
                                console.log(
                                    'Adding experiment: ' +
                                    convert.data.experiments[expID].id +
                                    ':' +
                                    varID
                                );
                            }
                        }
                    }
                }

                let convert_attributes = {
                    cid: convert.data.u_id,
                    pid: convert.data.prj.id,
                    vid: session_id,
                    goals: '',
                    vars: variation_list,
                    exps: exp_list,
                    defaultSegments: convert.getDefaultSegments()
                };

                // Check and append currency information if enabled
                if (enableCurrencyFunctionality) {
                    if (Shopify && Shopify.currency && Currency) {
                        let baseCurrency = Shopify.currency.active;
                        let presentmentCurrency = Shopify.currency.current;
                        let conversionRate = Currency.convert(1, baseCurrency, presentmentCurrency);

                        if (!isNaN(conversionRate) && conversionRate !== 0) {
                            let currencySymbol = Currency.symbol;
                            convert_attributes.conversionRate = conversionRate;
                            convert_attributes.presentmentCurrency = presentmentCurrency;
                            convert_attributes.currencySymbol = currencySymbol;
                        } else {
                            console.error('Invalid conversion rate. Not adding currency information.');
                        }
                    }
                    localStorage.setItem('convert_attributes', JSON.stringify(convert_attributes));
                    console.log('convert_attributes initialized with currency info', convert_attributes);
                } else {
                    localStorage.setItem('convert_attributes', JSON.stringify(convert_attributes));
                    console.log('convert_attributes initialized', convert_attributes);
                }
            }
        }
    }
});

 

🛍️ Shopify Customer Events Tracking Code

// Fill in the following lines with your own goals

purchase_goalid = '100136097';
addToCart_goalid = '100134910';
checkoutStarted_goalid = '100132287';

function postTransaction(convert_attributes_str, purchase_event, purchase_goalid) {
    console.log("Starting postTransaction function.");

    try {
        var convert_attributes = JSON.parse(convert_attributes_str);

        if (convert_attributes && purchase_event) {
            console.log("Building POST data for transaction.");

            // Start with the original transaction amount
            let transactionAmount = parseFloat(purchase_event.data.checkout.totalPrice.amount);

            // Apply conversion rate if it exists and is not one
            if (convert_attributes.conversionRate && convert_attributes.conversionRate !== 1) {
                transactionAmount *= convert_attributes.conversion_rate;
                console.log(`Transaction amount adjusted by conversion rate (${convert_attributes.conversionRate}): ${transactionAmount}`);
            }

            const post = {
                'cid': convert_attributes.cid,
                'pid': convert_attributes.pid,
                'seg': convert_attributes.defaultSegments,
                's': 'shopify',
                'vid': convert_attributes.vid,
                'tid': purchase_event.data.checkout.order.id,
                'ev': [{
                    'evt': 'tr',
                    'goals': [purchase_goalid],
                    'exps': convert_attributes.exps,
                    'vars': convert_attributes.vars,
                    'r': transactionAmount,  // Use the possibly adjusted amount
                    'prc': purchase_event.data.checkout.lineItems.length
                }]
            };
            const data = JSON.stringify(post);
            const beaconUrl = `https://${convert_attributes.pid}.metrics.convertexperiments.com/track`;
            const beaconResult = browser.sendBeacon(beaconUrl, data);
            console.log("sendBeacon result:", beaconResult);
        } else {
            console.error("Invalid or missing convert_attributes or purchase_event.");
        }
    } catch (error) {
        console.error('Error in postTransaction:', error);
    }
}


function postConversion(convert_attributes_str, goalid) {
    console.log('Convert: Starting postConversion function with goal id:', goalid);

    try {
        var convert_attributes = JSON.parse(convert_attributes_str);
        
        if (convert_attributes) {
            console.log("Building POST data for goal hit.");
            const post = {
                'cid': convert_attributes.cid,
                'pid': convert_attributes.pid,
                'seg': convert_attributes.defaultSegments,
                's': 'shopify',
                'vid': convert_attributes.vid,
                'ev': [{
                    'evt': 'hitGoal',
                    'goals': [goalid],
                    'exps': convert_attributes.exps,
                    'vars': convert_attributes.vars
                }]
            };
            const data = JSON.stringify(post);
            const beaconUrl = `https://${convert_attributes.pid}.metrics.convertexperiments.com/track`;
            const beaconResult = browser.sendBeacon(beaconUrl, data);
            console.log("sendBeacon result:", beaconResult);
        } else {
            console.error("Invalid or missing convert_attributes or purchase_event.");
        }
    } catch (error) {
        console.error('Error in postTransaction:', error);
    }
}

analytics.subscribe("checkout_completed", async (event) => {
    console.log("Event received for checkout_completed.");

    browser.localStorage.getItem('convert_attributes')
        .then((result) => {
            postConversion(result, purchase_goalid);
            return result;
        })
        .then((originalResult) => {
            return postTransaction(originalResult, event, purchase_goalid);
        })
        .catch((error) => {
            console.error('Error in checkout_completed promise chain:', error);
        });
});

analytics.subscribe("product_added_to_cart", async (event) => {
    console.log("Event received for product_added_to_cart.");

    browser.localStorage.getItem('convert_attributes')
        .then((result) => {
            return postConversion(result, addToCart_goalid);
        })
        .catch((error) => {
            console.error('Error retrieving convert_attributes for product_added_to_cart:', error);
        });
});

analytics.subscribe("checkout_started", async (event) => {
    console.log("Event received for checkout_started.");

    browser.localStorage.getItem('convert_attributes')
        .then((result) => {
            return postConversion(result, checkoutStarted_goalid);
        })
        .catch((error) => {
            console.error('Error retrieving convert_attributes for checkout_started:', error);
        });
});