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

Home > Blog >

ClickPost Boosts Nykaa’s Logistics, Elevating Customer Experience

ClickPost Boosts Nykaa’s Logistics, Elevating Customer Experience

Teerna Mandal
By Teerna Mandal

Ready to ship smarter? Talk to our logistics experts.

Trusted by 600+ brands

In this blog

    The Beauty Brand That Sought to Deliver More Than Just Makeup

    Nykaa isn’t just India’s top beauty brand— it’s a logistics marvel delivering beauty trends to doorsteps at unmatched speed and scale. With a, over 3.7 lakh marketplace retailers, they deliver more than 1.5 lakh orders daily. 

    But before those iconic pink packages became a daily sight in every Tier 1 and Tier 2 city, Nykaa had to wrestle with steep growth pains behind the scenes: fragmented shipment visibility and limited multi-carrier integrations.

    Rising order volumes pushed their logistics and customer support teams to the edge, driving up escalations and RTOs. That’s when Nykaa joined hands with ClickPost to tackle these operational challenges head-on.

    “Before ClickPost, we didn’t have any tracking tools in our system,â€� shares Piyush Gravit, Assistant VP, Logistics & Ops. “ClickPost built dashboards and gave us complete visibility. We can now bulk download data and see all parameters, like how a courier is performing, which lane is performing well.â€� 

    Alongside Piyush, we sat down with and Vinesh Gavit (Data Analyst) to revisit Nykaa’s journey with ClickPost and the impact it has made across their teams.

    Behind the Gloss: Nykaa’s Operational Struggles

    Like every fast-scaling eCommerce powerhouse, Nykaa’s operations faced hard-hitting challenges as they grew: 

     

    • NDR-led escalations: More than just dashboard metrics, these became daily operational headaches — eroding customer trust and straining support teams.

    • Visibility gaps: Blind spots in courier tracking made it nearly impossible to identify which lanes or carrier partners were driving delays.

    • Manual overload: Logistics and customer success teams were bogged down by repetitive processes, slowing order-to-delivery timelines.

    • High customer queries: A surge in WISMO (Where Is My Order) calls choked support bandwidth and signaled a fractured post-purchase experience.

    A Pivot Towards Precision: Finding the Right Solution

    Seven years ago, when Vinesh Gavit joined Nykaa, measuring courier performance meant pulling scattered reports and losing hours to get a basic view of on-time deliveries.

    This changed with ClickPost’s automated tracking and carrier insights. As Vinesh Gavit puts it:

    “My day-to-day work is measuring courier performance and how we can improve order-to-delivery. While using ClickPost, it’s very easy. You get all the data in a one-stop solution.â€� 

    That strong operational foundation built on unified shipment visibility and seamless multi-carrier integrations made Nykaa and ClickPost a natural fit early on. 

    But the real bond grew as we listened and co-created solutions to their toughest pain points, especially handling customer escalations from failed deliveries.

    Ruksana Sayyad, Customer Success Lead at Nykaa, captures this perfectly:

    “When we started with ClickPost, NDR was not there in ClickPost itself. Both the companies came together and we have built that tab.â€� 

    Today, her entire day starts and ends with ClickPost.

    The Core of Nykaa’s Delivery Brilliance — Powered by ClickPost

    ClickPost cracked open each challenge that strained their delivery success and impeded customer delight: RTOs, fragmented traceability, and inconsistencies in operational processes. Here’s how we lowered their operational overload, revamped on-time delivery metrics, and impacted their overall growth.

    1. Cracking Down on RTOs with Automated NDR Management: 

    We engineered a fully automated NDR (Non-Delivery Report) management system designed specifically for high-volume, fast-moving marketplaces.

     

    • Root Cause categorization- auto-identifies NDR reasons.

    • Automated multichannel communication- prompts customers to reschedule a delivery.

    • Instant carrier reattempt coordination- pushes updates to carriers immediately for faster delivery reattempts. 

    In Ruksana Sayyad’s words, the change is clear: 

    “I am looking into customer escalations and the NDR, no-delivery parts with the help of ClickPost. It has made our day-to-day life very easy because I don’t have to go to multiple websites.â€� 

    As a result, Nykaa’s RTO rate today stands at just 6.36% — one of the lowest in the industry.

    2. Crafting a Personalized, Branded Post-Purchase Experience

    Nykaa wanted to craft a post-purchase experience as iconic as their pink packages. ClickPost delivered on every front:

     

    • Tracking API & webhook integration- to achieve continuous low latency shipment visibility.

    • Uniform status updates- with 7 main statuses and 40+ sub statuses. 

    • Branded tracking portal- with live EDDs, milestone tracking, and marketing tiles.

    • Feedback Loop- auto-triggered NPS survey upon successful delivery.

    • Multichannel alerts- pre-integration to 40+ communication gateways and prebuilt templates.  

    • Quick commerce tracking portal- custom-built for real-time rider details and precise ETA timelines.

    Ruksana Sayyad continues to capture the ongoing impact:

    "ClickPost help me in courier visibility, the real-time scanning of the courier partner, the real-time status updation, and the real-time messages get triggered to the customers so they don’t come up with the escalations." 

    3. Operational Efficiency Improving Carrier Performance and EDD Adherence 

    Delays at any stage  risked eroding trust and harming the brand promise. ClickPost solved this with real-time analytics and deep carrier performance insights. 

     

    • Performance-based carrier allocation- assign each shipment using ML based analysis of 7-day data on carrier performance metrics. 

    • Accelerate delivery timeline- granular, timestamped visibility into stuck shipments, warehouse delays, and lost parcels. 

    • Dynamic EDD prediction- customizable ML-powered EDD engine.  

    Piyush Gravit, sums up the value:

    "With the help of ClickPost that has created some dashboard and visibility to us for which we can bulk download and bulk see all the parameters, like how courier is performing, which lane is performingâ€� 

    Today, Nykaa seamlessly ships over 34 million orders each year with ClickPost, delivering a fully personalized, branded post-purchase experience at scale.

    Key Takeaways From Our Collaboration 

     

    • Automated NDR workflows reduced RTOs and escalations.

    • Unified, real-time visibility across carriers and lanes.

    • Personalized, branded tracking to strengthen customer loyalty.

    • Granular carrier insights to improve SLA adherence.

    • Seamless multi-carrier integration at extreme shipment scale.

    Our partnership with Nykaa is stronger than ever and we continue to evolve together as we support their expansion to quick commerce. As Nykaa continues to scale and diversify, we’re working closely to optimize carrier performance, improve last-mile delivery speed, bring more intelligence, and personalization to their logistics operations. The future promises even more possibilities, and we’re ready to scale together.

    Want to see what ClickPost can do for your business? Schedule a free demo and let’s give your logistics a well-deserved makeover.

    The Logistics Automation Platform for E-commerce

    Momentum Leader - G2 Users Most Likely To Recommend - G2 Best Results Mid-Market - G2
    . 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(); } })();