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

Apex Control Tower

Find Where You're Breaking.
Act on it Automatically

Apex Control Tower watches every shipment in real time. Forward, reverse, RTO, quick commerce and B2B/Bulk. It then fixes exceptions before they become customer complaints.

Live dashboard — hover any tile for real-time detail
app.clickpost.ai · Control Tower
Delivery SLA · last 14 days ▲ 1.4 pts
94.2% Today · hover to scrub
Jun 6Jun 12Today
Pending pickups · aging
2,847
pending
0–6 hrs1,180
6–24 hrs820
24–48 hrs540
48+ hrs307
On-time delivery
96.8%
▲ 2.1% vs last week
NDR resolved
<40min
Avg, with auto buyer outreach
Carrier performance on-time %, last 24h · hover a row
Delhivery 96.1%
Blue Dart 94.7%
Ekart 91.3%
Shadowfax 82.4%
Smart Alert · a carrier lane just crossed your NDR threshold. Review →
5B+
Shipments optimized annually
450+
Global brands
600+
Carrier integrations
200B+
Micro-data points enriching network

1.5 Million+ Daily Shipments

Before vs after Apex

The same operation
A completely different morning

Drag the divider down over one operation lead's Tuesday. Left of it is the morning without Apex: standups, courier calls, pivot tables by hand. Right of it, the same morning with Apex working ahead of them.

drag to compare
A morning split in two 50% still the old way

Apex senses, decides and acts across
every journey of your supply chain

Beyond just flagging what is wrong. Corrective actions taken. Escalated to the right partners.

Unifies every operations system you run

Platform-agnostic by design, it reconciles your OMS, WMS, CRM, 600+ carriers and ClickPost - into a single source of truth.

Group 2147202967
Smart Alerts, sent where you and your partners work

Set your thresholds; each breach routes to the right SPOC over the channel for faster actions.

The ₹ at risk, not just the shipments

Every stuck, failed and RTO shipment carries a monetary value, visible to leadership in real time.

Catch the breach before it happens

Breach risk surfaces 24–48h before the promise date. Apex spots and escalates on its own. Before your customers notice.

Promise date in 36h High risk · 72%

Personalize Apex Control Tower for
your operating network

Build the widgets you actually care about. Create role-specific views for increased focus. Get granular data on an AWB level. Set smart alerts as per your thresholds and operational benchmarks.

Build a widget
Drag-and-drop · no SQL, no tickets
Metric
Group by
Visualize as
SLA compliance · by Carrier Live preview
95.2% ▲ 8.2% since Jun 6
Today · hover the curve to scrub
Jun 6Jun 12Today

An alert isn't the end of the work.
It sets corrective actions in motion.

Apex smart alerts don't stop at the notification. Each detection carries its own root cause and data, owner and recommended action for faster corrections by your partners.

Schedule Alert
Define the time and the frequency of the alert
* Alert Time
HH:MM
AM PM
Alert Frequency
Daily
Every day of the week.
Every Weekday
Every Monday to Friday.
Alternate Days
Every 48 hours.
Detect

Baseline deviation caught the instant it happens

Diagnose

Root cause, impact and owner attached automatically

Act

Re-route, escalate or notify, automatically. Schedule weekly reports for reviews.

Proof, not promises

What changes when
Apex monitors your network

Whether you are an enterprise or a scaling brand, Apex control tower becomes the path to achieving operational excellence.

  • The Bear House-1

    Before Apex, the first hour of every day went to pulling reports from multiple couriers and building pivot tables just to find where shipments were stuck. Now we catch issues before the customer ever writes in.

    Nayana Chethan
    Nayana Chethan
    Customer Support Head, The Bear House
  • Avimee Herbal

    With the smart alerts set in the Apex Control Tower, we’re literally having to put in less efforts to understand where the problem is and manage them faster

    Kamal Kumawat
    Kamal Kumawat
    Head of Supply Chain at Avimee Herbal
  • Dot and Key

    Before Apex Control Tower, everything was manual: pickup handling, order processing, NDR. Now smart alerts and single-dashboard visibility into every breach have lifted productivity across both ops and CX teams.

    Soumyadip Singha
    Soumyadip Singha
    Operations Manager, Dot & Key

Command all your movements with Apex

Forward movements

Full journey visibility
Know exactly which stage every shipment is stuck at, before support gets the complaint.
SLA and EDD tracking
Flag delivery promises at risk of breach while there's still time to act.
Bottleneck detection
Flag delivery promises at risk of breach while there's still time to act.
Forward

Reverse movements

Return visibility that matches forward
Never lose track of a return between pickup and warehouse.
Pickup failure diagnosis
Fix the address or scheduling issue causing repeat pickup failures.
SLA adherence on returns
Catch reverse delays before they become customer refund disputes.
Reverse

RTO

RTO Prevention
Intervene while a shipment is still deliverable, not after it's marked returned.
RTO Intelligence
Find the pincodes and reasons driving most of your RTO cost.
Track the full reverse cost
Confirm returned stock actually makes it back within SLA, not lost in transit.
RTO

B2B / Bulk

Built for every B2B flow
One system for warehouse transfers, store movements, and distributor delivery alike.
Appointment adherence, automated
Know a delivery will miss its scheduled slot before the marketplace does.
B2B

Quick Commerce

Real-time rider and store performance
Spot the underperforming store or rider before today's SLA slips.
Minutes, not days
Built for delivery windows where a 10-minute delay is already a breach.
Deep-dive without leaving the dashboard
Trace a City-wide problem down to the exact pincode, without an Excel.
QC
4.8 Ratting Stars - White
4.4 Rating Stars White 4.4

See your network the way
Apex Control Tower sees it

Deep dive into success stories and learn the impact Apex brings to D2C, Internal B2B and Quick Commerce operations.
. 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(); } })();