Tracking & Attribution

How Do You Track Bing Ads Conversions Accurately?

The UET tag counts whoever loads a page. Send Bing conversions server-side and choose which leads count — see every lead before it's sent.

Quick answer

Track Bing Ads conversions accurately by sending them server-side through the Microsoft Conversions API instead of relying on the browser UET tag alone — and by controlling which leads count as conversions. The UET tag fires on whoever happens to load a page; a server-side pipeline lets you see every captured lead first, then send only the ones that match your definition of a real conversion. Microsoft must approve CAPI access for your account before you can start.

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Track Bing Ads conversions accurately by sending them server-side through the Microsoft Conversions API (CAPI) instead of relying on the browser UET tag alone — and, more importantly, by controlling which leads count as conversions. The UET tag fires for whoever happens to load a page, whether that person is a real prospect or a bot that bounced in four seconds. A server-side pipeline lets you see every captured lead first, then send only the ones matching your own definition of a conversion.

One prerequisite up front, because it’s a real gate: Microsoft has to approve Conversions API access for your advertising account before you get a CAPI token. That approval is a Microsoft process, not something any tool grants you. Everything below assumes you have it or are requesting it.


Why is Bing Ads conversion tracking inaccurate?

Microsoft Advertising’s UET (Universal Event Tracking) tag is a browser script — which means it inherits every browser-script problem, plus a definitional one that’s arguably worse.

The browser problems are the familiar ones. Ad blockers block the UET script. Privacy browsers and tracking prevention limit its cookies. Users on privacy-hardened setups never fire it. Every conversion those people complete is invisible to Microsoft, so your reported cost-per-conversion looks worse than reality and the bidding algorithm optimizes on a partial picture.

The definitional problem is bigger. The UET tag fires on a page load or a click — it has no idea whether the person behind it is a qualified lead. Point a conversion goal at your thank-you page and Microsoft counts:

  • The genuine prospect who filled the form properly.
  • The bot that crawled through.
  • The tire-kicker who typed “asdf” into every field.
  • The existing customer who resubmitted by accident.
  • The competitor checking out your funnel. Microsoft’s algorithm then optimizes toward more of all of that, because as far as it knows, each one was a win. On a lead-gen account this is how you end up paying more for worse leads over time: the machine is faithfully finding you more of what you told it to value.

And the two systems disagree about what a conversion even is. Your CRM says a conversion is a qualified lead who booked a call. Your UET tag says a conversion is a pageview on /thank-you. Those are different populations, and only one of them pays you.

A browser tag counting every page visitor identically — real leads, bots, and junk submissions all becoming conversions


What does inaccurate conversion data cost on Microsoft Ads?

Three compounding costs, and the third is the one that hurts.

Underreporting inflates your apparent cost per conversion. Blocked UET tags mean real conversions never register. Campaigns look more expensive than they are, and the reflex is to cut spend on channels that were actually working — Microsoft Ads especially, since it’s often the smaller budget line that gets trimmed first when the numbers look soft.

Over-counting junk trains the algorithm against you. This is the expensive one. Every low-quality “conversion” you feed Microsoft is a training signal saying find more people like this. Automated bidding does exactly that. Given a few weeks, an account optimizing on unfiltered form fills drifts steadily toward cheaper, worse traffic — and the drift looks like success in the dashboard right up until sales complains about lead quality.

You can’t fix what you can’t see. Most advertisers have no lead-level visibility into what their conversion pixel actually counted. There’s a number in the dashboard — 47 conversions — and no way to inspect the 47 and ask were these real? Without that inventory, “improve lead quality” stays a slogan.


What are the honest options for fixing it?

Option A: UET tag only, tightened. Move the conversion goal off the thank-you page onto a more meaningful trigger, add bot filtering, exclude known IPs. Free and better than nothing. Limits: still browser-dependent, still blind to who the person is, still can’t distinguish a qualified lead from a junk submission that reached the same page.

Option B: Microsoft CAPI, built in-house. Send conversions server-to-server from your backend. This solves the blocking problem properly. The costs are the usual ones: capturing and storing msclkid at first touch so the conversion can be matched back to the click days later, hashing user data to spec, deterministic event IDs so UET and CAPI deduplicate instead of double-counting, retry handling, and validation-error handling. It’s real backend work, plus permanent ownership — and it still doesn’t answer which leads should be sent unless you also build the lead inventory and the filtering logic.

