Skip to main content

How to Set up Upstack Data on Checkout Champ

This guide shows how to add the Upstack Data Pixel to Checkout Champ by inserting your Pixel ID into the script and placing it in the Global Scripts section.

Written by Fin
Updated today

Quick Summary

  • Copy your Pixel ID from Upstack Data

  • Insert the Pixel ID into the script

  • Add the script to the Global Scripts section of Checkout Champ, loaded in the <head> of every funnel

  • Disable the native Checkout Champ Facebook Pixel to avoid duplicate tracking

  • Save your changes

  • Verify your installation


Configuration Steps

Step 1: Find and Copy your Upstack Pixel ID

Your Upstack Data Pixel ID is a unique identifier linked to your store. This ID is used to track browser events and associate them with your account.

For step-by-step instructions on locating your Upstack Pixel ID, refer to this help article:


Step 2: Disable the Native Checkout Champ Facebook Pixel

Critical: Do This First!

Before adding the Upstack scripts, you must disable the native Checkout Champ Facebook Pixel integration. Running both simultaneously will cause duplicate event tracking, which leads to inflated metrics and poor ad optimization.

  • Log in to your Checkout Champ admin panel

  • Navigate to the Facebook Pixel settings (typically found under tracking or integration settings)

  • Remove or disable any existing Facebook Pixel ID configured in the native integration

  • Save your changes

This ensures Upstack Data is the sole source of pixel events, preventing duplication and ensuring accurate attribution.


Step 3: Insert your Pixel ID into the Script

  • Open the Pixel script provided below

  • Replace the placeholder Pixel ID with your own ID

Upstack Pixel Snippet

<!-- Global Script-->
<script src='https://prod2-cdn.upstackified.com/scripts/px/ups.min.js' async='true'></script>
<script>
window._adqLoaded = 0;
window._upsqueue = window._upsqueue || [];
window._upstack = window._upstack || function () {
window._upsqueue.push(arguments);
}
window._upstack('init', 'XXXX-XXXX-XXXXX-XXXX'); // replace with pixelID
window._upstack('page');
</script>
<!-- End Global Script-->

<!-- Checkout Champ ccpurchase Script-->
<script>
(function () {
function onReady(fn) {
if (document.readyState !== "loading") { fn(); }
else { document.addEventListener("DOMContentLoaded", fn); }
}

onReady(function () {
try {
var serializedOrderData = sessionStorage.getItem("orderData");
if (!serializedOrderData) {
console.log("No order data found");
return;
}
var orderDataTmp = JSON.parse(serializedOrderData);
var transactionId = orderDataTmp?.orderId;

if (!transactionId) {
console.log("Order data missing orderId, skipping ccpurchase");
return;
}

if (orderDataTmp?.orderStatus === "PARTIAL") {
console.log("Order is PARTIAL, skipping ccpurchase");
return;
}

var firedKey = "__upstack_cc_purchase_fired";
try {
var firedOrders = JSON.parse(sessionStorage.getItem(firedKey) || "[]");
if (Array.isArray(firedOrders) && firedOrders.indexOf(transactionId) !== -1) {
console.log("ccpurchase already fired for order:", transactionId);
return;
}
} catch (_e) {}

var emailAddress = orderDataTmp?.emailAddress;
var firstName = orderDataTmp?.firstName;
var lastName = orderDataTmp?.lastName;
var city = orderDataTmp?.city;
var country = orderDataTmp?.country;
var postalCode = orderDataTmp?.postalCode;
var orderValue = orderDataTmp?.totalAmount;
if (orderValue == null && orderDataTmp?.items) {
orderValue = 0;
Object.values(orderDataTmp.items).forEach(function (item) {
var price = parseFloat(item.basePrice != null ? item.basePrice : item.cycle1_price);
var qty = parseInt(item.productQty) || 1;
if (Number.isFinite(price)) orderValue += price * qty;
});
}

window._upstack('track', 'ccpurchase', {
email: emailAddress,
firstName: firstName,
lastName: lastName,
city: city,
country: country,
postalCode: postalCode,
value: orderValue,
transactionId: transactionId,
orderId: transactionId
});

try {
var stored = JSON.parse(sessionStorage.getItem(firedKey) || "[]");
if (Array.isArray(stored) && stored.indexOf(transactionId) === -1) {
stored.push(transactionId);
sessionStorage.setItem(firedKey, JSON.stringify(stored));
}
} catch (_e) {}
} catch (e) {
console.log(e);
}
});
})();
</script>
<!-- End Checkout Champ ccpurchase Script-->



