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 */ }); }); })();

91ÊÓÆµ

See where your logistics stands on automation Start assessment

Logistics Automations that Scale with Your Ambitions

Single API for 600+ Carriers
30+ Hyperlocal Carrier Integrations
25+ WMS, OMS, Storefronts
60+ Communication Gateways
Carrier Integrations Solution

Trusted by 450+ global brands

puma-slider-logo
Snitch Logo new
The Body Shop - Slider Logo
adidas-slider-logo
Sotheby - SVG - 50
Herbalife - SVG - 50
Birkenstock - SVG - 50
Oriflame - SVG - 50
  • Plum Case Study - BG
    I appreciate how Clickpost provides real-time updates on the status and location of my shipments. It's reassuring to know exactly where my packages are at all times.
    Rajat Mehra - Plum

    Rajat Mehra

    Product Manager, Plum

  • TMRW - Case Study - BG
    ClickPost Integration is seamless. It has helped us with tracking, courier allocation and returns management. We also appreciate the accuracy and smart allocation through the EDD app.
    Amit Singh - Avatar

    Amit Singh

    Project Manager, TMRW House of Brands

Accelerate your order to delivery timeline by 35%

ClickPost turns your chaotic shipping process into a data-driven, automated operation that drives growth, cuts costs, and increases productivity.

Automate Carrier Allocation

Automate carrier allocation

  • Icon - 1 Real-time serviceability check for pincodes and carriers.
  • Icon - 2 AI powered carrier allocation, automated for every order.
  • Icon - 3 Quick Commerce specific serviceability and allocation.
Error-free Order Creation and Label Generation

Error-free order creation and label generation

  • Icon - 4 Automatically fetch AWBs from carriers.
  • Icon - 5 Generate standardized labels across all carriers.
  • Icon - 1 Replace manual work with automated precision.
Simplify Customer and Carrier Communication

Simplify customer and carrier communication

  • Icon - 1 Power real-time notifications to customers. 
  • Icon - 6 Get standardized tracking for your teams. 
  • Icon - 7 Reduce WISMO by 80%
All the integrations you need,
one powerful platform
Shopify - Fit
Increff - Fit
SAP
Vinculum - Fit
Shiphero - Fit
Woo Commerce - Fit
Dukaan - Fit
Magento - Fit
Capillary - Fit
UPS-svg
Delhivery - Fit
Bluedart - Fit

Deliver AI-powered customer delight

fi_3165964

Provide accurate delivery dates

AI-predicted delivery dates on product pages boost conversions. Enhance customer confidence. 
Give Peace of Mind - Banner
fi_15917116

Automate NDR resolutions

Parth, our AI voice agent rescues failed deliveries on a single call. And schedules reattempts with carriers.
Automate NDR Resolutions - Banner
Give Peace of Mind - Banner
Automate NDR Resolutions - Banner
Straight from the blog
Carrier Supercharge Your Fashion Store’s Delivery with Multi-Carrier Shipping
25 Aug, 2025 &²Ô²ú²õ±è;•&²Ô²ú²õ±è; 1 Min Read
Carrier Single Carrier vs. Multi-Carrier: Which Is Best for Your Business?
23 Jul, 2025 &²Ô²ú²õ±è;•&²Ô²ú²õ±è; 1 Min Read
eCommerce What Is Ecommerce Automation? How It Works, Benefits, and Key Tools (2026)
01 Nov, 2024 &²Ô²ú²õ±è;•&²Ô²ú²õ±è; 1 Min Read

Frequently asked questions

How easy is it to integrate ClickPost into our tech stack?

ClickPost offers a single integration to help brands connect with multiple carriers, OMS, WMS, ERPs, and e-commerce platforms, making it an easy tech installation. The setup process is quick and smooth—most brands go live within days, minimizing development effort while ensuring a smooth onboarding and uninterrupted operations.

What systems and platforms does ClickPost integrate with?

ClickPost integrates with 500+ carriers and all leading OMS, WMS, ERP, and accounting systems. New carriers can be integrated with in just 24 hours. It also connects seamlessly with storefront platforms like Shopify, Magento, WooCommerce, and custom-built stores, as well as major marketplaces like E-Bay—helping brands manage logistics and post-purchase experiences from a single dashboard.

What support does ClickPost provide during integration and afterwards?

ClickPost offers dedicated onboarding specialists, sandbox environments, and detailed API documentation to make integration smooth. Post-integration, brands get 24/7 support, proactive monitoring, and regular updates to ensure logistics operations stay optimized and efficient.

What is NDR management, and how does ClickPost help reduce failed deliveries?

NDR (Non-Delivery Report) management is the end-to-end process of tracking and resolving failed deliveries or delivery exceptions. ClickPost automates customer communication, re-attempt scheduling, and carrier coordination through AI-driven workflows. It uses a single dashboard and AI NDR Agent Parth to help brands reduce delivery failures, improve first-attempt success rates, and retain customers.

Which logistics processes can ClickPost automate for us?

There are a plethora of fulfillment processes that can be simplified and optimized through automation.  ClickPost automates a variety of them, ensuring as much as 76% improvement in operational efficiency. These include carrier allocation, label and manifest generation, and order tracking during the delivery process. 

Additional benefits of automation include COD reconciliation, SLA monitoring, and customer notifications/feedback collection. Alongside this, ClickPost also offers a streamlined returns and exchange system, as well as an AI-supported NDR Management workflow. This reduces manual effort, improves delivery success, creates a seamless post-purchase experience for your customers and has the proven result of reducing logistics costs by up to 15%.