Option C: A managed pipeline that owns capture, filtering, and dispatch. The capture layer stores the click identifiers, the lead inventory makes every captured lead visible, and the dispatch layer sends only what qualifies. That’s the shape of the next section.

Whichever route: Microsoft’s CAPI approval is a prerequisite for B and C. Request it early — it’s the long pole.


How does PartialLeads make Bing conversions accurate?

PartialLeads treats accuracy as a selection problem, not just a delivery problem. Delivery is table stakes; deciding what deserves to be called a conversion is where the accuracy comes from.

Every lead is visible before anything is sent. Every lead PartialLeads captures — including partial ones, where the visitor typed an email and left without submitting — lands in the Leads page with its source, campaign, journey, captured fields, and AI match score. Before you decide what Microsoft should count, you can see the actual inventory. This is the part most stacks are missing: you’re choosing from a list you can inspect, not trusting a number you can’t.

Conversions fire on your conditions, not on a page load. Each Microsoft CAPI config picks how leads qualify:

  • On partial capture — the moment a real email is typed, before submit.
  • On completed submission — the classic post-submit conversion.
  • On a custom rule — a condition combinator over the captured lead data with AND/OR logic, so “counts as a conversion” can mean whatever your business says it means.
  • On a booking — for calendar-driven funnels where the booked appointment is the only conversion that matters.
  • Manually — you decide, lead by lead. Test a rule before you trust it. The rule builder answers a question no pixel setup can: “this condition would have matched N of M capture-ready leads in the last 7 days.” It runs the same matcher the live dispatch uses — not a lookalike query — so the preview is exactly what would have fired. You tune the definition of a conversion against real historical leads before a single event reaches Microsoft.

Send leads you’ve already captured. Because the full lead history lives in the Leads page, a lead can be sent to Microsoft on demand — useful when a config was misconfigured, when approval landed after the leads did, or when a rule change means previously-skipped leads should now count. One honest boundary: Microsoft accepts event timestamps within a 7-day window, so older leads still deliver but with a clamped timestamp rather than their original one. It’s recovery within the platform’s window, not unlimited time travel.

Nothing double-counts. Every event carries a deterministic ID derived from the underlying record, backed by a send ledger. Microsoft deduplicates UET and CAPI events sharing an ID, and PartialLeads blocks re-sends before dispatch — so retries, rule changes, and manual sends can’t inflate your numbers. Partial failures are surfaced too: if Microsoft accepts an event but strips an invalid optional identifier, that appears in the activity log as a warning instead of vanishing.

Agencies get per-domain configs. Each domain can have its own UET tag and token — including domains belonging to entirely different Microsoft Advertising accounts — with a duplicate-to-new-domain helper for rollout. A 7-day health strip (sends, delivery rate, warnings, trial usage) shows whether each config is actually delivering.

Captured leads passing through a condition filter, with only qualifying leads dispatched to Microsoft Ads

Honest boundaries: Microsoft’s CAPI approval is required and entirely on Microsoft’s side — PartialLeads can’t grant or speed it up. The 7-day event window is Microsoft’s constraint, not something a tool overrides. Keep your UET tag installed; server-side conversions complement it and deduplicate against it rather than replacing it. And accuracy here means you control and can inspect what counts — no honest tool can promise a percentage, because the definition of a good lead is yours, not the software’s.

The accuracy gap, closed in one view:

The problem today PartialLeads mechanism Where you see it working
UET tag blocked by ad blockers and privacy browsers Server-side CAPI dispatch — no browser dependency Conversions arriving for sessions where the tag never fired
Every thank-you pageview counts as a conversion Condition-based firing: partial / completed / rule / booking / manual Only qualifying leads dispatched
No way to inspect what the pixel counted Full lead inventory with source, journey, fields, AI score The Leads page — the list behind the number
Rules are guesswork until it’s too late Live preview: “would have matched N of M leads in the last 7 days” Rule builder, using the live dispatch matcher
Leads captured before setup are lost Manual send from a captured lead (within Microsoft’s 7-day event window) Activity log showing the recovered sends
Re-sends and retries inflate numbers Deterministic event IDs + send ledger + UET/CAPI dedup Microsoft counts matching your Leads page
Agency: many domains, many Microsoft accounts Per-domain configs with duplicate-to-new-domain Independent health strips per domain

