Pixel and tag checks

How to check your Microsoft Ads UET tag is working

The UET tag works if the browser sends requests to bat.bing.com/action/0 with ti set to your UET tag ID and evt=pageLoad on each page. Purchases should send a custom event with revenue (gv) and currency (gc). If consent is denied, the request carries asc=D, which is correct behaviour.

Skip the DevTools: the free scan loads your page in a real browser, accepts and rejects the cookie banner, and shows what the Microsoft UET actually sent.

At a glance

Tag script
bat.bing.com/bat.js
Event request
bat.bing.com/action/0?ti=<tag ID>&evt=pageLoad; custom events have evt=custom and ea= the action
Tag ID
A number, usually 7 to 9 digits
Click ID
msclkid, added to ad clicks when auto-tagging is on
Consent
uetq.push('consent', 'default', { ad_storage: 'denied' }); the request then carries asc=D

Check it yourself in two minutes

  1. Open DevTools on the Network tab and filter on bat.bing. Load a page.
  2. You should see bat.js load and a request to /action/0. Check ti is the tag ID shown in Microsoft Advertising under Tools, then UET tag.
  3. Look at asc: D before the visitor accepts (consent denied) and G after, if you use UET consent mode.
  4. Complete a test order. Look for evt=custom with ea=purchase, gv (revenue) and gc (currency).
  5. Microsoft's UET Tag Helper extension for Chrome lists the same events. In Microsoft Advertising, the tag status changes to "Tag active" once it receives data, and conversion goals show "Recording conversions".

Why the Microsoft UET breaks, and how to fix it

No consent mode for European visitors

Microsoft asks advertisers to pass consent for visitors in the EEA, the UK and Switzerland, through UET consent mode. Set a denied default before the tag and update it on accept:

window.uetq = window.uetq || [];
window.uetq.push('consent', 'default', { ad_storage: 'denied' });
// when the visitor accepts:
window.uetq.push('consent', 'update', { ad_storage: 'granted' });

Many consent tools do this for you once their Microsoft integration is turned on. Without it, the tag either sends before consent or, if blocked entirely, sends nothing even for visitors who accept.

Purchases without revenue

Conversion goals with variable revenue need the order value on the event. The UET call for a purchase looks like this:

window.uetq.push('event', 'purchase', { revenue_value: 84.50, currency: 'EUR' });

A goal set to "variable revenue" that receives no gv records the conversion with the default value or none, and ROAS in Microsoft Advertising is wrong.

The tag fires on every page but the goal never records

Destination URL goals depend on the thank-you URL. When the checkout changes the URL (a new path, an added order number, a hosted checkout domain) the goal stops matching, though the tag is fine. Event goals based on ea=purchase do not have this problem.

msclkid lost in a redirect

UET reads msclkid from the landing page URL. A redirect that drops the query string makes the conversion invisible to Microsoft Advertising. Test it with the click ID redirect tester.

Single-page sites send one pageLoad

On sites that change pages without a reload, UET sees one page load per visit unless the tag tracks history changes. Add enableAutoSpaTracking: true to the UET tag code, or push a page load on each route change, or remarketing lists built on URLs stay small.

What the free scan checks

  • Microsoft UET tag loads, and sends at least a page view
  • Only one Microsoft UET ID, or a warning if there are more
  • Microsoft UET tag waits until the visitor accepts cookies
  • Microsoft UET tag stops after the visitor clicks "reject all"
  • No email addresses in plain text in Microsoft UET tag requests
  • On an order confirmation page: the purchase carries a value, a currency and an event ID
  • The msclkid click ID survives your redirects

Server-side events (Conversions APIs, server-side tagging) are invisible to a public scan, so the report never marks them as working or broken.

Related

Sources

Updated 2026-10-27. Based on the platforms' public documentation and the requests their public tags make; menus and names change, so check the linked pages if a step looks different.

Other platforms