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 funnelDisable 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-XXXXwith 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 pageSave 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.