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 */
});
});
})();
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 performanceon-time %, last 24h · hover a row
Delhivery96.1%
Blue Dart94.7%
Ekart91.3%
Shadowfax82.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 two50% 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.
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 CarrierLive preview
95.2%▲ 8.2% since Jun 6
Today · hover the curve to scrub
Jun 6Jun 12Today
Saved view
Pinned widgets
Search AWB, order ID, phone…
AWBCarrierLaneStatusAgeAction
Alert rule
When pickups sit unscanned > 4h at any carrier × hub → auto-followup the carrier, then re-book if unresolved in 30 min.
Auto-followup
Carriers chased automatically
128carrier followups sent today
Live followup · pickup SLAResolved
!
Pickup SLA breach detected09:22
Bluedart · Bengaluru hub. 86 pickups sat unscanned past the 4h window
→
Auto-followup sent to carrier09:22
Pickup escalation raised with the Bluedart hub SPOC over WhatsApp + email
↑
No scan within SLA09:52
30-minute window missed, escalated to the regional pickup manager
✓
86 pickups re-booked10:05
Moved to a backup pickup slot automatically · warehouse notified
✓
Resolved10:05
Dispatch back on track, no orders slipped their promise date
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.
Email
CSV sent via Email
WhatsAppSummary Only
Summary sent via WhatsApp
Slack
CSV sent via Slack
Schedule Alert
Define the time and the frequency of the alert
* Alert Time
HH:MM
AMPM
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.
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
Customer Support Head, The Bear House
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
Head of Supply Chain at Avimee Herbal
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
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.