Microsoft Ads server-side tracking: msclkid, UET and enhanced conversions
2 Jul 2026 · 3 min read · Neill Brookman
Microsoft Advertising (Bing ads and the Microsoft Audience Network) is often the second search budget, and its tracking gets less attention than Google’s. That is a mistake: the same problems that break Google conversion tracking break Microsoft’s, and fixing them is mostly about one parameter.
msclkid: capture it or lose it
With auto-tagging turned on, every click on a Microsoft ad lands with an msclkid query parameter. It is the key that ties a conversion to the click. Microsoft only exposes it on the landing page, so if it is not captured there, it is gone.
In a browser setup, the UET tag captures msclkid and stores it in a JavaScript cookie. Two things go wrong:
- the UET tag is blocked by ad blockers, so the click is never captured;
- Safari deletes the cookie after 7 days without a return visit, so a conversion two weeks later has no click to match.
Datafly.js reads msclkid on landing and the gateway stores it in a server-set first-party cookie on your own domain for up to 400 days. Later conversions are matched to the original click for the whole buying cycle.
The UET Conversions API
Microsoft offers a server-side path for UET conversion goals, the UET Conversions API. It is not a separately branded product in the way Meta’s Conversions API is; it is the server delivery route for the same conversion goals the UET tag fires. Access is enabled per account by Microsoft, so check what your account is set up for.
Datafly Signal delivers three kinds of event to Microsoft:
- web conversions through the UET Conversions API;
- offline conversions uploaded against the
msclkid; - enhanced conversions, with hashed customer data attached for matching.
Enhanced conversions: the hashing has to be exact
Enhanced conversions match on SHA-256 hashes of email and phone, sent as lower-case hexadecimal in the em and ph fields. The normalisation before hashing matters as much as the hash:
- email is trimmed and lower-cased;
- phone is converted to E.164 (
+447700900123, not07700 900123).
A single trailing space produces a completely different hash, and the match fails silently. Datafly Signal applies these rules once, before delivery, so raw email and phone never leave your infrastructure and every integration hashes the same way.
Offline conversions
Many Microsoft Ads conversions finish offline: a phone sale, a booked appointment, a qualified lead. The same pipeline accepts events from your CRM or backend and matches them to the stored msclkid, or to hashed customer data when the click is not known. Microsoft requires the conversion time to fall within the last 90 days, so events should be sent as they happen rather than batched weeks later.
Consent
Microsoft treats events as consented by default and accepts an explicit ad-storage consent signal per event; denied events are not used for ad purposes. With Datafly Signal the visitor’s choice is resolved on the server before delivery, so Microsoft receives the decision your policy made rather than whatever the banner and the tag agreed in the browser.
Do you still need the UET tag?
For conversions, no. Its jobs (setting its identifier, capturing msclkid, firing goals) move to the server. You can run both during migration and deduplicate before removing the tag.
Checklist
- Turn on auto-tagging in Microsoft Advertising so
msclkidis present. - Capture it on landing and keep it for your full buying cycle.
- Hash email and phone after normalising them.
- Send offline conversions promptly, inside Microsoft’s 90-day window.
See how Microsoft Ads server-side tracking works in Datafly Signal, or read the Microsoft Ads integration docs.
Want more posts like this?
No spam newsletter, no drip campaigns. If you want technical posts on server-side data infrastructure, bookmark /blog or follow the RSS feed.