What this audit checks
Authentication & access
- OAuth refresh token expiring within 30d (90-day inactivity window per Microsoft identity platform)
- Developer token invalid or revoked on /CustomerManagement/v13/Accounts probe
- Customer ID / Account ID mismatch (AccountId not under the supplied CustomerId)
- Account AccountLifeCycleStatus not Active (paused or pending blocks reporting)
Spend & budget pacing
- DailyBudget over-pacing - DailyBudgetAccelerated burning budget before high-converting hours
- Campaigns in BudgetPaused / BudgetAndManualPaused state still flagged active in reporting
- Budget utilisation below 60% mid-month (under-delivery on the hedge)
- Spend concentrated in one campaign type while Shopping / Audience starved
Campaign performance (ROAS / CTR / CPC)
- ROAS below merchant target across Search / Shopping campaigns (Reporting/v13/GenerateReport)
- CTR below archetype floor signalling weak ad relevance or saturated audience
- CPC creep above Bing category benchmark vs prior 30D window
- Audience Network placements with CTR <0.3% bleeding spend on low-quality publishers
Conversion & attribution
- UET tag broken - clicks rising while conversions <50% expected for >30min (ITP / AdBlock failure)
- Conversion import from Google Ads stale - offline conversions paused or missing, Smart Bidding trains on degraded data
- Zero-conversion spend over threshold across campaigns in last 72h
- Conversion rate below account-average on imported Shopping campaigns post Google sync
Creative & audience health
- Ads with EditorialStatus rejected or disapproved still in active campaigns
- Audience Network frequency saturation overlapping shared LinkedIn pools
- Responsive Search Ads with insufficient active assets in serving rotation
- Paused ad groups left in enabled campaigns (orphan serving / wasted Quality Score)
Cross-channel revenue at risk
- Active Shopping ads on out-of-stock SKUs (commerce sibling product.qty = 0)
- Branded paid clicks cannibalising organic - Bing branded keywords ranking #1 organically (GSC sibling)
- Landing pages with LCP >4s and CR <0.5x account-avg (website_performance sibling)
- Shopping campaign spend against a Feedonomics feed with live rejections
Severity thresholds
| Signal | Warn | Critical |
|---|---|---|
roas | 3 | - |
ctr | 1.0 | - |
conversion_rate | 1.5 | - |
cpc | 2.5 | 5.0 |
wasted_spend_pct | 5 | 12 |
budget_pacing | 60 | - |
Data sources
GET https://ads.bingapis.com/CustomerManagement/v13/Accounts- Auth + account sanity (AccountLifeCycleStatus, CurrencyCode)POST https://ads.bingapis.com/CampaignManagement/v13/Campaigns/Query- Campaign state, type, budget + cross-channel join keysPOST https://ads.bingapis.com/CampaignManagement/v13/Ads/Query- Creative review status (EditorialStatus) for disapproval findingsPOST https://ads.bingapis.com/Reporting/v13/GenerateReport- Spend / clicks / conversions / ROAS aggregatesPOST https://login.microsoftonline.com/common/oauth2/v2.0/token- Refresh OAuth access token