Skip to Content
Tool referenceCreate Google Ads Performance Max campaign

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 retail to true to 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 by adsap_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_cpa needs maximize_conversions, and target_roas needs maximize_conversion_value.
  • It supports a preview call. With dry_run set to true, 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.

NameTypeRequiredDescription
ad_account_idstringYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
campaignobjectYes
campaign.namestringYes
campaign.daily_budgetnumberYesDaily budget in the ACCOUNT CURRENCY as a plain number (e.g. 12.50): NOT micros, NOT cents.
campaign.bidding_strategyone of auto, maximize_conversions, maximize_conversion_valueNoPerformance Max supports ONLY these two strategies. ‘auto’ (default) picks maximize_conversions and warns if the account has no conversion tracking.
campaign.target_cpanumberNoOptional target cost-per-action in the account currency. Requires bidding_strategy maximize_conversions.
campaign.target_roasnumberNoOptional target return on ad spend as a multiplier (3.5 = 350%). Requires bidding_strategy maximize_conversion_value.
campaign.final_url_expansionbooleanNoGoogle’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_automationobjectNoOptional 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.
geoobjectYes
geo.location_idsarray of stringYesGeo target constant ids to TARGET (from adsap_google_search_geo_targets).
geo.negative_location_idsarray of stringNoGeo target constant ids to EXCLUDE.
language_idsarray of stringNoLanguage constant ids (default [‘1000’] = English).
asset_groupobjectYes
asset_group.namestringYes
asset_group.final_urlstringYes
asset_group.path1stringNoDisplay-URL path segment (<=15 chars).
asset_group.path2stringNoSecond path segment (<=15 chars, requires path1).
asset_group.business_namestringYesYour business name as shown in ads (<=25 characters).
asset_group.headlinesarray of stringYes3-15 unique headlines, each <=30 characters.
asset_group.long_headlinesarray of stringYes1-5 unique long headlines, each <=90 characters.
asset_group.descriptionsarray of stringYes2-5 unique descriptions, each <=90 characters: AT LEAST ONE must be <=60 characters.
asset_group.logo_asset_idsarray of stringYes1-5 LOGO-eligible image asset ids from adsap_google_upload_asset (1:1, min 128x128).
asset_group.landscape_image_asset_idsarrayYes1-20 MARKETING_IMAGE-eligible asset ids (1.91:1, min 600x314).
asset_group.square_image_asset_idsarrayYes1-20 SQUARE_MARKETING_IMAGE-eligible asset ids (1:1, min 300x300).
asset_group.portrait_image_asset_idsarrayNoOptional PORTRAIT (4:5, min 480x600) asset ids.
asset_group.youtube_video_idsarray of stringNoOptional YouTube video ids (created as assets inline). Without a video Google may auto-generate one from your other assets.
asset_group.call_to_actionone of LEARN_MORE, GET_QUOTE, APPLY_NOW, SIGN_UP, CONTACT_US, SUBSCRIBE, DOWNLOAD, BOOK_NOW and 9 moreNoOptional CTA button; Google automates it when unset.
signalsobjectNo
signals.search_themesarray of stringNoUp to 50 keyword-like search themes steering PMax (hints, not targeting).
signals.audience_idsarray of stringNoOptional Audience resource ids used as signals.
retailbooleanNotrue = 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_runbooleanNoPreview 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.

  • 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.

Last updated on