Skip to main content
Nerve Centre KPIs · Audit Profile · Sentiment Settings Audits Meta Ads spend pacing, ROAS, conversion tracking parity (CAPI/Pixel), creative fatigue, and cross-channel revenue at risk.

What this audit checks

Authentication & access

  • Long-lived access_token present and not within 7 days of expiry (expires_in / is_long_lived)
  • Granted scopes include ads_read, ads_management, business_management
  • ad_account_id resolves and account_status is ACTIVE on /me/adaccounts

Spend & budget pacing

  • Daily spend vs daily_budget / lifetime_budget pacing per campaign (under or over delivery)
  • Ad sets pacing >120% of intended daily budget (runaway delivery)
  • Campaigns with budget but zero spend in last 72h (delivery stalled)

Campaign performance (ROAS/CTR/CPC)

  • ROAS per campaign from /act_/insights (purchase_roas) vs threshold
  • CTR decay vs prior 7D same-DOW window per ad set
  • CPC drift above account average on active campaigns
  • Disapproved or rejected ads still attached to active ad sets

Conversion & attribution

  • CAPI + Pixel event_id match rate below parity floor (deduplication broken)
  • Clicks rising while tracked conversions <50% expected (silent tag failure)
  • iOS 14.5+ attribution drift - modelled vs observed conversion gap widening

Creative & audience health

  • Ad sets with frequency >7 and CTR <0.5% (creative fatigue + audience exhaustion)
  • Active ad sets targeting custom audiences <1000 (below Meta privacy floor, won’t deliver)
  • AdCreative status not ACTIVE while parent ad set is still spending

Cross-channel revenue at risk

  • Active catalog/DPA ads driving spend on commerce-sibling SKUs with qty=0 (ads-on-OOS)
  • Audience overlap with klaviyo/dotdigital email subscribers (paying to reach owned contacts)
  • Meta mobile landing pages with website_performance LCP >4s and below-average CR

Severity thresholds

SignalWarnCritical
roas-< 1.0
ctr-< 0.5%
conversion_rate-< 0.5%
cpc-> 2.0x account average
wasted_spend_pct-> 25% of account spend on zero-conversion ad sets
budget_pacing-> 120% or < 50% of intended daily budget

Data sources

  • GET https://graph.facebook.com/v22.0/me/adaccounts - List accessible ad accounts and account_status
  • GET https://graph.facebook.com/v22.0/act_{ad_account_id}/campaigns - Campaigns with objective, status, daily_budget, lifetime_budget, bid_strategy
  • GET https://graph.facebook.com/v22.0/act_{ad_account_id}/adcreatives - Ad creatives for fatigue and status checks
  • GET https://graph.facebook.com/v22.0/act_{ad_account_id}/insights - Spend, ROAS, CTR, CPC, frequency, conversions per campaign/ad set
  • POST https://graph.facebook.com/v22.0/oauth/access_token - Exchange/refresh OAuth access token