# Create Google Ads Demand Gen campaign (adsap_google_create_demand_gen_campaign)

Creates a full Demand Gen campaign in one request: budget, campaign, an ad group with channel controls, ad group level location and language targeting, and one ad.

Canonical: https://adsap.ai/docs/tools/adsap_google_create_demand_gen_campaign
Updated: 2026-09-13

**Platform:** Google Ads · **Read or write:** Write · **Plan:** Early Access · **Consumes a task:** Yes · **Preview supported:** Yes

## What it does

Creates a full Demand Gen campaign in one request: budget, campaign, an ad group with channel controls, ad group level location and language targeting, and one ad. The ad is either an image ad or a YouTube video ad. The campaign is always created paused. Ask for a preview first.

## Parameters

Descriptions are shortened from the tool schema. Your assistant sees the full text.

| Name | Type | Required | Description |
|---|---|---|---|
| `ad_account_id` | string | Yes | Bare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix. |
| `campaign` | object | Yes |  |
| `campaign.name` | string | Yes |  |
| `campaign.daily_budget` | number | Yes | Daily budget in the ACCOUNT CURRENCY as a plain number: minimum 5 (Google's Demand Gen floor, local-currency equivalent of 5 USD). NOT micros, NOT cents. |
| `campaign.bidding_strategy` | one of `auto`, `maximize_clicks`, `maximize_conversions`, `target_roas` | No | The documented Demand Gen set. 'auto' (default) picks maximize_conversions when enabled conversion actions exist, else maximize_clicks. |
| `campaign.target_cpa` | number | No | Optional target cost-per-action in the account currency. Requires bidding_strategy maximize_conversions. |
| `campaign.target_roas` | number | No | Target return on ad spend as a multiplier (3.5 = 350%). REQUIRED with bidding_strategy target_roas; Google rejects accounts without enough conversion history. |
| `geo` | object | Yes |  |
| `geo.location_ids` | array of string | Yes | Geo target constant ids to TARGET (from adsap_google_search_geo_targets). Demand Gen applies these at the AD GROUP level. |
| `geo.negative_location_ids` | array of string | No | Geo target constant ids to EXCLUDE. |
| `language_ids` | array of string | No | Language constant ids (default ['1000'] = English). |
| `ad_group` | object | No |  |
| `ad_group.name` | string | No | Ad group name (defaults to '&lt;campaign name&gt; - ad group'). |
| `ad_group.channels` | object | No |  |
| `ad_group.optimized_targeting` | boolean | No | Google AI expands beyond your (optional) audience signals. Leave true unless the user asks otherwise. |
| `ad` | object | Yes |  |
| `ad.ad_type` | one of `multi_asset`, `video_responsive` | Yes | 'multi_asset' = image ad; 'video_responsive' = YouTube video ad. |
| `ad.name` | string | No | Ad name (defaults to '&lt;campaign name&gt; - ad'; Google REQUIRES a name on video ads). |
| `ad.final_url` | string | Yes |  |
| `ad.business_name` | string | Yes | Your business name as shown in ads (&lt;=25 characters). |
| `ad.headlines` | array of string | Yes | 1-5 unique headlines. Max 30 chars each for multi_asset, 40 for video_responsive. |
| `ad.long_headlines` | array of string | No | Long headlines (&lt;=90 chars). REQUIRED (1-5) for video_responsive; not used by multi_asset. |
| `ad.descriptions` | array of string | Yes | 1-5 unique descriptions, each &lt;=90 characters. |
| `ad.logo_asset_ids` | array of string | Yes | 1-5 LOGO-eligible image asset ids from adsap_google_upload_asset (1:1, min 128x128). |
| `ad.landscape_image_asset_ids` | array | No | multi_asset: MARKETING_IMAGE asset ids (1.91:1, min 600x314). At least one landscape OR square image required. |
| `ad.square_image_asset_ids` | array | No | multi_asset: SQUARE_MARKETING_IMAGE asset ids (1:1, min 300x300). |
| `ad.portrait_image_asset_ids` | array | No | multi_asset optional: PORTRAIT (4:5, min 480x600) asset ids. |
| `ad.tall_portrait_image_asset_ids` | array | No | multi_asset optional: TALL_PORTRAIT (9:16, min 600x1067) asset ids: the vertical-feed slot Demand Gen adds over PMax. |
| `ad.youtube_video_ids` | array of string | No | video_responsive: 1-5 YouTube video ids (REQUIRED for that type; created/reused as named assets). Not allowed on multi_asset. |
| `ad.call_to_action` | one of `LEARN_MORE`, `GET_QUOTE`, `APPLY_NOW`, `SIGN_UP`, `CONTACT_US`, `SUBSCRIBE`, `DOWNLOAD`, `BOOK_NOW` and 9 more | No | Optional CTA; Google automates it when unset. |
| `dry_run` | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |

## Example prompts

- "Preview a Demand Gen campaign at 20 dollars a day targeting the UK, YouTube and Discover only, with these images."
- "Create a Demand Gen video campaign using my YouTube video and these five headlines."
- "Create the Demand Gen campaign we just previewed."

## Notes

The daily budget floor is 5 in the account currency. Target ROAS needs conversion history or Google rejects it. Set display to true in the channel selection to reach the Google Display Network.

## Related tools

- [`adsap_google_create_app_campaign`](/tools/adsap_google_create_app_campaign): Create a complete Google App campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with...
- [`adsap_google_create_display_campaign`](/tools/adsap_google_create_display_campaign): Create a classic standalone Google Display campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with...
- [`adsap_google_create_pmax_campaign`](/tools/adsap_google_create_pmax_campaign): Create a complete Google Ads Performance Max campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with...
- [`adsap_google_create_search_campaign`](/tools/adsap_google_create_search_campaign): Create a complete Google Ads Search campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with...
- [`adsap_google_create_shopping_campaign`](/tools/adsap_google_create_shopping_campaign): Create a complete standard Google Shopping campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with...
- [`adsap_google_list_campaigns`](/tools/adsap_google_list_campaigns): List Google Ads campaigns in a Google Ads account (cache-first; auto-refreshes from Google when the cache is missing or older than 1 hour).

## Guide

Read [Demand Gen campaigns](/guides/google-ads/demand-gen) for the workflow around this tool, and the [Tool reference](/tools) for every tool.
