What are Microsoft Ads offline conversions?
Microsoft Ads offline conversions are conversion events — purchases, leads, phone calls, in-store visits — that occur outside the visitor's browser and are sent from your server back to Microsoft Advertising. They are matched to ad clicks using the msclkid (Microsoft Click ID), which Microsoft appends to your landing page URL when a user clicks your ad.
This server-side approach solves a fundamental measurement problem: the UET tag (Universal Event Tracking), Microsoft's browser-based JavaScript tracker, can only report conversions it can see. When the UET tag is blocked by an ad blocker, expired by Safari's cookie restrictions, or interrupted by a cross-device journey, the conversion is invisible to Microsoft's bidding algorithms — even though the sale actually happened.
Offline conversions close this gap by sending authoritative conversion data directly from your server, where ad blockers and browser privacy features cannot interfere.
Why Microsoft Ads needs server-side tracking (more than most platforms)
Microsoft Advertising generated $15.2 billion in ad revenue in FY2026 — up 9.4% year-over-year — with Bing reaching 1 billion monthly active users for the first time. It is a large, growing ad platform that many e-commerce brands underinvest in.
But Microsoft Ads has a unique tracking vulnerability: its audience skews heavily toward desktop.
Bing's search traffic comes disproportionately from desktop browsers — corporate environments, Edge default users, and the 40+ demographic. This matters for tracking because desktop browsers have the highest ad blocker adoption rates:
| Device Type | Ad Blocker Adoption | Impact on UET |
|---|---|---|
| Desktop (Chrome, Edge, Firefox) | 35–45% of users | UET JavaScript blocked entirely |
| Mobile iOS (Safari) | 12–20% of users | ITP cookie limits reduce attribution |
| Mobile Android (Chrome) | 8–15% of users | Lower blocker rates, but growing |
For comparison, Meta and TikTok traffic is predominantly mobile (65–80%), where ad blocker rates are lower. Microsoft Ads' desktop-heavy audience means a larger percentage of conversions are invisible to browser-based tracking — making server-side offline conversions proportionally more valuable for Bing campaigns than for mobile-first platforms.
The growing cost of missed Bing conversions
Microsoft Ads auction pressure is intensifying. In Q2 2026, Microsoft Ads CPCs rose 19% year-over-year on just 7% spend growth (Tinuiti), meaning advertisers paid significantly more per click while buying fewer clicks. Google text-ad CPCs rose just 1% over the same period.
When CPCs are rising 19% and your tracking misses 15–25% of conversions, your Smart Bidding algorithms systematically underbid for the keywords that actually convert. You pay more per click and get worse optimization — a compounding problem that server-side tracking directly addresses.
Two server-side tracking methods for Microsoft Ads
Microsoft offers two paths for sending conversion data server-side. Understanding the differences helps you choose the right approach:
Method 1: Offline Conversions API (legacy, stable)
The original server-side method. You collect the msclkid from ad clicks, wait for conversions, and upload them matched to the click ID.
How it works:
- User clicks your ad → Microsoft appends
msclkid=abc123to the URL - Your site captures and stores the
msclkidin a first-party cookie (90-day retention recommended) - User converts (purchases, submits a lead form, calls)
- Your server sends the conversion to Microsoft via
ApplyOfflineConversionsAPI, including:MicrosoftClickId: the stored msclkidConversionName: matches your conversion goal nameConversionTime: UTC timestamp of the conversionConversionValue: revenue amountConversionCurrencyCode: ISO currency (e.g., USD)- Optional:
HashedEmailAddress,HashedPhoneNumberfor enhanced matching
Key constraints:
- Wait 2 hours after creating an
OfflineConversionGoalbefore uploading conversions - Up to 6 hours for conversions to appear in reporting
- Maximum 1,000 conversions per API request
- Conversion must occur within the configured conversion window (up to 90 days)
Best for: E-commerce stores, lead-gen businesses, agencies managing multiple accounts, anyone who wants a proven and widely supported method.
Method 2: Conversions API (CAPI) — the newer approach
Microsoft's real-time server-side solution, equivalent to what Meta calls CAPI and Google calls Enhanced Conversions.
How it works:
- Create a UET tag and Conversions API token in Microsoft Ads
- Send events server-to-server to
POST https://capi.uet.microsoft.com/v1/{tagId}/events - Include
eventType,eventId,eventName,eventTime,userData(msclkid, hashed identifiers), andcustomData(revenue, transaction ID, product details) - Microsoft deduplicates against UET browser events using the shared
eventId
Key advantages over Offline Conversions:
- Real-time event delivery (not batch uploads)
- Supports page load events (not just conversions)
- Richer data: product details, page context, vertical-specific fields
- Built-in deduplication with UET via
eventId - Supports both web and mobile app events
Current limitation: CAPI is in a pilot program — you may need to request enrollment from your Microsoft Advertising account team.
Comparison: Offline Conversions API vs. CAPI
| Feature | Offline Conversions API | Conversions API (CAPI) |
|---|---|---|
| Availability | Generally available | Pilot (request access) |
| Data delivery | Batch or API upload | Real-time server-to-server |
| Event types | Conversions only | Page loads + custom events |
| Deduplication | Manual (avoid duplicate uploads) | Automatic via eventId |
| Product data | Not supported | Full product details for remarketing |
| Attribution | msclkid or hashed email/phone | msclkid + hashed identifiers + visitor ID |
| Time constraint | Within conversion window (up to 90 days) | Within 7 days of event |
| Reporting delay | Up to 6 hours | Near real-time |
How msclkid attribution works
The msclkid (Microsoft Click ID) is the foundation of Microsoft Ads server-side conversion tracking. Understanding how it flows through the system is essential for a correct implementation.
The msclkid lifecycle
1. Ad Click → Microsoft appends ?msclkid=dd4afccc-b1c9-... to your landing page URL
2. Landing Page → Your site reads the msclkid from the URL query string
3. Cookie Storage → msclkid saved in a first-party cookie (90-day retention)
4. Browsing → User browses your site; msclkid cookie persists across pages
5. Conversion → User purchases; your server reads msclkid from cookie
6. Upload → Conversion + msclkid sent to Microsoft Offline Conversions API
7. Attribution → Microsoft matches conversion to the original ad click
8. Optimization → Smart Bidding algorithms train on the recovered conversion
msclkid best practices
- Always overwrite with the newest value. If a user clicks multiple Microsoft Ads, store the most recent msclkid — this ensures last-click attribution is correct.
- Use first-party cookies. Store msclkid in a first-party cookie (not third-party) to maximize persistence. Set
SameSite=LaxandSecureattributes. - 90-day retention. Microsoft recommends a 90-day cookie lifetime to capture delayed conversions — especially important for B2B and high-consideration purchases.
- Capture from URL immediately. Read the
msclkidparameter on page load, before any redirects or SPA navigation might lose the URL parameters. - Store server-side too. For maximum reliability, also store the msclkid in your backend (associated with the user session or order record) in case the cookie is cleared.
Step-by-step setup guide
Option A: Managed setup with SignalBridge (2 minutes)
SignalBridge automates the entire Microsoft Ads offline conversions flow — from msclkid capture to server-side delivery.
Step 1: Open your SignalBridge dashboard → Pixel Settings
Step 2: Find Microsoft Ads in the integration catalog → Click Connect
Step 3: Authenticate with your Microsoft Advertising account via OAuth — select the account to connect
Step 4: Verify events are flowing — place a test order and check that the conversion appears in your Microsoft Ads reporting (may take up to 6 hours for first event)
That is it. SignalBridge handles msclkid capture, cookie management, conversion matching, and API delivery automatically. Conversions are sent via the Offline Conversions API with revenue, currency, and order data included.
Option B: Manual Offline Conversions API setup
For brands that prefer a custom implementation:
Step 1: Enable auto-tagging
- In Microsoft Ads, go to Account Settings
- Ensure auto-tagging is enabled (this appends msclkid to ad click URLs)
Step 2: Create an Offline Conversion Goal
- Go to Tools → Conversion Tracking → Conversion Goals
- Click Create Conversion Goal
- Select Offline conversions as the goal type
- Set:
- Goal name: e.g., "Purchase - Server-Side"
- Count type: "All" for e-commerce (counts every purchase), "Unique" for lead-gen (one per user)
- Conversion window: 30–90 days depending on your sales cycle
- Revenue: "Variable" to track actual purchase amounts
Step 3: Capture msclkid on your website
Add this script to your site's header (or implement in your backend):
// Read msclkid from URL and store in first-party cookie
(function() {
var params = new URLSearchParams(window.location.search);
var msclkid = params.get('msclkid');
if (msclkid) {
var d = new Date();
d.setTime(d.getTime() + 90 * 24 * 60 * 60 * 1000); // 90 days
document.cookie = '_msclkid=' + msclkid
+ ';expires=' + d.toUTCString()
+ ';path=/;SameSite=Lax;Secure';
}
})();
Step 4: Wait 2 hours after creating the conversion goal, then upload conversions.
Step 5: Upload conversions via API
Send a POST request to the Campaign Management API with your offline conversion data. Each conversion includes the MicrosoftClickId, ConversionName, ConversionTime (UTC), ConversionValue, and ConversionCurrencyCode.
For enhanced matching without msclkid (e.g., organic-to-paid attribution), include HashedEmailAddress and/or HashedPhoneNumber (SHA-256 hashed, lowercase, trimmed).
Deduplication: Running UET and server-side tracking together
Microsoft recommends running both UET (browser) and server-side tracking simultaneously for maximum coverage. But without proper deduplication, you will double-count conversions.
How deduplication works
Both the UET tag and your server-side events must include the same eventId for each conversion:
UET fires: Purchase event → eventId = "order_12345"
Server fires: Purchase event → eventId = "order_12345"
Microsoft: Receives both → deduplicates → counts 1 conversion
For CAPI: Deduplication is automatic — Microsoft matches events by eventId and eventName.
For Offline Conversions API: Deduplication is handled by unique MicrosoftClickId + ConversionTime combinations. If you upload the same click ID and timestamp twice, the duplicate is ignored.
Why deduplication matters for bidding
Without deduplication:
- Your conversion count inflates by 30–50%
- Smart Bidding algorithms train on inflated data
- CPA targets appear artificially low, leading to over-bidding
- ROAS reporting is meaningless
Always verify deduplication is working before scaling server-side tracking.
Microsoft Ads benchmarks: What server-side tracking improves
Based on 2026 industry data and Microsoft Ads platform specifics:
| Metric | UET-Only Setup | UET + Server-Side | Improvement |
|---|---|---|---|
| Conversion match rate (vs. backend) | 60–75% | 85–95% | +15–25% more conversions visible |
| Desktop conversion capture | 55–65% (high ad blocker impact) | 90–95% | Desktop gap closes significantly |
| Attribution window coverage | 7-day cookie limit on Safari | 90-day msclkid retention | Full purchase cycle captured |
| B2B lead attribution | Often lost (long sales cycles) | Server-side stores msclkid indefinitely | Weeks-to-months attribution possible |
| Smart Bidding accuracy | Trained on partial data | Trained on complete data | 10–20% CPA improvement over 30 days |
| Cross-device attribution | Cookie-dependent (breaks often) | Click ID + email matching | More complete journey tracking |
Desktop conversion recovery is the biggest win
Microsoft Ads' desktop-heavy audience means the ad blocker gap is the primary signal loss factor. On desktop:
- 35–45% of users run ad blockers that block the UET tag entirely
- This percentage is higher among tech-savvy audiences and B2B decision-makers
- Server-side tracking recovers nearly all of these blocked conversions
For a brand spending $10,000/month on Microsoft Ads with a 40% desktop ad blocker rate and 100 monthly conversions, server-side tracking typically recovers 15–25 additional conversions that UET missed — directly improving bidding efficiency and ROAS reporting accuracy.
Industry-specific considerations
E-commerce (Shopify, WooCommerce)
- Primary use: Track purchases with revenue and product data
- msclkid handling: Capture on landing page, associate with the Shopify order via server-side webhook
- Revenue tracking: Send actual order value (post-discount, pre-tax) as
ConversionValue - Platform support: SignalBridge's Shopify app automatically captures msclkid and sends conversions
B2B lead generation
- Primary use: Track form submissions, demo requests, qualified leads
- Key advantage: B2B sales cycles often span weeks or months — server-side msclkid storage (90-day retention) captures conversions that browser cookies would miss
- Enhanced matching: Send hashed email from CRM to match leads without msclkid (organic-to-paid attribution)
- Goal type: Use "Unique" count type to avoid counting the same lead multiple times
Subscription / SaaS
- Primary use: Track trial sign-ups, paid conversions, and recurring revenue events
- Key advantage: Subscription tracking with server-side events lets you report LTV-based conversion values, not just initial purchase
- Revenue tracking: Send first payment value initially; update with LTV data via conversion adjustments (CAPI only)
Local / multi-location retail
- Primary use: Track in-store purchases driven by Microsoft Ads clicks
- Key advantage: Customers may click a Bing ad, visit the store days later, and purchase offline — msclkid + enhanced matching attributes the in-store conversion to the ad click
- Implementation: POS system sends purchase data with customer email (hashed) to Microsoft Ads API
Common mistakes to avoid
1. Forgetting to enable auto-tagging
Without auto-tagging, Microsoft does not append msclkid to ad click URLs, and server-side attribution is impossible. Go to Account Settings → Auto-tagging and ensure it is enabled.
2. Uploading conversions before the 2-hour wait
After creating a new Offline Conversion Goal, wait at least 2 hours before uploading conversions. Uploads sent earlier will be rejected or silently dropped.
3. Sending msclkid with incorrect format
The msclkid is a UUID format (e.g., dd4afccc-b1c9-4a4c-ad95-44dd7e5006ab). Truncated or malformed click IDs will not match, and conversions will be unattributed.
4. Not hashing email and phone for enhanced matching
When including customer identifiers for enhanced matching:
- Email: Lowercase, trim whitespace, then SHA-256 hash
- Phone: Convert to E.164 format (e.g., +12025551234), then SHA-256 hash
- Sending unhashed PII violates Microsoft's data policy
5. Using the wrong conversion window
The default conversion window is 30 days. If your average time from ad click to purchase exceeds 30 days (common in B2B, real estate, automotive), extend the ConversionWindowInMinutes to match your actual sales cycle — up to 90 days (129,600 minutes).
Monitoring server-side conversion delivery
After setup, monitor these metrics in Microsoft Ads:
Weekly checks:
- Conversion count: Compare Microsoft Ads reported conversions against your backend orders
- Revenue accuracy: Verify that total attributed revenue in Microsoft Ads matches your actual revenue from Bing traffic
- Conversion lag: Track the time between ad click and conversion upload — shorter lag means faster optimization
Monthly checks:
- Smart Bidding performance: After 30 days of server-side data, compare CPA and ROAS against the UET-only baseline
- Conversion goal health: Go to Tools → Conversion Tracking and verify all goals show "Recording" status
- Attribution coverage: Check what percentage of conversions include msclkid vs. enhanced matching (email/phone only) — msclkid matching is more accurate
Related reading
- Microsoft Ads Conversion Tracking: Complete Server-Side Setup — the pillar guide covering UET, offline conversions, and CAPI fundamentals
- What is Server-Side Tracking? — foundational guide to how server-side events work
- Ad Blocker Usage Statistics 2026 — data on desktop ad blocker rates that impact Microsoft Ads
- Server-Side Tracking for Lead Generation — B2B-specific tracking strategies
- How to Calculate True ROAS — accurate ROAS measurement when pixels miss conversions
- Best Server-Side Tracking Tools in 2026 — compare tools for implementing server-side Microsoft Ads tracking
- Server-Side Tracking Benefits — why marketers are switching from browser-based tracking
- Client-Side vs Server-Side Tracking — understanding the technical differences
- First-Party Data Tracking — why first-party cookies and server-side data are the future
- How to Track Subscription Revenue with Server-Side Events — SaaS and subscription tracking guide
Related Articles
Microsoft Ads Conversion Tracking: Complete Server-Side Setup (2026)
Set up Microsoft Ads server-side conversion tracking in 5 minutes. We cover UET setup, offline conversion import, and the Conversions API — with real Bing Ads attribution data from 2026 campaigns.
How to Prepare Your Tracking for Black Friday & Cyber Monday 2026
A complete Black Friday and Cyber Monday tracking checklist for e-commerce brands. Audit your pixel, set up server-side tracking, fix EMQ, and avoid data loss during the highest-traffic shopping weekend of the year.
