Skip to main content
Back to Blog

Microsoft Ads Offline Conversions: Server-Side Setup Guide

Set up Microsoft Ads offline conversions and server-side tracking in minutes. Learn the Offline Conversions API, CAPI, and msclkid attribution — with 2026 Bing Ads benchmarks.

14 min read
Microsoft Ads Offline Conversions: Server-Side Setup Guide

Key Takeaways

  • •Microsoft Ads offline conversions let you send purchase and lead events from your server to Microsoft Advertising using the msclkid (Microsoft Click ID), bypassing browser-based UET tag limitations — ad blockers, cookie expiration, and cross-device gaps
  • •Microsoft Ads is a $15.2 billion ad platform (FY2026) with 1 billion monthly active Bing users, but its desktop-heavy audience faces 35–45% ad blocker rates — making server-side tracking more critical for Bing than for mobile-first platforms
  • •There are two server-side paths: the legacy Offline Conversions API (click-ID matching with CSV or API upload) and the newer Conversions API (CAPI), which sends real-time UET events server-to-server with deduplication against the browser tag
  • •SignalBridge automates Microsoft Ads server-side tracking with a 2-minute OAuth setup — no API coding, no CSV uploads, and real-time conversion forwarding via the Offline Conversions API with msclkid attribution
  • •Proper deduplication is essential: when running UET and server-side tracking together, use the same eventId in both paths so Microsoft counts each conversion once — without this, reported conversions inflate and automated bidding trains on incorrect data

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 TypeAd Blocker AdoptionImpact on UET
Desktop (Chrome, Edge, Firefox)35–45% of usersUET JavaScript blocked entirely
Mobile iOS (Safari)12–20% of usersITP cookie limits reduce attribution
Mobile Android (Chrome)8–15% of usersLower 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:

  1. User clicks your ad → Microsoft appends msclkid=abc123 to the URL
  2. Your site captures and stores the msclkid in a first-party cookie (90-day retention recommended)
  3. User converts (purchases, submits a lead form, calls)
  4. Your server sends the conversion to Microsoft via ApplyOfflineConversions API, including:
    • MicrosoftClickId: the stored msclkid
    • ConversionName: matches your conversion goal name
    • ConversionTime: UTC timestamp of the conversion
    • ConversionValue: revenue amount
    • ConversionCurrencyCode: ISO currency (e.g., USD)
    • Optional: HashedEmailAddress, HashedPhoneNumber for enhanced matching

Key constraints:

  • Wait 2 hours after creating an OfflineConversionGoal before 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:

  1. Create a UET tag and Conversions API token in Microsoft Ads
  2. Send events server-to-server to POST https://capi.uet.microsoft.com/v1/{tagId}/events
  3. Include eventType, eventId, eventName, eventTime, userData (msclkid, hashed identifiers), and customData (revenue, transaction ID, product details)
  4. 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

FeatureOffline Conversions APIConversions API (CAPI)
AvailabilityGenerally availablePilot (request access)
Data deliveryBatch or API uploadReal-time server-to-server
Event typesConversions onlyPage loads + custom events
DeduplicationManual (avoid duplicate uploads)Automatic via eventId
Product dataNot supportedFull product details for remarketing
Attributionmsclkid or hashed email/phonemsclkid + hashed identifiers + visitor ID
Time constraintWithin conversion window (up to 90 days)Within 7 days of event
Reporting delayUp to 6 hoursNear 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=Lax and Secure attributes.
  • 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 msclkid parameter 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:

MetricUET-Only SetupUET + Server-SideImprovement
Conversion match rate (vs. backend)60–75%85–95%+15–25% more conversions visible
Desktop conversion capture55–65% (high ad blocker impact)90–95%Desktop gap closes significantly
Attribution window coverage7-day cookie limit on Safari90-day msclkid retentionFull purchase cycle captured
B2B lead attributionOften lost (long sales cycles)Server-side stores msclkid indefinitelyWeeks-to-months attribution possible
Smart Bidding accuracyTrained on partial dataTrained on complete data10–20% CPA improvement over 30 days
Cross-device attributionCookie-dependent (breaks often)Click ID + email matchingMore 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

Ready to recover more conversions?

Start tracking what your pixels miss. Set up in 5 minutes, no credit card required.

Start Free Trial