get_ad_policy_violations

Google Ads Read

๐Ÿšจ **IF THIS TOOL RETURNS A QUOTA ERROR:** - The error message will include a clickable upgrade link - Show the FULL error message to the user (it contains the upgrade link) - DO NOT attempt to work ar

Endpoint

POST https://api.adspirer.ai/api/v1/tools/get_ad_policy_violations/execute

Headers

Description

๐Ÿšจ **IF THIS TOOL RETURNS A QUOTA ERROR:** - The error message will include a clickable upgrade link - Show the FULL error message to the user (it contains the upgrade link) - DO NOT attempt to work around the error or use alternative data - DO NOT create campaigns or perform actions without valid tool data - STOP and direct the user to upgrade via the provided link Read policy review/approval state for ads. Surfaces the exact reason an ad was disapproved or limited. **When to use:** - User says "my ad got disapproved, why?" - User says "my campaign isn't serving โ€” is there a policy issue?" - Routine pre-launch check for newly created ads **Returns per ad:** - approval_status: APPROVED, APPROVED_LIMITED, DISAPPROVED, AREA_OF_INTEREST_ONLY, UNSPECIFIED - review_status: REVIEW_IN_PROGRESS, REVIEWED, UNDER_APPEAL, ELIGIBLE_MAY_SERVE - topic_entries: list of specific policy topics violated, each with: - topic: human-readable policy name (e.g. "Healthcare and medicines") - type: PROHIBITED, LIMITED, FULLY_LIMITED, DESCRIPTIVE, BROADENING, AREA_OF_INTEREST_ONLY - evidences: text snippets, URLs, language codes that triggered the flag - constraints: countries / certifications affected **Filters (provide at least one of ad_id / ad_group_id / campaign_id):** - ad_id: most precise; use when investigating one specific ad - ad_group_id: every ad in this ad group - campaign_id: every ad in this campaign - status_filter (default DISAPPROVED_OR_LIMITED): DISAPPROVED, LIMITED, DISAPPROVED_OR_LIMITED, or ALL **Limitations:** - Returns up to 500 ads per call - REMOVED ads are excluded - Asset-level violations (image disapprovals) are reported on the parent ad - New ads in REVIEW_IN_PROGRESS won't show topic_entries yet โ€” wait for review **Example:** User: "Why isn't my ad serving in the lead-gen campaign?" Agent: 1. Calls list_campaigns to find campaign_id 2. Calls get_ad_policy_violations(campaign_id=X, status_filter='DISAPPROVED_OR_LIMITED') 3. If results: shows topic, type, and evidence for each โ€” explains what to fix 4. If empty: "All ads are approved. The non-serving issue is elsewhere (budget, bidding, targeting)."

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
ad_idstring optionalSpecific ad ID to check. Most precise; use this when investigating one disapproved ad.
ad_group_idstring optionalFilter to all ads in this ad group.
campaign_idstring optionalFilter to all ads in this campaign.
status_filterstring optionalApproval-status filter: DISAPPROVED_OR_LIMITED (default โ€” only ads with policy issues), DISAPPROVED, LIMITED, or ALL (every ad regardless of approval state). default: "DISAPPROVED_OR_LIMITED"
customer_idstring optionalGoogle Ads customer ID. Required for multi-account users. Get from list_connected_accounts.

Example request

{
  "arguments": {
    "ad_id": "string",
    "ad_group_id": "string",
    "campaign_id": "string",
    "status_filter": "DISAPPROVED_OR_LIMITED",
    "customer_id": "string"
  }
}

Example responses

200 โ€” Success

{
  "success": true,
  "data": {
    "text": "(tool-specific textual output for get_ad_policy_violations)",
    "quota": {
      "used": 42,
      "limit": 150,
      "tier": "plus",
      "period_end": "2026-05-01"
    }
  },
  "tool": "get_ad_policy_violations"
}

400 โ€” Tool-level error (bad arguments / multi-account selection)

{
  "success": false,
  "error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n  - Acme Holdings (ad_account_id=\"act_123456789\")\n  - Acme EU (ad_account_id=\"act_987654321\")",
  "is_error": true,
  "tool": "get_ad_policy_violations"
}

402 โ€” Quota exhausted

{
  "success": false,
  "error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
  "is_error": true,
  "tool": "get_ad_policy_violations",
  "quota": {
    "used": 150,
    "limit": 150,
    "tier": "plus",
    "period_end": "2026-05-01",
    "upgrade_url": "https://adspirer.ai"
  }
}

Try it live


Adspirer REST API โ€” get an API key at adspirer.ai/keys ยท adspirer.ai