. window.disableHubSpotCookieBanner = true; function killNative() { var n = document.getElementById("hs-eu-cookie-confirmation"); if (n && n.parentNode) { n.parentNode.removeChild(n); return true; } return false; } killNative(); if (window.MutationObserver) { var mo = new MutationObserver(function () { killNative(); }); mo.observe(document.documentElement, { childList: true, subtree: true }); setTimeout(function () { mo.disconnect(); }, 15000); } var COOKIE = "cp_cookie_consent"; var EU = ["at","be","bg","hr","cy","cz","dk","ee","fi","fr","de","gr","hu","ie","it","lv","lt","lu","mt","nl","pl","pt","ro","sk","si","es","se","gb","uk","is","li","no","ch"]; function readCookie(nm) { var m = document.cookie.match(new RegExp("(?:^|; )" + nm + "=([^;]*)")); return m ? decodeURIComponent(m[1]) : null; } function writeCookie(nm, val, days) { var d = new Date(); d.setTime(d.getTime() + (days * 864e5)); document.cookie = nm + "=" + encodeURIComponent(val) + ";expires=" + d.toUTCString() + ";path=/;SameSite=Lax" + (location.protocol === "https:" ? ";Secure" : ""); } function stored() { var raw = readCookie(COOKIE); if (!raw) return null; try { var o = JSON.parse(raw); if (typeof o.analytics === "boolean") return o; } catch (e) {} return null; } function apply(state, revoke) { window._hsp = window._hsp || []; window._hsp.push(["setHubSpotConsent", { analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality }]); if (revoke && !state.analytics && !state.advertisement && !state.functionality) { window._hsp.push(["revokeCookieConsent"]); } window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: "cp_cookie_consent", cp_consent_analytics: !!state.analytics, cp_consent_advertisement: !!state.advertisement, cp_consent_functionality: !!state.functionality }); document.documentElement.setAttribute("data-cp-consent", "set"); } function inScope(banner) { if (banner.getAttribute("data-scope") !== "eu_only") return true; var geo = (document.body.getAttribute("data-geo_location") || "").toLowerCase(); if (!geo) return true; return EU.indexOf(geo) !== -1; } function init(banner) { var days = parseInt(banner.getAttribute("data-days"), 10) || 180; var prefs = banner.querySelector("[data-cpcb-prefs]"); var compact = banner.querySelector('[data-cpcb-actions="compact"]'); var expanded = banner.querySelector('[data-cpcb-actions="expanded"]'); var toggles = banner.querySelectorAll("[data-cpcb-toggle]"); function show() { banner.hidden = false; requestAnimationFrame(function () { banner.classList.add("is-visible"); }); } function hide() { banner.classList.remove("is-visible"); setTimeout(function () { banner.hidden = true; }, 300); } function collapse() { if (!prefs) return; prefs.hidden = true; if (expanded) expanded.hidden = true; if (compact) compact.hidden = false; } function expand() { if (!prefs) return; prefs.hidden = false; if (compact) compact.hidden = true; if (expanded) expanded.hidden = false; } function paint(state) { Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key === "necessary") { t.setAttribute("aria-checked", "true"); return; } t.setAttribute("aria-checked", state[key] ? "true" : "false"); }); } function fromToggles() { var state = { analytics: false, advertisement: false, functionality: false }; Array.prototype.forEach.call(toggles, function (t) { var key = t.getAttribute("data-cpcb-toggle"); if (key in state) state[key] = t.getAttribute("aria-checked") === "true"; }); return state; } function commit(state, revoke) { writeCookie(COOKIE, JSON.stringify({ analytics: !!state.analytics, advertisement: !!state.advertisement, functionality: !!state.functionality, v: 1, ts: Date.now() }), days); apply(state, revoke); hide(); } Array.prototype.forEach.call(toggles, function (t) { if (t.disabled) return; t.addEventListener("click", function () { t.setAttribute("aria-checked", t.getAttribute("aria-checked") === "true" ? "false" : "true"); }); }); banner.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var btn = e.target.closest("[data-cpcb-action]"); if (!btn) return; var action = btn.getAttribute("data-cpcb-action"); if (action === "customise") { expand(); return; } if (action === "accept") { commit({ analytics: true, advertisement: true, functionality: true }, false); return; } if (action === "reject") { commit({ analytics: false, advertisement: false, functionality: false }, true); return; } if (action === "save") { commit(fromToggles(), true); return; } }); var existing = stored(); if (existing) { apply(existing, false); paint(existing); collapse(); } else if (!inScope(banner)) { // Out of the consent-required region: implied consent, banner never shown. commitSilently(); } else { collapse(); show(); } function commitSilently() { var all = { analytics: true, advertisement: true, functionality: true }; writeCookie(COOKIE, JSON.stringify({ analytics: true, advertisement: true, functionality: true, v: 1, ts: Date.now(), implied: true }), days); apply(all, false); } // Public re-open hook for a footer "Cookie settings" link. window.cpCookieBanner = window.cpCookieBanner || {}; window.cpCookieBanner.open = function () { var s = stored() || { analytics: false, advertisement: false, functionality: false }; paint(s); expand(); show(); }; } function boot() { var banners = document.querySelectorAll("[data-cpcb]"); if (!banners.length) return; init(banners[0]); document.addEventListener("click", function (e) { if (!e.target || !e.target.closest) return; var trigger = e.target.closest("[data-cp-cookie-settings]"); if (!trigger) return; e.preventDefault(); if (window.cpCookieBanner && window.cpCookieBanner.open) window.cpCookieBanner.open(); }); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", boot); } else { boot(); } })();