<!-- Checkout Champ Initiate Checkout Script-->
<script>
(function () {
function getInitiateCheckoutFired() {
try {
return sessionStorage.getItem("initiateCheckoutFired") === "true";
} catch (error) {
return false;
}
}

function setInitiateCheckoutFired() {
try {
sessionStorage.setItem("initiateCheckoutFired", "true");
initiateCheckoutFired = true;
} catch (error) {
console.log("Error setting initiate checkout fired:", error);
}
}

var initiateCheckoutFired = getInitiateCheckoutFired();

function pollForOrderData() {
try {
var serializedOrderData = sessionStorage.getItem("orderData");
if (!serializedOrderData) {
console.log("No order data found, continuing to poll...");
return false;
}

var orderDataTmp = JSON.parse(serializedOrderData);

if (orderDataTmp.orderStatus === "PARTIAL" && orderDataTmp.orderType === "NEW_SALE") {
if (!initiateCheckoutFired && !getInitiateCheckoutFired()) {
console.log("[upstack-cc] initiate_checkout poll: PARTIAL+NEW_SALE detected, firing");
fireInitiateCheckout(orderDataTmp);
} else {
console.log("[upstack-cc] initiate_checkout poll: already fired, skipping");
}

return false; // Still PARTIAL — keep polling for completion
}

return true; // Order reached non-PARTIAL status — stop polling

} catch (e) {
console.log("Error polling order data:", e);
return false;
}
}

function fireInitiateCheckout(orderData) {
try {
var items = [];
var totalValue = 0;

if (orderData.items) {
Object.values(orderData.items).forEach(function (item) {
var rawPrice = item.basePrice != null ? item.basePrice : item.cycle1_price;
var itemPrice = parseFloat(rawPrice);
if (!Number.isFinite(itemPrice) || itemPrice <= 0) {
console.warn("[upstack-cc] Item missing valid price:", item.productName || item.productId);
itemPrice = 0;
}
var quantity = parseInt(item.productQty) || 1;

items.push({
id: item.productId.toString(),
quantity: quantity,
name: item.productName,
price: itemPrice,
variant: item.productSku
});

totalValue += itemPrice * quantity;
});
}

var trackingData = {
value: totalValue,
currency: 'USD',
items: items
};

if (orderData.emailAddress) trackingData.email = orderData.emailAddress;
if (orderData.firstName) trackingData.firstName = orderData.firstName;
if (orderData.lastName) trackingData.lastName = orderData.lastName;

if (orderData.shipCity || orderData.shipCountry || orderData.shipPostalCode) {
trackingData.addresses = [{
city: orderData.shipCity,
province: orderData.shipState,
countryCode: orderData.shipCountry,
zip: orderData.shipPostalCode
}];
}

console.log("[upstack-cc] initiate_checkout: calling _upstack", trackingData);
window._upstack('track', 'initiate_checkout', trackingData);
console.log("[upstack-cc] initiate_checkout: _upstack called. Pixel state:", {
initialized: window._upsClient?._initialized,
isDisabled: window._upsClient?._isDisabled,
queueLength: window._upsqueue?.length
});

setInitiateCheckoutFired();
} catch (e) {
console.log("[upstack-cc] Error firing initiate checkout:", e);
}
}

function onReady(fn) {
if (document.readyState !== "loading") { fn(); }
else { document.addEventListener("DOMContentLoaded", fn); }
}

onReady(function () {
var pollInterval = setInterval(function () {
var shouldStop = pollForOrderData();
if (shouldStop) {
clearInterval(pollInterval);
console.log("Order tracking complete, stopping poll");
}
}, 1000);

setTimeout(function () {
clearInterval(pollInterval);
console.log("Order polling timeout reached");
}, 300000);
});
})();
</script>
<!-- Checkout Champ lead Script-->

