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 */
});
});
})();
Saudi Post Tracking and API Integration with ClickPost
Slash shipping costs by up to 29% with ClickPost’s smart carrier allocation.
Trusted by 600+ global brands
Benefits of Connecting with Saudi Post through ClickPost
Maximise delivery efficiency with the combined strength of Saudi Post and ClickPost's logistics automation.
Reduce delivery lead time by 31% with ClickPost's automated carrier allocation that eliminates manual assignment and routes every shipment efficiently.
Achieve up to 92% accuracy in delivery date estimation, giving customers a reliable post-purchase experience and reducing cart abandonment.
Reduce customer order enquiries by up to 66% with real-time branded tracking and proactive delivery notifications across WhatsApp, SMS, and email.
Track Saudi Post Packages with the ClickPost Tracking Page
Copy the order ID or tracking number provided by Saudi Post from your order confirmation.
Open the ClickPost Tracking Page for your brand.
Paste the tracking number into the search field.
Click Track Your Order to view live shipment status, expected delivery date, and milestones.
Track Saudi Post Packages on the Official Page
Visit the official Saudi Post tracking page.
Enter your tracking number in the search field, multiple tracking numbers can be added at once, separated by a space.
Click the Track button.
The latest shipment status will appear on screen within seconds.
List of Saudi Post APIs
API
Description
Manifestation and shipping label generation API
Eliminate dispatch delays by automatically generating bulk Saudi Post shipping labels and AWB numbers without manual intervention.
Track Shipment API
Monitor all Saudi Post shipments in real time on a centralized ClickPost dashboard with automated customer notifications.
Cancellation API
Cancel and roll back Saudi Post shipment manifests on demand via ClickPost; no manual carrier requests needed.
EDD API
Display accurate Saudi Post delivery timelines at checkout and product pages to build shopper trust and reduce inbound queries.
NDR Action Update
Auto-sync Saudi Post NDR reports, push corrected delivery instructions back to the carrier, and take quick action to reduce RTO rates.
Return Webhooks
Track Saudi Post returns and refunds in real time using integrated webhooks that automate the entire reverse logistics journey.
API & Description
Manifestation and shipping label generation API
Eliminate dispatch delays by automatically generating bulk Saudi Post shipping labels and AWB numbers without manual intervention.
Track Shipment API
Monitor all Saudi Post shipments in real time on a centralized ClickPost dashboard with automated customer notifications.
Cancellation API
Cancel and roll back Saudi Post shipment manifests on demand via ClickPost; no manual carrier requests needed.
EDD API
Display accurate Saudi Post delivery timelines at checkout and product pages to build shopper trust and reduce inbound queries.
NDR Action Update
Auto-sync Saudi Post NDR reports, push corrected delivery instructions back to the carrier, and take quick action to reduce RTO rates.
Return Webhooks
Track Saudi Post returns and refunds in real time using integrated webhooks that automate the entire reverse logistics journey.
Frequently asked questions
Everything you need to know about ClickPost’s Carriers Integration
What is Saudi Post, and what services does it offer?
Saudi Post (SPL) is the national postal carrier of Saudi Arabia, offering domestic and international delivery services, including express shipping, MPS, and doorstep delivery. It is the primary logistics provider for e-commerce and enterprise brands operating across the Kingdom.
How do I track a Saudi Post shipment?
Enter your tracking number on the Saudi Post official tracking page; multiple numbers can be tracked at once, separated by a space. For a branded experience with milestones and EDD, use ClickPost's unified tracking page.
Does Saudi Post support multi-piece and express shipments?
Yes. Saudi Post offers MPS (Multi-Piece Shipment) and express shipping services alongside standard doorstep delivery. Through ClickPost, all service lines are managed from a single platform with automated order creation and tracking.
How does ClickPost integrate with Saudi Post?
ClickPost integrates with Saudi Post via API for order creation, label generation, real-time tracking, NDR management, cancellations, and return webhooks. All data syncs automatically once the integration is active.
How does ClickPost improve delivery performance for Saudi Post shipments?
ClickPost's carrier allocation engine routes Saudi Post shipments optimally based on cost, speed, and serviceability, reducing delivery lead time by 31% and improving on-time performance with real-time exception alerts and proactive escalation workflows.
How does ClickPost reduce WISMO queries for Saudi Post shipments?
ClickPost's branded tracking pages and automated notifications via WhatsApp, SMS, and email keep customers updated at every Saudi Post delivery milestone. It reduces customer order enquiries by up to 66% without manual effort from your support team.