Skip to main content
Nerve Centre KPIs · Audit Profile · Sentiment Settings The questions every cross-engine PPC manager asks at 9am on Monday: is the Bing hedge actually capturing incremental revenue vs Google, is the UET tag still firing through ITP and AdBlock, are Audience Network placements driving lift or just frequency-padding LinkedIn pools, and did the Google import sync silently degrade conversion signal. Cross-references commerce siblings for Shopping-ads-on-OOS, google_search_console for branded cannibalisation, and website_performance for landing-page Web Vitals.

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

SignalWarnCritical
roas3-
ctr1.0-
conversion_rate1.5-
cpc2.55.0
wasted_spend_pct512
budget_pacing60-

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 keys
  • POST https://ads.bingapis.com/CampaignManagement/v13/Ads/Query - Creative review status (EditorialStatus) for disapproval findings
  • POST https://ads.bingapis.com/Reporting/v13/GenerateReport - Spend / clicks / conversions / ROAS aggregates
  • POST https://login.microsoftonline.com/common/oauth2/v2.0/token - Refresh OAuth access token