---
name: resolve-ad-disapprovals
description: >-
  Restores ad serving after policy disapprovals: inventories every disapproved or limited ad and
  asset via gads_get_disapproved_ads and policy-summary GAQL, prioritizes ad groups left with zero
  eligible ads, diagnoses each cited policy with gads_policy_guardrail, and executes the fix, compliant rewrite via gads_update_ad, or a fresh gads_create_responsive_search_ad plus
  gads_pause_ad on the violator, while appeals and landing-page repairs are routed to the human.
  Use it when a disapproval alert fires, daily triage finds new disapprovals, or an ad group's
  impressions drop to zero. Do not use it for account-level suspensions (human escalation to
  Google), for pre-launch policy vetting of new copy (write-compelling-rsas covers that), or for
  performance drops with no policy status involved (investigate-performance-anomalies).
---
# Diagnose and Clear Ad Disapprovals

## Purpose
A disapproved ad costs impressions immediately, and an ad group whose last eligible ad goes down
stops serving entirely; repeated violations compound into account-level risk. This skill turns a
disapproval list into a prioritized fix queue, gets compliant creative live fast, and, critically, never tries to sneak around a policy decision, because circumvention is the one mistake that
converts an ad problem into an account suspension.

## When to run
- Daily triage or an alert surfaces new DISAPPROVED or approved-with-limits ads or assets.
- An ad group's impressions fell to zero and eligibility is the suspected cause.
- A monthly review shows stale disapprovals nobody cleared.
- Before scaling spend on a campaign that carries any limited-status creative.

## When NOT to run
- The whole account is suspended, that is a direct Google support process, not an ad-level fix.
  HUMAN STEP entirely.
- You are writing new ads and want them policy-safe up front, write-compelling-rsas plus a
  gads_policy_guardrail consultation covers creation-time vetting.
- Impressions dropped but policy status is clean, use investigate-performance-anomalies.

## Prerequisites
- Access to the affected account via VigilDog.
- Knowledge of each affected ad's intended message and landing page (needed to judge whether a
  violation is real).
- Landing-page ownership contact, in case the destination is the problem.

## Procedure
Consult `gads_policy_guardrail` before the first Google Ads write of this session, this skill's
subject matter makes that non-optional. Every write below is previewed first
(validate_only=true default) and applied only after explicit user approval.

1. Build the inventory. Call `gads_get_disapproved_ads` for the account. Include limited-approval
   ads, not just hard disapprovals, limited status silently caps reach and deserves the same
   urgency.
2. Deepen with GAQL. Use `gads_run_gaql_query` on the ad policy summary fields to capture, per
   ad: the cited policy topics, the enforcement level, and its recent impression volume. Query
   asset-level approval status too, sitelinks, callouts, and images get disapproved and are
   routinely overlooked.
3. Rank the queue. For each affected ad group, count remaining eligible ads (GAQL). Priority
   order: (a) ad groups with zero eligible ads, they cannot serve at all; (b) high-impression
   ads; (c) everything else. Present the ranked inventory to the user.
4. Diagnose each item. Feed the cited policy topic to `gads_policy_guardrail` to retrieve the
   actual policy text and known triggers. Common patterns: overstated or unprovable claims;
   unauthorized trademark use; display/final URL mismatch; a destination that 404s, redirects
   badly, or trips security scanning; regulated verticals (health, finance, alcohol, gambling)
   needing certification; and pure editorial problems (capitalization, punctuation, symbols).
5. Choose the path per item:
   - Real violation, fixable in copy → rewrite.
   - Real violation, message depends on a restricted claim → replace with different messaging,
     or the user pursues certification. HUMAN STEP (outside VigilDog) for certification.
   - Compliant ad flagged wrongly → appeal. HUMAN STEP (outside VigilDog): appeals and re-review
     requests are filed in the Google Ads UI; VigilDog has no appeal tool.
   - Destination problem → the page gets fixed before anything else; editing copy is pointless
     while the URL fails. HUMAN STEP (outside VigilDog) for the page fix; verify the live URL
     afterwards.
6. Execute rewrites. Prefer creating a replacement over editing in place: generate compliant copy
   (checked against `gads_policy_guardrail` before submission), create the new ad with
   `gads_create_responsive_search_ad`, then pause the violator with `gads_pause_ad`. This keeps
   the original's history intact and gives the replacement a clean review. For minor editorial
   fixes, `gads_update_ad` in place is fine. Preview first, apply only after user approval.
   Note: policy review of the new ad typically takes about one business day.
7. Handle stuck items. If an appeal already failed or a disapproval will not clear after a
   destination fix, a small text or final-URL edit via `gads_update_ad` forces a fresh review
   pass, often faster than a second appeal, especially for destination-based flags. Preview
   first, apply only after user approval.
8. Verify. After roughly one business day, re-run `gads_get_disapproved_ads` and the eligibility
   count from step 3. Confirm no ad group is still at zero eligible ads; if a replacement is
   still under review in a zero-eligible group, tell the user explicitly, that group is dark
   until review completes.
9. Prevent recurrence. Log each incident: policy topic, what triggered it, which path resolved
   it. If the same policy recurs, the creative approach needs changing, not the appeal cadence.
   Fold the trigger into future copy generation prompts and pre-checks.

## Decision rules
- Zero-eligible-ad groups outrank everything, including higher-spend accounts' politeness
  queues. Fix or backfill them same-session.
- Treat limited approval as a disapproval with better PR, same queue, same urgency.
- Appeal only when the ad genuinely complies and you can say why; if the ad does violate the
  policy, edit, appealing a real violation wastes days and creates a paper trail of denials.
- One failed appeal on an item = stop appealing; force re-review through a minor edit instead.
- Never resolve a disapproval by duplicating the ad/campaign unchanged, spinning up a fresh
  account, or superficially masking flagged content. That is policy circumvention, it is a hard
  block for VigilDog, and it is the fastest route from one dead ad to a dead account.
- Fix disapprovals within 24 hours of detection; impression loss compounds daily and lingering
  violations raise account-level risk.
- Review timelines to plan around: edited/new ads typically clear in ~1 business day; appeals
  take ~1-3 business days. In a zero-eligible ad group, prefer the faster path.
- Editorial violations (formatting, symbols, capitalization) are always cheaper to fix than to
  appeal, rewrite immediately, never argue.

## Common failure modes
- Auditing only ads and missing disapproved assets, an ad can be "fine" while its sitelinks are
  all dark. Step 2 queries both layers on purpose.
- Editing ad copy when the landing page is the flagged element; the resubmission just fails
  again. Diagnose destination issues before touching creative.
- Appeal ping-pong: re-appealing the same denial instead of forcing a re-crawl or rewriting.
- Deleting the disapproved ad before its replacement clears review, leaving the ad group empty.
- Fixing individual ads while ignoring the pattern, so every new batch trips the same policy.
  The prevention log in step 9 is what breaks the loop.

## Related skills
- run-a-daily-account-health-check, upstream detection of new disapprovals.
- configure-account-alerts, the automated disapproval check that triggers this skill.
- write-compelling-rsas, creation-time copy standards that avoid the queue entirely.
- investigate-performance-anomalies, when serving dropped but policy status is clean.