Setup is the tag you already run, plus your Microsoft CAPI token once approved. The free tier (50 leads) is enough to build the lead inventory and test rule conditions against real leads before sending anything.


Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Sources

  1. Microsoft Advertising — About the Conversions API: https://help.ads.microsoft.com/apex/index/3/en/56905
  2. Microsoft Advertising — Universal Event Tracking (UET): https://help.ads.microsoft.com/apex/index/3/en/56684
  3. Microsoft Advertising — Microsoft Click ID (msclkid) and auto-tagging: https://help.ads.microsoft.com/apex/index/3/en/60000
  4. Microsoft Learn — Conversions API technical reference: https://learn.microsoft.com/en-us/advertising/guides/universal-event-tracking

Frequently asked questions

QDo I need Microsoft's approval to use the Bing Conversions API?
Yes. Microsoft gates Conversions API access at the advertising-account level — you request it, and once approved you get a CAPI token tied to your UET tag. No third-party tool can grant, bypass, or accelerate that approval. Request it early if you're planning a server-side setup, since it's typically the longest lead time in the project. Your UET tag keeps working normally while you wait.
QDoes the Conversions API replace my UET tag?
No — keep both. The UET tag handles browser-side signals and remains the foundation of Microsoft's tracking; CAPI adds a server-side path for conversions the browser misses or that happen where no browser exists. Microsoft deduplicates the two when they share an event ID and event name, so a conversion firing from both sides is counted once. Removing the UET tag reduces the signal available for matching.
QHow does Microsoft match a server-side conversion to the original ad click?
Primarily through `msclkid`, the Microsoft Click ID appended to your landing page URL when someone clicks an ad. It has to be captured on that first pageview and stored, because it won't be present days later when the conversion happens. Hashed user data (email, phone) can strengthen matching. This is why capture-at-first-touch matters: without a stored click ID, a server-side conversion arrives with nothing to attribute it to.
QCan I choose which leads count as conversions instead of counting every form fill?
That's exactly what condition-based firing does. Rather than pointing a goal at a thank-you page and counting whoever lands there, you define what qualifies — completed submissions only, submissions matching a rule over the captured field data, booked appointments, or leads you approve individually. The distinction matters because automated bidding optimizes toward whatever you call a conversion; feeding it unfiltered form fills teaches it to find more unfiltered form fills.
QCan I send leads that were captured before I set up the Conversions API?
Partially, and the limit is Microsoft's rather than the tool's. Because every captured lead is retained and visible, you can send a specific lead on demand — helpful when approval arrived after the leads did, or when a rule change means previously-skipped leads should now count. But Microsoft accepts event timestamps within a **7-day window**, so leads older than that still deliver with a clamped timestamp instead of their true original time. Treat it as recovery within the recent window, not unlimited backfill.
QHow do I stop server-side and browser conversions from double-counting?
Shared, deterministic event IDs. Both the UET tag's event and the server-side event must carry the same event ID and event name for the same conversion, so Microsoft recognizes them as one. The common failure is generating a fresh random ID on each side — nothing matches, and every conversion counts twice. A pipeline that derives event IDs from the underlying lead or order record produces the same ID every time, including on retries, which is what makes deduplication reliable rather than hopeful.
QIs Microsoft Ads conversion tracking worth this effort for a smaller budget?
Often more worth it, proportionally. Microsoft Ads tends to carry lower competition and cheaper clicks than Google, which means a smaller budget can move real volume — but only if the bidding algorithm is fed accurate signals. A small account training on junk conversions wastes a larger share of its budget than a big one. That said, if you're spending very little and your conversion volume is a handful per month, the algorithm has little to learn from either way; get the definition of a conversion right first, then add the server-side path.

Find the qualified leads your forms are currently throwing away.

Install PartialLeads on one landing page, send traffic, and compare what your CRM captured against what PartialLeads recovered and qualified.