Create Google Ads Performance Max campaign (adsap_google_create_pmax_campaign)
Platform: Google Ads · Read or write: Write · Plan: Early Access · Consumes a task: Yes · Preview supported: Yes
What it does
Creates a full Performance Max campaign in one request: budget, campaign, location and language targeting, and one asset group with text plus images you uploaded earlier. The campaign is always created paused. Ask for a preview first: Google validates the whole plan without creating anything.
When to use it
- Use it to launch a new Performance Max campaign with one asset group. Set
retailtotrueto attach the account’s active Merchant Center link. - The images must exist as Google assets first. Upload them with
adsap_google_upload_asset, or reuse IDs listed byadsap_google_list_creative_assets. - At least one description must be 60 characters or fewer. If none is, the tool rejects the call before it reaches Google.
- Only two bidding strategies exist here.
target_cpaneedsmaximize_conversions, andtarget_roasneedsmaximize_conversion_value. - It supports a preview call. With
dry_runset totrue, Google validates the plan, nothing is created, and no task is used.
Worked example
You ask
“Preview a Performance Max campaign in account 1234567890 for the summer collection. 100 a day, France, using the logo and two images I uploaded yesterday.”
The assistant calls adsap_google_create_pmax_campaign
{
"ad_account_id": "1234567890",
"campaign": { "name": "Summer collection, PMax", "daily_budget": 100 },
"geo": {
"location_ids": ["2250"]
},
"asset_group": {
"name": "Summer collection",
"final_url": "https://www.example.com/summer",
"business_name": "Example Store",
"headlines": [
"Summer Collection Is Here",
"New Styles for Warm Days",
"Free Returns for 30 Days"
],
"long_headlines": ["Discover the summer collection: light fabrics and new colours"],
"descriptions": [
"New styles for warm days. Free returns.",
"Shop the full summer collection online with free delivery in France."
],
"logo_asset_ids": ["30000000001"],
"landscape_image_asset_ids": ["30000000002"],
"square_image_asset_ids": ["30000000003"]
},
"dry_run": true
}Adsap returns
The field names are the ones Adsap returns. The values are examples.
{
"ok": true,
"dry_run": true,
"platform": "google",
"action": "create_pmax_campaign",
"plan": {
"campaign": {
"name": "Summer collection, PMax",
"status_at_create": "PAUSED",
"daily_budget": 100,
"bidding_strategy": "maximize_conversions",
"target_cpa": null,
"target_roas": null,
"retail": false,
"merchant_id": null,
"brand_guidelines_enabled": false,
"final_url_expansion": true
},
"geo": {
"location_ids": ["2250"],
"negative_location_ids": []
},
"language_ids": ["1000"],
"asset_group": {
"name": "Summer collection",
"final_url": "https://www.example.com/summer",
"business_name": "Example Store",
"headlines": 3,
"long_headlines": 1,
"descriptions": 2,
"logos": 1,
"landscape_images": 1,
"square_images": 1,
"portrait_images": 0,
"youtube_videos": 0,
"call_to_action": null
},
"signals": { "search_themes": 0, "audiences": 0 },
"operations_count": 22,
"conversion_actions_found": 4
},
"bidding_strategy": "maximize_conversions",
"google_validation": "passed",
"warnings": [
"Found 4 enabled conversion action(s) - defaulting to Maximize Conversions.",
"No video supplied - Google may auto-generate video ads from your other assets (opt-out is only available in the Google Ads UI under Campaign settings > Asset optimization)."
]
}How to read it
plan is what Adsap would send to Google. status_at_create is PAUSED, so nothing spends yet. language_ids shows the English default, because the call sent no languages. The counts under asset_group confirm the text and images that would be linked. operations_count is high because each text and each asset link is its own step in the single request.
warnings never block the call. Here they explain the bidding choice and that Google may build a video from the other assets. google_validation is passed when Google accepts the plan. Otherwise it holds Google’s error message. To create the campaign, the assistant repeats the call without dry_run and gets a campaign_id and an asset_group_id back.
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 (e.g. 12.50): NOT micros, NOT cents. |
campaign.bidding_strategy | one of auto, maximize_conversions, maximize_conversion_value | No | Performance Max supports ONLY these two strategies. ‘auto’ (default) picks maximize_conversions and warns if the account has no conversion tracking. |
campaign.target_cpa | number | No | Optional target cost-per-action in the account currency. Requires bidding_strategy maximize_conversions. |
campaign.target_roas | number | No | Optional target return on ad spend as a multiplier (3.5 = 350%). Requires bidding_strategy maximize_conversion_value. |
campaign.final_url_expansion | boolean | No | Google’s default lets PMax send traffic to more relevant pages on your domain. Set false to opt out (traffic only to the asset group’s final_url). |
campaign.asset_automation | object | No | Optional per-type opt-in/out of Google’s asset automations at create (e.g. {GENERATE_IMAGE_ENHANCEMENT: ‘OPTED_OUT’} stops Google AI enhancing images). PMax accepts all five types. Absent = Google defaults. |
geo | object | Yes | |
geo.location_ids | array of string | Yes | Geo target constant ids to TARGET (from adsap_google_search_geo_targets). |
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). |
asset_group | object | Yes | |
asset_group.name | string | Yes | |
asset_group.final_url | string | Yes | |
asset_group.path1 | string | No | Display-URL path segment (<=15 chars). |
asset_group.path2 | string | No | Second path segment (<=15 chars, requires path1). |
asset_group.business_name | string | Yes | Your business name as shown in ads (<=25 characters). |
asset_group.headlines | array of string | Yes | 3-15 unique headlines, each <=30 characters. |
asset_group.long_headlines | array of string | Yes | 1-5 unique long headlines, each <=90 characters. |
asset_group.descriptions | array of string | Yes | 2-5 unique descriptions, each <=90 characters: AT LEAST ONE must be <=60 characters. |
asset_group.logo_asset_ids | array of string | Yes | 1-5 LOGO-eligible image asset ids from adsap_google_upload_asset (1:1, min 128x128). |
asset_group.landscape_image_asset_ids | array | Yes | 1-20 MARKETING_IMAGE-eligible asset ids (1.91:1, min 600x314). |
asset_group.square_image_asset_ids | array | Yes | 1-20 SQUARE_MARKETING_IMAGE-eligible asset ids (1:1, min 300x300). |
asset_group.portrait_image_asset_ids | array | No | Optional PORTRAIT (4:5, min 480x600) asset ids. |
asset_group.youtube_video_ids | array of string | No | Optional YouTube video ids (created as assets inline). Without a video Google may auto-generate one from your other assets. |
asset_group.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 button; Google automates it when unset. |
signals | object | No | |
signals.search_themes | array of string | No | Up to 50 keyword-like search themes steering PMax (hints, not targeting). |
signals.audience_ids | array of string | No | Optional Audience resource ids used as signals. |
retail | boolean | No | true = retail PMax: reads the account’s ACTIVE Merchant Center link and attaches shopping_setting.merchant_id (fails with a clear error if no active link). |
dry_run | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |
Example prompts
- “Preview a Performance Max campaign for my store at 100 dollars a day targeting the US, using the images I uploaded yesterday.”
- “Create a retail Performance Max campaign linked to my Merchant Center with these headlines and descriptions.”
- “Create the Performance Max campaign we just previewed.”
Notes
The asset group needs 3 to 15 headlines, 1 to 5 long headlines, 2 to 5 descriptions and a business name. It also needs at least one logo, one landscape image and one square image. Retail mode needs an active Merchant Center link.
Related 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_demand_gen_campaign: Create a complete Google Ads Demand Gen campaign (YouTube, Discover, Gmail, Maps and the Google Display Network) in ONE atomic request…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_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: Create a complete standard Google Shopping campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with…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 Performance Max campaigns for the workflow around this tool, and the Tool reference for every tool.
The Google Ads MCP server page shows how to connect Google Ads to Claude, ChatGPT or Perplexity.