<!-- Checkout Champ Shared Utilities -->
<script>
window.__upstack_cc = (function () {
var DEDUPE_KEY = "__upstack_cc_dedupe_v1";

function loadDedupeSet() {
try {
var stored = JSON.parse(sessionStorage.getItem(DEDUPE_KEY) || "[]");
return Array.isArray(stored) ? stored : [];
} catch (_e) { return []; }
}

var dedupeList = loadDedupeSet();

function hasDeduped(key) {
return !!key && dedupeList.indexOf(key) !== -1;
}

function markDeduped(key) {
if (!key) return;
if (dedupeList.indexOf(key) === -1) {
dedupeList.push(key);
try { sessionStorage.setItem(DEDUPE_KEY, JSON.stringify(dedupeList)); } catch (_e) {}
}
}

function track(eventName, payload, dedupeKey) {
if (dedupeKey && hasDeduped(dedupeKey)) {
console.log("[upstack-cc] Deduped, skipping:", eventName, dedupeKey);
return false;
}
try {
console.log("[upstack-cc] Firing:", eventName, payload);
window._upstack("track", eventName, payload);
if (dedupeKey) markDeduped(dedupeKey);
return true;
} catch (e) {
console.log("[upstack-cc] Track error:", eventName, e);
return false;
}
}

function onReady(fn) {
if (document.readyState !== "loading") { fn(); }
else { document.addEventListener("DOMContentLoaded", fn); }
}

function toNumber(value) {
var parsed = parseFloat(String(value || "").replace(/[^\d.-]/g, ""));
return Number.isFinite(parsed) ? parsed : 0;
}

function getFieldValue(selector) {
var el = document.querySelector(selector);
return el ? (el.value || "").trim() : "";
}

function isElementVisible(el) {
if (!el) return false;
var style = window.getComputedStyle(el);
return style.display !== "none" && style.visibility !== "hidden" && style.opacity !== "0";
}

function getElText(el) {
return el ? (el.innerText || el.textContent || "").trim() : "";
}

function getElAttr(el, attr) {
return el ? (el.getAttribute(attr) || "").trim() : "";
}

function getTotals() {
try {
var totals = JSON.parse(sessionStorage.getItem("totals") || "{}");
return {
value: toNumber(totals.grandTotal),
tax: toNumber(totals.salesTax),
shipping: toNumber(totals.shipTotal),
currency: "USD",
};
} catch (_e) {
return { value: 0, tax: 0, shipping: 0, currency: "USD" };
}
}

function parseProductsFromQuery() {
var searchParams = new URLSearchParams(window.location.search);
var products = searchParams.get("products");
return products ? products.split(";").filter(Boolean) : [];
}

function buildItems() {
var productTokens = parseProductsFromQuery();
var ccRows = Array.prototype.slice.call(document.querySelectorAll(".cc-cart-row")).filter(isElementVisible);
var fkRows = Array.prototype.slice.call(document.querySelectorAll(".fk-custom-cart-view"));
var items = [];

if (ccRows.length > 0) {
for (var i = 0; i < ccRows.length; i++) {
var row = ccRows[i];
var token = (productTokens[i] || "").split(":");
var idParts = (token[0] || "").split(".");
items.push({
id: idParts[0] || "",
variant: idParts[1] || "",
name: getElText(row.querySelector(".cc-cart-row-prod-title")),
price: toNumber(getElText(row.querySelector(".cc-cart-row-prod-price.real-price"))),
currency: "USD",
quantity: Math.max(1, toNumber(token[1] || "1")),
imageUrl: getElAttr(row.querySelector(".cc-cart-row-img img"), "src"),
});
}
} else if (fkRows.length > 0) {
var tokenIndex = 0;
for (var j = 0; j < fkRows.length; j++) {
var fkRow = fkRows[j];
var title = getElText(fkRow.querySelector("#ie077"));
var priceText = getElText(fkRow.querySelector("#ihy31f"));
if (!title && !priceText) {
continue;
}
var fkToken = (productTokens[tokenIndex] || "").split(":");
var fkIdParts = (fkToken[0] || "").split(".");
tokenIndex += 1;
items.push({
id: fkIdParts[0] || "",
variant: fkIdParts[1] || "",
name: title.replace(/\n/g, " - "),
price: toNumber(priceText),
currency: "USD",
quantity: Math.max(1, toNumber(fkToken[1] || "1")),
imageUrl: getElAttr(fkRow.querySelector(".image-quantity-container img"), "src"),
});
}
}

return items.filter(function (item) {
return item.id || item.name;
});
}

function buildPayload() {
var totals = getTotals();
return {
value: totals.value,
currency: totals.currency,
tax: totals.tax,
shipping: totals.shipping,
items: buildItems(),
};
}

function getIdentityFields() {
var email = getFieldValue('[name="emailAddress"]');
var phone = getFieldValue('[name="phoneNumber"]') || getFieldValue('input[type="tel"]');
var fields = {};
if (email) fields.email = email;
if (phone) fields.phone = phone;
var firstName = getFieldValue('[name="shipFirstName"]');
var lastName = getFieldValue('[name="shipLastName"]');
if (firstName) fields.firstName = firstName;
if (lastName) fields.lastName = lastName;
var city = getFieldValue('[name="shipCity"]');
var state = getFieldValue('[name="shipState"]') || getFieldValue('select[name="shipState"]');
var countryCode = getFieldValue('select[name="shipCountry"]');
var zip = getFieldValue('[name="shipPostalCode"]');
if (city || countryCode || zip) {
var address = { city: city, provinceCode: state, countryCode: countryCode, zip: zip };
if (firstName) address.firstName = firstName;
if (lastName) address.lastName = lastName;
fields.addresses = [address];
}
return fields;
}

function hasRequiredShippingFields() {
var required = [
'[name="shipFirstName"]',
'[name="shipLastName"]',
'[name="shipCity"]',
'[name="shipPostalCode"]',
'select[name="shipCountry"]',
];
return required.every(function (selector) {
var el = document.querySelector(selector);
return el && (el.value || "").trim().length > 0;
});
}

return {
onReady: onReady,
track: track,
hasDeduped: hasDeduped,
buildPayload: buildPayload,
buildItems: buildItems,
getFieldValue: getFieldValue,
getIdentityFields: getIdentityFields,
hasRequiredShippingFields: hasRequiredShippingFields,
toNumber: toNumber,
};
})();
</script>
<!-- End Checkout Champ Shared Utilities -->


