At a glance
Return on ad spend on Microsoft Advertising. Revenue ÷ Spend. Microsoft Ads typically delivers a higher ROAS than Google Ads on matched campaigns thanks to lower CPC, often 1.3x to 1.8x the Google ROAS. Below 2x is unprofitable for most DTC margins; above 4x is healthy and worth scaling into.
| The formula | metrics.Revenue ÷ metrics.Spend. Both are in account currency, no unit conversion needed (unlike Google Ads’ cost-micros quirk). The result is a unitless ratio; nine returned as 4.9 means £4.90 of measured revenue per £1 spent. |
| What “spend” means | Gross media cost, post Click Quality filter. The figure Microsoft will bill you for. |
| What “revenue” means | UET-tracked conversion value in your Microsoft Advertising account. NOT order revenue from the commerce platform, the two often differ by 15, 35%. See Reconciling below. |
| Conversion attribution model | Whatever you’ve configured in Microsoft Advertising. Default is Last click with cross-device. Older accounts may still use Last click without cross-device; switching to data-driven can shift ROAS 10, 20% overnight. |
| View-through conversions | Excluded from the primary Revenue metric used here. Microsoft splits primary conversions (counted in ROAS) from “all conversions” (which adds view-through). This card uses the primary, conservative read. |
| Bot / invalid traffic | Spend is post-Click-Quality-filter; revenue is real-purchase only (UET tag fires on real browsers). Some IVT slips through on Search Partner Network and Microsoft Audience Network, expect a 2, 5% drag on ROAS from low-quality clicks that didn’t get credited back. |
| Currency | Account currency. Multi-currency advertisers should run separate accounts per currency. |
| Cross-account aggregation | Per-customer-account. For a manager-account-equivalent view summed across child accounts, use the per-account ROAS drilldown. |
| Time window | 30D vsP (default 30D vs the prior 30D). |
| Alert trigger | < 2.0 (warn), < 1.0 (critical). Driven by sentiment_key: roas. Gauge thresholds: good ≥4, warn 2, 4, critical <2. |
| Roles | owner, marketing, finance |
Calculation
Calculated automatically from your Microsoft Ads (Bing) data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.Worked example
A UK home-and-garden retailer running both Google Ads and Microsoft Ads. The 30-day window covers 03 Apr 26 to 02 May 26.| Channel | Spend | Microsoft-attributed Revenue | ROAS | Equivalent Google ROAS for matched campaigns |
|---|---|---|---|---|
| Bing Search (brand) | £1,100 | £14,200 | 12.9x | 14.2x |
| Bing Search (non-brand) | £2,550 | £6,800 | 2.7x | 1.9x |
| Microsoft Audience Network | £820 | £750 | 0.9x | 1.4x (Display) |
| Total Microsoft (this card) | £4,470 | £21,750 | 4.9x | 3.6x |
- Microsoft non-brand ROAS (2.7x) beats Google non-brand (1.9x). That’s the structural Microsoft advantage at work, lower auction competition means each click costs less, so the same conversion rate delivers more ROAS. This is the single best argument for keeping Microsoft Ads on a media plan, even at small spend it improves blended ROAS.
- The 4.9x headline is inflated by brand keywords. Strip brand and Microsoft non-brand ROAS is 2.7x, still acceptable but no longer remarkable. When reporting to leadership, distinguish brand from non-brand or you’ll over-celebrate.
- Microsoft Audience Network at 0.9x is unprofitable in isolation but worth keeping if it’s driving mid-funnel awareness that converts elsewhere. If you can’t see that downstream lift, pause MSAN.
- The prior 30-day ROAS was 5.4x on £4,180 spend. Spend up 7%, ROAS down 9%. Acceptable but watch the next two weeks; a sustained ROAS slide alongside a spend rise is the warning shape.
- ROAS up + spend up = scaling into efficient inventory (rare, excellent).
- ROAS flat + spend up = healthy expansion.
- ROAS down + spend up = scaling beyond efficient frontier; investigate before holding.
- ROAS down + spend flat = audience or competitive change; check Search Partner Network and MSAN share.
- ROAS up + spend down = pulled back wisely from a low-quality placement.
Sibling cards merchants should reference together
| Card | Why pair it with ROAS |
|---|---|
| Microsoft Ads Total Spend | The denominator. ROAS up + spend up is healthy scaling; ROAS up + spend down is unhealthy retreat. |
| Microsoft Ads Total Revenue | The numerator. Tells you whether ROAS moved on cost-side or revenue-side. |
| Microsoft Ads ROAS by Campaign | Headline ROAS hides per-campaign variance, especially brand vs non-brand. Open this before making decisions. |
| Microsoft Ads ROAS Trend | Daily series. Microsoft ROAS is volatile day-to-day on small spend; the 7-day rolling is the useful read. |
| Microsoft Ads ROAS by Device | Microsoft skews desktop more than Google; device-level ROAS often diverges by 30%+. |
| Microsoft Ads CPA Trend | Cost per acquisition. ROAS-blind CPA can mislead because cheap conversions can also be tiny conversions. |
| Microsoft Ads Clicks vs Conversions | The broken-tracking canary. Clicks rising while conversions stagnate = UET tag broke. |
| Google Ads ROAS | The benchmark. Microsoft non-brand ROAS often beats Google non-brand by 30, 80%; that’s the cheap-incremental thesis in numbers. |
| Shopify Total Revenue | The truth side. Real ROAS for the business uses commerce-platform revenue (UTM-tagged Bing/CPC) not Microsoft’s measured value. |
Reconciling against the vendor’s own dashboard
Where to look in Microsoft Advertising: Microsoft Advertising → Reports → Performance → Account Summary, with both Spend and Revenue columns visible. Build the Revenue / Spend column or compute manually. The headline figure should match this card to within 1, 2%. Other Microsoft Advertising views that look like ROAS but aren’t:- Return on Ad Spend (ROAS) in the Smart Goals report: same metric, but Smart Goals uses Microsoft’s modelled values rather than UET-measured. Ours uses primary UET-measured.
- Cost per acquisition (CPA): inverse-ish of ROAS but in absolute pounds; not a ratio.
- Profit: not exposed by the API for our cards; this card is purely revenue-over-spend.
| Reason | Direction of divergence |
|---|---|
| Real-time event-ingestion lag. Microsoft conversions can ingest with 1, 6 hour delay. | Marginal on the most recent 24h |
| Attribution window changes. If you changed the model mid-window, the Microsoft UI shows the current model retroactively; we do the same. | None |
| Currency. Both use account currency. | None |
| Smart Goals modelled value. If you opted into Smart Goals modelled revenue, Microsoft UI may show a higher revenue (and thus higher ROAS); we report primary measured. | Ours lower |
Revenue Microsoft Advertising reports is whatever the UET tag captured. That value flows from your tag config:
- If the UET tag sends order revenue with VAT/tax, ROAS is on a tax-inclusive basis.
- If the tag sends only first-purchase value, ROAS understates returning-customer revenue.
- If you’ve enabled Enhanced Conversions, ROAS includes some Microsoft-imputed revenue.
shopify.total_revenue tagged utm_source=bing (or microsoft) by Microsoft Ads spend. The two figures should be within 35%; bigger gaps usually mean (a) UET tag-fire failure (run UET diagnostics in the Microsoft UI), or (b) UTM tagging gaps on the commerce side, not all Bing traffic carries the right UTMs.
Cross-connector reconciliation:
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
google_ads.gads_roas | Microsoft non-brand ROAS typically 1.3, 1.8x Google non-brand ROAS for matched campaigns | Lower CPC on Bing means the same conversion rate produces higher ROAS. If Microsoft ROAS underperforms Google on matched campaigns, your bids on Microsoft are likely too high (a frequent post-import problem). |
google_analytics.ga_revenue_by_channel | (GA4 Microsoft channel revenue) ÷ Microsoft Ads spend ≈ this card, ±15% | GA4 attributes per session, Microsoft attributes per ad click; window mismatches drive most variance. |
shopify.total_revenue | True business ROAS = (Shopify Bing-tagged revenue) ÷ Microsoft Ads spend | Shopify catches every paid order; UET catches only tag-fired purchases. True ROAS is typically 1.15, 1.35x this card. |
Known limitations / merchant FAQs
My Microsoft Ads ROAS is 5x and Google ROAS is 3x. Should I move budget from Google to Microsoft? Not blindly. The ROAS gap is real but Microsoft’s volume ceiling is much lower, you can’t 10x your Microsoft spend without ROAS collapsing because there simply aren’t enough Bing/Yahoo searches at your target keywords. The right play is: increase Microsoft until ROAS dips below 3x or volume plateaus, whichever comes first. Most merchants find Microsoft can absorb 2, 3x the spend they currently allocate before efficiency breaks. My Microsoft Ads ROAS dropped 30% overnight, what should I check first? In order of likelihood: (1) UET tag regression. Check Clicks vs Conversions, if clicks held but conversions cratered, the tag broke. (2) Microsoft Audience Network ramping. MSAN is on by default and can suddenly find inventory at much lower ROAS than Search; check the Network segment in your campaign report. (3) Smart Bidding learning phase. A campaign restructure (new conversion goal, audience swap) puts Smart Bidding back into a 7-14 day learning phase where ROAS is unstable. (4) Attribution-model change. Check Tools → Attribution; someone may have switched from last-click to data-driven. (5) Search Partner Network share rose. Auto-included partners deliver lower ROAS than Bing core; segment by network and review. Why is my Branded Search ROAS so high (12x+) on Microsoft? Same dynamic as Google, plus more pronounced. People searching your brand on Bing are usually existing customers checking your site. Microsoft’s lower CPC makes brand ROAS look spectacular but the volume is small. Brand ROAS is a poor measure of paid-acquisition health, you’re not really acquiring those customers. The “true acquisition” ROAS is the ROAS on non-brand campaigns only. Should I optimise for ROAS or for total profit? Depends on your phase. If you’re profitability-constrained, optimise ROAS. If you have profitable unit economics and want growth, optimise spend × ROAS (i.e. revenue) and accept ROAS will compress as you scale. Microsoft Ads is rarely the channel where this matters at scale, the volume just isn’t there. Most decisions on Microsoft are “should we be spending more here, full stop”, and the answer is usually yes. My non-brand Microsoft ROAS is 1.5x. Should I pause those campaigns? Probably not, but tighten them. A 1.5x ROAS on Microsoft non-brand corresponds roughly to 0.9, 1.1x on Google for the same audience (because Microsoft’s lower CPC compensates). At that level you’re slightly unprofitable on direct response but likely contributing to brand awareness that Google captures later. Tactical moves: (a) raise the bid floor to push out the bottom 30% of clicks, (b) tighten match types from Broad to Phrase or Exact, (c) audit search terms for the worst converters, (d) check device performance, mobile is often a third the ROAS of desktop on Microsoft. Why does my Microsoft ROAS look healthy in this card but my P&L disagrees? Same trap as Google: theRevenue Microsoft reports is gross, before COGS, fulfilment, returns, and overhead. For a 60% gross margin and 8% return rate, a 4x ROAS gives roughly 1.4x contribution multiple, marginally profitable. Rule of thumb: divide ROAS by 2 to estimate true contribution multiple for typical DTC margins.
Can I trust the “today” ROAS?
Less than the rolling 7-day. Microsoft conversions ingest with 1, 6 hour lag, and view-through windows accumulate over multiple days. The 7-day rolling is the most actionable. Don’t restructure based on a single day’s Microsoft ROAS, especially below £500 daily spend where one or two outlier orders can swing the number 30%.
My MCC has 5 child accounts. Why does this card only show one?
This card is per-customer-account. To see ROAS aggregated across multiple Microsoft Advertising customer IDs, use the per-account ROAS drilldown, or add each customer ID as a separate connector instance.