# Add ad group to Google campaign (adsap_google_create_ad_group)

Adds an ad group to an existing Search, Display or Demand Gen campaign, with optional keywords (Search only) and one optional ad.

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

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

## What it does

Adds an ad group to an existing Search, Display or Demand Gen campaign, with optional keywords (Search only) and one optional ad. It can also add one responsive search ad to an ad group that already exists. If the parent campaign is active, the new ad group starts paused unless you say otherwise. 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_id` | string | Yes | Numeric id of the EXISTING campaign to add the ad group to (from adsap_google_list_campaigns). |
| `channel` | one of `search`, `display`, `demand_gen` | Yes | Must match the campaign's advertising channel type. The workflow verifies and rejects mismatches. |
| `ad_group_id` | string | No | EXISTING-GROUP MODE: numeric id of an EXISTING ad group (from the campaign's ad group list)... Mutually exclusive with ad_group. |
| `ad_group` | object | No | CREATE MODE: the new ad group to create. Mutually exclusive with ad_group_id: exactly one of the two is required. |
| `ad_group.name` | string | Yes | Ad group name (Google requires uniqueness within the campaign). |
| `ad_group.status` | one of `ENABLED`, `PAUSED` | No | Omit for the safe default: PAUSED when the parent campaign is ACTIVE, ENABLED when it is PAUSED. |
| `ad_group.keywords` | array of object | No | SEARCH ONLY. Optional, but a Search ad group without keywords gets no traffic. |
| `ad_group.optimized_targeting` | boolean | No | DISPLAY / DEMAND_GEN only (default true). |
| `ad_group.channels` | object | No | DEMAND_GEN only: channel controls: strategy OR selected, not both. Defaults to ALL_CHANNELS. |
| `ad_group.geo` | object | No | DEMAND_GEN only (REQUIRED there): Demand Gen targets geo at the AD GROUP level. Invalid for search/display: their geo lives on the campaign. |
| `ad_group.language_ids` | array of string | No | DEMAND_GEN only. Language constant ids (default 1000 = English). |
| `ad` | object | No | Optional: omit to create the ad group without an ad (it will not serve until one is added). |
| `ad.final_url` | string | Yes | Landing page URL. Required whenever an ad is included. |
| `ad.status` | one of `ENABLED`, `PAUSED` | No | EXISTING-GROUP MODE ONLY (ad_group_id): the new ad's own status: defaults to PAUSED so it never serves unreviewed. In create mode the ad is ENABLED inside the group whose status you control. |
| `ad.headlines` | any | No | SEARCH: 3-15 of \{ text (max 30), pinned_field? HEADLINE_1..3 \}. DISPLAY/DG multi_asset: 1-5 plain strings max 30. |
| `ad.descriptions` | any | No | SEARCH: 2-4 of \{ text (max 90), pinned_field? DESCRIPTION_1..2 \}. DISPLAY/DG: 1-5 plain strings max 90. |
| `ad.path1` | string | No | SEARCH only: display path segment 1. |
| `ad.path2` | string | No | SEARCH only: display path segment 2 (requires path1). |
| `ad.business_name` | string | No | DISPLAY / DEMAND_GEN: required. |
| `ad.long_headline` | string | No | DISPLAY only: exactly one, required. |
| `ad.landscape_image_asset_ids` | array of string | No | Image ASSET ids (1.91:1). DISPLAY: &gt;=1 required. |
| `ad.square_image_asset_ids` | array of string | No | Image ASSET ids (1:1). DISPLAY: &gt;=1 required. |
| `ad.logo_asset_ids` | array of string | No | Square logo ASSET ids. DG: 1-5 required; DISPLAY: optional. |
| `ad.landscape_logo_asset_ids` | array of string | No | DISPLAY only: landscape (4:1) logos. |
| `ad.youtube_video_asset_ids` | array of string | No | DISPLAY only: up to 5 YouTube video ASSET ids. |
| `ad.call_to_action_text` | string | No | DISPLAY only: free-text CTA. |
| `ad.ad_type` | one of `multi_asset`, `video_responsive` | No | DEMAND_GEN: required: 'multi_asset' image ad or 'video_responsive' YouTube ad. |
| `ad.name` | string | No | DEMAND_GEN: ad name (defaulted if omitted). |
| `ad.call_to_action` | string | No | DEMAND_GEN: CTA enum like LEARN_MORE, SHOP_NOW. |
| `ad.long_headlines` | array of string | No | DG video_responsive: 1-5 long headlines max 90. |
| `ad.portrait_image_asset_ids` | array of string | No | DG multi_asset: portrait (4:5) images. |
| `ad.tall_portrait_image_asset_ids` | array of string | No | DG multi_asset: tall portrait (9:16) images. |
| `ad.youtube_video_ids` | array of string | No | DG video_responsive: 1-5 YouTube VIDEO ids (not asset ids). |
| `dry_run` | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |

## Example prompts

- "Add an ad group called Winter Boots to my Search campaign with these keywords and a new responsive search ad."
- "Add a second responsive search ad to the Trail Shoes ad group in campaign 1234567890."
- "Preview a new Demand Gen ad group targeting Germany with this image ad."

## Notes

Performance Max, App and Shopping campaigns are not supported. An ad group created without an ad does not serve until an ad is added.

## Related tools

- `adsap_google_list_extensions`: List the extensions (sitelinks, callouts, structured snippets, call, promotion, price, image/AD_IMAGE) linked to Google Ads campaigns AND...
- `adsap_google_list_feed_labels`: List the distinct Merchant Center feed labels visible to a Google Ads account (from the products synced via its Merchant Center link).
- [`adsap_google_manage_extension`](/tools/adsap_google_manage_extension): Manage Google Ads extensions (sitelinks, callouts, structured snippets, call, promotion, price) at CAMPAIGN level (default) or ACCOUNT...

## Guide

Read [Managing Google Ads in bulk](/guides/google-ads/bulk-manage) for the workflow around this tool, and the [Tool reference](/tools) for every tool.