<!-- Checkout Champ add_to_cart Script -->
<script>
(function () {
var cc = window.__upstack_cc;
var lastCartHash = "";

function fireAddToCart() {
var payload = cc.buildPayload();
if (!payload.items.length) {
console.log("[upstack-cc] add_to_cart: no items found");
return false;
}

var cartHash = JSON.stringify({
items: payload.items,
value: payload.value,
tax: payload.tax,
shipping: payload.shipping,
});

if (cartHash === lastCartHash) return false;
lastCartHash = cartHash;

return cc.track("add_to_cart", payload, "atc:" + cartHash);
}

cc.onReady(function () {
var cartWatcherStart = Date.now();
var CART_WATCH_TIMEOUT = 300000;
var CART_HARD_STOP = 600000;
var cartInterval = setInterval(function () {
fireAddToCart();
var elapsed = Date.now() - cartWatcherStart;
if ((elapsed > CART_WATCH_TIMEOUT && lastCartHash) || elapsed > CART_HARD_STOP) {
clearInterval(cartInterval);
}
}, 800);

document.addEventListener("blur", function (event) {
var target = event.target;
if (target && target.matches && target.matches('input[name="emailAddress"]')) {
fireAddToCart();
}
}, true);
});
})();
</script>
<!-- End Checkout Champ add_to_cart Script -->


<!-- Checkout Champ initiate_checkout Script -->
<script>
(function () {
var cc = window.__upstack_cc;
var fired = cc.hasDeduped("ic");

cc.onReady(function () {
console.log("[upstack-cc] initiate_checkout: listener bound, fired=" + fired);
document.addEventListener("blur", function (event) {
if (fired) return;
var target = event.target;
if (!target || !target.matches || !target.matches('input[name="emailAddress"]')) return;
console.log("[upstack-cc] initiate_checkout: email blur detected");

var email = cc.getFieldValue('[name="emailAddress"]');
if (!email || !/\S+@\S+\.\S+/.test(email)) {
console.log("[upstack-cc] initiate_checkout: invalid email:", email);
return;
}

var payload = cc.buildPayload();
var identity = cc.getIdentityFields();
Object.keys(identity).forEach(function (key) {
payload[key] = identity[key];
});

var sent = cc.track("initiate_checkout", payload, "ic");
if (sent) fired = true;
}, true);
});
})();
</script>
<!-- End Checkout Champ initiate_checkout Script -->


