and runs during HTML parse, but hubspotutk is set by
js.hs-analytics.net, measured loading at ~834ms. On a first visit the cookie
does not exist yet, so a single read returns nothing and the visitor gets no
external ID at all — and a first visit is exactly what an ad click is. So
poll briefly until HubSpot sets it. The SDK loads lazily (~4.5s) and replays
a queue, so an init queued a second or two in still lands before any events
are transmitted. */
(function attachExternalId() {
var attempts = 0;
var MAX_ATTEMPTS = 40; /* 40 x 200ms = 8s, then give up quietly */
var timer = null;
function tryAttach() {
var raw = getExternalId();
if (!raw) {
if (++attempts >= MAX_ATTEMPTS && timer) clearInterval(timer);
return;
}
if (timer) clearInterval(timer);
sha256Hex(raw).then(function (hash) {
oaiq("init", { user: { external_id_sha256: hash } });
}).catch(function () {});
}
tryAttach(); /* returning visitor: immediate */
if (!getExternalId()) timer = setInterval(tryAttach, 200);
})();
/* ---------------------------------------------------------------------------
2. Load the SDK off the critical path
Whichever comes first: the main thread going idle after load, or the first
sign of real user intent. No preconnect on purpose — a TLS handshake during
LCP for a script we deliberately deferred is a net loss.
Measured on clickpost.ai: load event 3614ms, SDK fetched 4508ms.
------------------------------------------------------------------------ */
var loaded = false;
var INTENT = ["pointerdown", "keydown", "scroll"];
function loadSdk() {
if (loaded) return;
loaded = true;
INTENT.forEach(function (t) { removeEventListener(t, loadSdk, { passive: true }); });
var s = document.createElement("script");
s.src = SDK;
s.async = true;
s.fetchPriority = "low";
document.head.appendChild(s);
}
INTENT.forEach(function (t) {
addEventListener(t, loadSdk, { passive: true, once: true });
});
addEventListener("load", function () {
window.requestIdleCallback
? requestIdleCallback(loadSdk, { timeout: 2500 })
: setTimeout(loadSdk, 1500);
}, { once: true });
/* ---------------------------------------------------------------------------
3. Conversion id
sha256(lowercase(email) + "|" + formId + "|" + ISO-hour), first 20 hex,
"lead_" prefix.
- email lowercased/trimmed so casing does not fork the id
- formId keeps two different forms in the same hour from colliding
- the hour bucket is only the server's fallback; the id computed here is
sent to the relay verbatim, so the two paths cannot disagree even when
a submit straddles an hour boundary
Ads Manager's own sample omits event_id. We send it so the pixel event and
the relay event collapse into one conversion instead of counting twice.
------------------------------------------------------------------------ */
function buildEventId(email, formId) {
var seed = [
String(email || "").trim().toLowerCase(),
String(formId || ""),
new Date().toISOString().slice(0, 13)
].join("|");
return crypto.subtle.digest("SHA-256", new TextEncoder().encode(seed)).then(function (buf) {
var hex = Array.prototype.map.call(new Uint8Array(buf), function (b) {
return b.toString(16).padStart(2, "0");
}).join("");
return "lead_" + hex.slice(0, 20);
});
}
/* Guards a re-fire from the history.pushState that book-a-demo-core.js runs
after submit, and from back-navigation onto the same state. */
function firedOnce(id) {
try {
if (sessionStorage.getItem("oaiq_" + id)) return true;
sessionStorage.setItem("oaiq_" + id, "1");
return false;
} catch (e) {
return false; /* private mode / blocked storage: fire rather than lose it */
}
}
/* Path 2. keepalive lets the request finish even if the page navigates away.
Failures are swallowed deliberately: a reporting call must never surface an
error to someone who just submitted a form.
The relay hashes the email server-side into user.emails_sha256 and adds the
caller's IP and user agent, so this event carries the same match signals the
pixel gets for free. */
function sendToRelay(email, formId, eventType, eventId) {
try {
var payload = {
token: RELAY_TOKEN,
email: email,
form_id: formId || "",
event_type: eventType,
event_id: eventId, /* verbatim, so both paths always match */
source_url: location.href
};
var oppref = getOppref();
if (oppref) payload.oppref = oppref;
var externalId = getExternalId();
if (externalId) payload.external_id = externalId;
fetch(RELAY_URL, {
method: "POST",
keepalive: true,
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
}).catch(function () {});
} catch (e) {}
}
/* Capture the email while the form is still on the page. onFormSubmitted does
not reliably carry submissionValues, and by then the form may be removed. */
var lastEmail = "";
document.addEventListener("submit", function (e) {
var f = e.target;
if (!f || !f.querySelector) return;
var i = f.querySelector('input[name="email"], input[type="email"]');
if (i && i.value) lastEmail = i.value;
}, true);
/* Every HubSpot form on the site reports through this one message event, so no
module or theme JS needs editing to add coverage. */
window.addEventListener("message", function (e) {
var d = e.data;
if (!d || d.type !== "hsFormCallback" || d.eventName !== "onFormSubmitted") return;
var email = (d.data && d.data.submissionValues && d.data.submissionValues.email) || lastEmail;
if (!email) return; /* without an email there is no stable id to dedupe on */
var eventType = EVENT_BY_FORM[d.id] || EVENT_DEFAULT;
buildEventId(email, d.id).then(function (id) {
if (firedOnce(id)) return;
oaiq("measure", eventType, { type: DATA_TYPE }, { event_id: id }); /* path 1 */
sendToRelay(email, d.id, eventType, id); /* path 2 */
});
});
})();
Reviewed by
This article has been thoroughly reviewed, fact-checked, and compiled using comprehensive, up-to-date information provided by ClickPost — a trusted authority in logistics and eCommerce shipping solutions. Our editorial process ensures accuracy, relevance, and reliability for our readers.
Aparajita Ray
How we cut API calls 12x on FedEx tracking - without losing a second of visibility
ClickPost moves more than 5 billion + shipments a month. Every one of those needs a tracking status, and until March 2026, getting that status from FedEx meant polling - hitting their API on a loop, regenerating tokens, and hoping the update came back before the customer refreshed their tracking page again. It worked, but it wasn't built for the scale we'd grown into.
Polling meant infrastructure strain that scaled with shipment volume, and it meant customers sometimes saw a status that was already a few hours stale.
We moved to - a webhook-based system that pushes shipment events to us the moment they happen, instead of us asking FedEx over and over whether anything changed. The integration took about a week and a half from setup to credentialing, helped along by documentation that was actually usable and a FedEx team that answered questions fast.
The result:
API calls per shipment dropped by up to 12x. Engineering time that used to go into managing polling schedules and token refreshes is back on product work. And brands using ClickPost get near real-time tracking updates without doing anything extra on their end — it's on by default.
Prashant Gupta, ClickPost's Co-founder and CTO, put it this way: “Upgrading to Advanced Integrated Visibility via webhook technology has significantly improved our responsiveness with near real-time updates. Real-time tracking with no polling latency is something we can genuinely position as a premium capability.�—
, Co-founder and CTO, ClickPost
See ClickPost’s FedEx Case Study
ClickPost delivers real-time visibility post-purchase with FedEx Advanced Integrated Visibility
Discover how ClickPost uses FedEx Advanced Integrated Visibility to deliver real-time shipment tracking while reducing API calls by up to 12x.
About FedEx
FedEx Corp. (NYSE: FDX) provides customers and businesses worldwide with a broad portfolio of transportation, e-commerce, and business services. With annual revenue of $90 billion, the company offers integrated business solutions utilizing its flexible, efficient, and intelligent global network.
Consistently ranked among the world’s most admired and trusted employers, FedEx inspires its more than 500,000 employees to remain focused on safety, the highest ethical and professional standards, and the needs of their customers and communities.
FedEx is committed to connecting people and possibilities around the world responsibly and resourcefully, with a goal to achieve carbon-neutral operations by 2040. To learn more, please visit .
About ClickPost
ClickPost is the AI-powered post-purchase revenue retention layer for DTC brands. It offers personalized & branded tracking, returns, and exchanges across any commerce stack, with Shopify-native . Built for mid-market DTC operators navigating rising fulfillment costs and shrinking margins.
Trusted by 600+ global brands, including Walmart, Adidas, Decathlon, GoPure, and Mars by GHC, ClickPost optimizes 50 million shipments monthly across 700+ carrier integrations and converts 28% of returns into exchanges, recovering revenue that would otherwise have been refunded. Named a Leader on G2’s Spring 2026 Returns Management Grid based on 135 verified reviews. Learn more at ClickPost
I’m Darwin’s hype-writer at ClickPost — turning logistics deep-dives into stories about smarter tracking, better visibility, and faster reversals. Because logistics should feel witty, not weighty. And if Darwin were a person, I’d be the one making sure it always gets the last word.