Microsoft UET Consent Mode: set ad_storage for Microsoft Advertising
Microsoft enforces UET Consent Mode in the EEA, UK and Switzerland. Set ad_storage to denied by default, update it on every choice, and check the asc value.Microsoft UET Consent Mode is Microsoft Advertising's equivalent of Google Consent Mode, with a single setting: ad_storage. You push a default of denied on every page, then push an update of granted or denied when the visitor chooses, through the window.uetq queue. Microsoft says it enforces Consent Mode for visitors in the EEA, the UK and Switzerland, where the default is denied and conversions are lost if the granted signal is not passed after the visitor accepts. Google Consent Mode does not cover it: a site that runs both Google Ads and Microsoft Advertising needs both signals.
What does ad_storage control?
Microsoft's documentation defines two values:
| Value | What UET does |
|---|---|
granted | First-party and third-party UET cookies may be read and written |
denied | First-party cookies are neither read nor written; third-party cookies are not written, and are read only for fraud and spam purposes, not for advertising |
For the purposes of UET, first-party cookies are those created on your domain (such as _uetsid and _uetvid), and third-party cookies are those created by Microsoft Advertising on bing.com. Outside the enforced regions, if no consent setting is passed, UET uses granted by default, which is why setting the default explicitly matters.
Basic or advanced?
Microsoft describes two setups, like Google:
- Basic. The UET tag does not fire at all until the visitor grants consent. Nothing is sent before.
- Advanced. The tag loads at once with consent defaulted to denied; while denied, only anonymized data is collected and later aggregated for modeling. Microsoft recommends advanced mode for campaign performance.
As with Google, whether a request to Microsoft before consent is acceptable is a legal question for your supervisory authority, not a technical one. Basic mode is the conservative option: mark the UET tag so it only loads after marketing consent, as described in block scripts until consent.
How do you set the default?
Microsoft's example places the default right after the UET tag, on every page:
html<script>window.uetq = window.uetq || [];window.uetq.push('consent', 'default', {'ad_storage': 'denied'});</script>
What matters is that the default exists on every page before the visitor's choice is known, and that the update follows it.
How do you send the visitor's choice?
When the visitor accepts the marketing or advertising category:
html<script>window.uetq = window.uetq || [];window.uetq.push('consent', 'update', {'ad_storage': 'granted'});</script>
Send denied in the same way when they refuse or withdraw. Microsoft asks you to keep passing the value on subsequent pages for as long as the consent applies, so the stored choice must be pushed again on every page load.
What about Google Tag Manager?
Microsoft publishes an official UET template for Tag Manager with consent settings. Google Tag Manager is not a consent tool, so the template needs a consent signal from your banner, usually a dataLayer event. When an update pushed from a custom HTML tag seems to have no effect, check the tag sequencing: the update must run after the UET queue exists and before the events you want to count.
Does Microsoft read other signals?
Microsoft says that if you do not implement Consent Mode directly, it tries to read consent signals from available sources such as the IAB TCF, provided the site has a cookie banner and a standard consent solution. You can turn that off with enableAutoConsent: false in the UET tag. Microsoft recommends implementing Consent Mode or the TCF explicitly for full control.
Is Microsoft Clarity covered?
No. Microsoft notes that if you use the UET and Clarity integration, Clarity's consent setting must be set separately. Clarity is a session recording and heatmap tool, which belongs in the analytics category of your banner.
How do you check that it works?
Microsoft lists three ways:
- UET Tag Helper, a browser extension for Edge and Chrome. Each UET event carries an
ascparameter with the consent state. Before consent, either no UET event fires orascisdenied; after acceptance, every event showsgranted. - The UET dashboard in Microsoft Advertising has a Consent signal column per event type: Healthy when more than 75% of events in the last seven days carry a valid signal, Moderate between 0% and 75%, Missing at 0%.
- Test your tag, in the Conversions section, shows whether a consent signal was present for events on a given URL during your session.
Add the browser test from checking cookies before consent: no _uetsid or _uetvid cookie with a real identifier before the choice, nothing new after Reject all.
Common mistakes
- Setting the default only on the home page; it must run on every page.
- Updating to granted on acceptance but never pushing denied after a later withdrawal.
- Relying on Google Consent Mode alone and assuming it reaches Microsoft.
- Forgetting the stored choice on the next page, so returning visitors who accepted are counted as denied.
Using a consent banner that sends UET signals
Cookiequiet sends the UET signal when the Microsoft UET option is enabled in the dashboard: on every choice, and on each page load once a choice is stored, it pushes a consent update with ad_storage driven by the marketing category, next to the Google Consent Mode update from the Consent Mode guide. It does not push the default command itself, so keep Microsoft's default line in your UET snippet. Setup is one script tag before your other scripts, with Reject all on by default; the option is available on every plan, including the free one.