<!-- Checkout Champ add_shipping_info Script -->
<script>
(function () {
var cc = window.__upstack_cc;
var fired = cc.hasDeduped("asi");

function checkOrderDataForShipping() {
if (fired) return true;
try {
var raw = sessionStorage.getItem("orderData");
if (!raw) return false;
var orderData = JSON.parse(raw);

if (!orderData.shipFirstName || !orderData.shipLastName) return false;
if (!orderData.shipCity && !orderData.shipCountry && !orderData.shipPostalCode) return false;

var payload = cc.buildPayload();
if (orderData.emailAddress) payload.email = orderData.emailAddress;
if (orderData.shipFirstName) payload.firstName = orderData.shipFirstName;
if (orderData.shipLastName) payload.lastName = orderData.shipLastName;
if (orderData.shipCity || orderData.shipCountry || orderData.shipPostalCode) {
payload.addresses = [{
firstName: orderData.shipFirstName,
lastName: orderData.shipLastName,
city: orderData.shipCity,
provinceCode: orderData.shipState,
countryCode: orderData.shipCountry,
zip: orderData.shipPostalCode,
}];
}

console.log("[upstack-cc] add_shipping_info: shipping fields found in orderData");
var sent = cc.track("add_shipping_info", payload, "asi");
if (sent) fired = true;
return sent;
} catch (_e) { return false; }
}

cc.onReady(function () {
var pollInterval = setInterval(function () {
var done = checkOrderDataForShipping();
if (done) {
clearInterval(pollInterval);
}
}, 1000);

setTimeout(function () {
clearInterval(pollInterval);
}, 300000);
});
})();
</script>
<!-- End Checkout Champ add_shipping_info Script -->


<!-- Checkout Champ add_payment_info Script -->
<script>
(function () {
var cc = window.__upstack_cc;
var fired = cc.hasDeduped("api");

function fireAddPaymentInfo() {
if (fired) return false;
console.log("[upstack-cc] add_payment_info: triggered");

var payload = cc.buildPayload();
var identity = cc.getIdentityFields();
Object.keys(identity).forEach(function (key) {
payload[key] = identity[key];
});

var sent = cc.track("add_payment_info", payload, "api");
if (sent) fired = true;
return sent;
}

cc.onReady(function () {
document.addEventListener("click", function (event) {
var target = event.target;
if (target && target.matches && target.matches('[name="fk-payment-option-toggler"]')) {
fireAddPaymentInfo();
}
}, true);

document.addEventListener("input", function (event) {
var target = event.target;
if (target && target.matches && target.matches('[name="cardNumber"]')) {
fireAddPaymentInfo();
}
}, true);
});
})();
</script>
<!-- End Checkout Champ add_payment_info Script -->

Important:

  • Replace XXXX-XXXX-XXXXX-XXXX with the Pixel ID you obtained in Step 1.

  • Enter the Pixel ID exactly as provided to ensure proper tracking across all pages.

The complete Checkout Champ tracking script includes additional event tracking scripts for ccpurchase, initiate checkout, shared utilities, add_to_cart, add_shipping_info, and add_payment_info. The full script block will be provided by the Upstack Data team during onboarding. Paste the Global Script above along with all event tracking scripts together into the Global Scripts section.


Step 4: Add the Script to Checkout Champ Global Scripts

  • Log in to your Checkout Champ admin panel

  • Navigate to the Global Scripts section

  • Paste the entire script block (Global Script plus all event tracking scripts)

  • Ensure the script is set to load in the <head> of every funnel page

  • Save your changes


Step 5: Verify the Installation

  • Visit one of your funnel pages in a browser

  • Use the Upstack Data Pixel Helper (or your browser developer console) to confirm the pixel is firing correctly

  • Walk through a test checkout to verify each event fires


Events Tracked

Once installed, the following events are automatically tracked:

  • page - Fires on every page load

  • initiate_checkout - Fires when a customer enters their email or an order begins

  • purchase - Fires on completed (non-partial) orders


Need help?

If you encounter any issues during setup, contact our support team we'll help diagnose the problem.

Did this answer your question?