Google Ads Write
๐จ **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
POST https://api.adspirer.ai/api/v1/tools/create_demandgen_campaign/execute
Authorization: Bearer sk_live_... โ your Adspirer API key (required)Content-Type: application/json (required)Idempotency-Key: <uuid> โ recommended for write operations to make retries safeAll tool arguments are wrapped in an arguments object.
| Field | Type | Description |
|---|---|---|
campaign_name | string required | Campaign name (e.g., 'DemandGen Summer Promo 2026') |
budget_daily | number required | Daily budget in the account's native currency. IMPORTANT: Do NOT convert currencies โ pass the user's amount as-is. Example: if user says 'โน1000/day', pass 1000 (not a USD conversion). Google recommends minimum ~$20/day USD equivalent for Demand Gen campaigns. |
ad_format | string optional | Ad format: 'multi_asset' (image ads, default), 'video_responsive' (video ads). multi_asset requires marketing images. video_responsive requires YouTube video IDs. default: "multi_asset" |
final_url | string required | Landing page URL (must match verified domain). Example: 'https://example.com/product' |
business_name | string required | Business name, max 25 characters. Example: 'Adspirer' |
headlines | array required | MUST BE JSON ARRAY: 1-5 headlines, each EXACTLY 40 characters maximum. Example: ["AI Ad Management", "Skip the Dashboard"]. COUNT CHARACTERS! ANY over 40 will be REJECTED! |
descriptions | array required | MUST BE JSON ARRAY: 1-5 descriptions, each EXACTLY 90 characters maximum. Example: ["Manage ads with AI - no dashboard needed."]. COUNT CHARACTERS BEFORE CALLING! |
long_headlines | array optional | MUST BE JSON ARRAY: Optional 1-5 long headlines, max 90 characters each. Required for video_responsive format. Falls back to headlines if not provided. |
call_to_action | string optional | Call-to-action label. Options: LEARN_MORE, SHOP_NOW, SIGN_UP, SUBSCRIBE, DOWNLOAD, BOOK_NOW, CONTACT_US, GET_QUOTE, APPLY_NOW |
target_locations | array optional | Geographic targets globally (e.g., ['India', 'United States', 'London']). Supports countries, states, cities worldwide. Defaults to United States. |
target_languages | array optional | Language targets as ISO codes (e.g., ['en', 'es']). Defaults to English. |
bidding_strategy | string optional | Bidding strategy: MAXIMIZE_CLICKS (default), MAXIMIZE_CONVERSIONS, TARGET_CPA, MAXIMIZE_CONVERSION_VALUE, TARGET_ROAS. Your explicit choice is honored โ the engine is advisory only. default: "MAXIMIZE_CLICKS" |
target_cpa | number optional | Target CPA in account's native currency (only for TARGET_CPA bidding). Example: 25.0 |
target_roas | number optional | Target ROAS multiplier (only for TARGET_ROAS bidding). Example: 3.5 means 350% return on ad spend. |
channels | object optional | Optional channel controls. Keys: youtube_in_feed, youtube_in_stream, youtube_shorts, gmail, discover, display. All default to true (full reach). Example: {"gmail": false, "display": false} to exclude those channels. |
marketing_images | array optional | Landscape images (1.91:1) as [{"url": "https://...", "name": "img1"}]. At least landscape OR square images required for multi_asset. |
square_marketing_images | array optional | Square images (1:1) as [{"url": "https://...", "name": "img1"}]. |
portrait_marketing_images | array optional | Portrait images (4:5) as [{"url": "https://...", "name": "img1"}]. Optional. |
existing_images | object optional | Existing image asset resource names to reuse (from discover_existing_assets). Keys: marketing_images_landscape, marketing_images_square, marketing_images_portrait, logos_square. Example: {"marketing_images_landscape": ["customers/123/assets/456"]} |
youtube_video_ids | array optional | YouTube video IDs (each 11 chars) for video_responsive format. 1-5 videos. Must be validated first using validate_video tool. |
logo_asset_id | string optional | Logo image asset ID from discover_existing_assets. |
logo_images | array optional | New logo images as [{"url": "https://...", "name": "logo1"}]. |
asset_bundle_id | string optional | Asset bundle ID (UUID) from validate_and_prepare_assets. |
audience_segments | object optional | Optional: Audience targeting for the campaign. CRITICAL: Only use segment IDs returned by search_audiences tool. NEVER fabricate or guess IDs -- wrong IDs target unrelated audiences and waste budget. If search_audiences returns no results, skip audience_segments entirely. Keys: 'in_market_audience_ids' (List[int] -- people actively researching), 'affinity_audience_ids' (List[int] -- people with long-term interests), 'custom_audience_ids' (List[str] -- custom audience resource names from search_audiences), 'user_list_ids' (List[str] -- remarketing/customer match resource names). Example: {'in_market_audience_ids': [80463, 80520], 'affinity_audience_ids': [92913]} |
customer_id | string optional | Google Ads customer ID. Required for multi-account users. Get from list_connected_accounts. |
{
"arguments": {
"campaign_name": "string",
"budget_daily": 1.0,
"final_url": "https://example.com",
"business_name": "string",
"headlines": [
"string"
],
"descriptions": [
"string"
],
"ad_format": "multi_asset",
"long_headlines": [
"string"
],
"call_to_action": "string",
"target_locations": [
"string"
],
"target_languages": [
"string"
],
"bidding_strategy": "MAXIMIZE_CLICKS"
}
}
{
"success": true,
"data": {
"text": "(tool-specific textual output for create_demandgen_campaign)",
"quota": {
"used": 42,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01"
}
},
"tool": "create_demandgen_campaign"
}
{
"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": "create_demandgen_campaign"
}
{
"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": "create_demandgen_campaign",
"quota": {
"used": 150,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01",
"upgrade_url": "https://adspirer.ai"
}
}
Interactive: Swagger UI
Machine-readable: OpenAPI 3.1 spec ยท llms-full.txt
More tools: Google Ads ยท All tools
Adspirer REST API โ get an API key at adspirer.ai/keys ยท adspirer.ai