get_ad_creative

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_creative/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/export the creative composition of existing ads โ€” videos, images (downloadable URLs), and all text. This tool retrieves READ-ONLY data via 2 live GAQL queries (cached 15 min in Redis). Safe to call multiple times. **Why this tool:** `get_campaign_structure` shows ads but not what they're made of. This tool returns the full creative payload of any existing ad so you can audit, archive, or rebuild winners into other formats. **Returns per ad:** - Identity: `ad_id`, `ad_name`, `ad_type`, `status`, `ad_strength`, ad group + campaign context - **Videos:** YouTube `video_id` + `watch_url` + `thumbnail_url` + title per video asset - **Images:** direct downloadable `url` (Google CDN) + `width`/`height` + `mime_type` + `role` (marketing / square_marketing / portrait_marketing / logo / square_logo) - **Text:** `headlines[]`, `long_headlines[]`, `descriptions[]`, `business_name`, `call_to_actions[]` - **Carousel ads:** per-card headline + CTA + card images (resolved to URLs) - `final_urls`, `display_url`; RSA `path1`/`path2`; RDA colors **Supported ad types (v1):** DEMAND_GEN_VIDEO_RESPONSIVE_AD, DEMAND_GEN_MULTI_ASSET_AD, DEMAND_GEN_CAROUSEL_AD, RESPONSIVE_SEARCH_AD, RESPONSIVE_DISPLAY_AD. PMax creative lives in asset groups (no per-ad rows) โ€” not covered; use list_pmax_asset_group_images. **Known API limits (not bugs):** video files are NOT downloadable via the Google Ads API (YouTube watch URL is the canonical reference); per-video orientation (landscape/square/portrait) is not exposed by the API. **Parameters:** - customer_id: Optional (uses connected account if omitted) - ad_id: single ad โ€” OR ad_group_id โ€” OR campaign_id (bulk). At least one required. - status_filter: 'all' (default โ€” includes paused, useful for archiving) | 'enabled' - limit: max ads (default 50, max 100) **Execution time:** 2-5 seconds (2 GAQL queries, then cached 15 min) **Use this tool when:** - User asks "what's in this ad?", "download/export my creatives", "which video/image does this ad use?" - After get_ad_performance identified a winner/loser and the user wants to see or reuse its creative - User wants to rebuild a winning ad in another format or audit live creatives **Tip:** Pair with `get_ad_performance` โ€” performance tells you WHICH ad wins, this tells you WHAT it's made of.

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
customer_idstring optionalGoogle Ads customer ID. Required for multi-account users. Get from get_connections_status.
ad_idstring optionalA single ad ID to export (from get_ad_performance or get_campaign_structure).
ad_group_idstring optionalExport all ads in this ad group.
campaign_idstring optionalBulk: export all ads in this campaign (from list_campaigns).
status_filterstring optional'all' (default โ€” every non-REMOVED ad, paused included for archiving) or 'enabled' (only ENABLED ads). default: "all"
limitinteger optionalMax ads returned (default 50, max 100). default: 50
raw_databoolean optionalReturn the full raw JSON payload instead of formatted markdown. default: false

Example request

{
  "arguments": {
    "customer_id": "string",
    "ad_id": "string",
    "ad_group_id": "string",
    "campaign_id": "string",
    "status_filter": "all",
    "limit": 50
  }
}

Example responses

200 โ€” Success

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

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_creative"
}

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_creative",
  "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