RECIPE: Create and Launch a Performance Max Campaign

Download skillThe skill is a reference md and part of wix-manage skill. You can use the following command to add the full wix-manage skill to your project:
Copy

A Performance Max (PMAX) campaign runs across every Google channel from a single asset group — a bundle of headlines, descriptions, images, and (optionally) videos that Google mixes into ads. There are three flavors, set by campaignType:

  • PERFORMANCE_MAX — general multi-channel campaign.
  • PERFORMANCE_MAX_LEADS — lead-gen variant (phone/form conversions, search-theme signals, negative keywords, a ~28-day learning phase). Requires at least one asset group with headlines, descriptions, and images; assets are validated synchronously, so bad assets fail the create call immediately.
  • Retail / Shopping — a PERFORMANCE_MAX campaign linked to a Google Merchant Center feed (set merchantCenterAccountId on the account first — see install-and-create-account — and use feedLabel). Retail campaigns don't require a hand-built asset group.

Base URL: https://www.wixapis.com/google-ads/v1. <AUTH> is the Authorization header; body calls also need Content-Type: application/json. The bidding strategy is server-enforced to MAXIMIZE_CONVERSIONS — never set it yourself.

Launching spends real money. Present the assembled asset group and budget and get explicit approval before the Launch call (STEP 5). Create in PAUSED first — nothing serves until Launch.

Prerequisite: a Google Ads account (ACCOUNT_NOT_FOUND → run install-and-create-account). You need account.id as campaign.accountId.

Flow: STEP 1 text assets → STEP 2 image assets → STEP 3 (leads) search themes → STEP 4 budget recommendation → assemble & create PAUSED → show & approve → STEP 5 launch.


STEP 1: Generate text assets (headlines & descriptions)

suggestionInfo.landingPageUrl and textSuggestionInfo.languageCode are both required. Response may take up to 60s.

Copy
Copy

STEP 2: Generate image assets

Images are generated with AI and automatically uploaded to the site's Wix Media Manager — the returned url is a static.wixstatic.com link you can use directly in the asset group. suggestionInfo.landingPageUrl is required.

Copy
Copy

STEP 3 (PMAX Leads only): Generate search themes

Search themes are the targeting signals for a leads campaign's asset group. textSuggestionInfo.languageCode is required.

Copy
Copy

Each string becomes a { "searchTheme": { "text": "…" } } signal in the asset group (max 25).

STEP 4: Get a budget recommendation

PMAX uses Generate Budget Recommendation (not the Smart-campaign budget-suggestions endpoint). campaignType, assetGroupInfo (with a finalUrl), and currency are required.

Copy
Copy

Use recommendedBudgetAmountMicros as budget.amountMicros, or present the budgetOptions with their projected impact and let the user pick. budgetRecommendation is absent when Google has too little data — fall back to a manual budget within GET /v1/campaign/daily-budget-boundaries.


Assemble & create the campaign (in PAUSED)

An asset group lives at performanceMaxCampaign.assetGroups[]. Its creative assets go under assetGroupAssets.assets[] — each asset sets exactly one payload field plus its assetFieldType. For a PMAX Leads asset group, meet Google's minimums or the create call fails with NOT_ENOUGH_ASSETS:

AssetPayload fieldassetFieldTypeCountMax chars
Short headlineheadlineAsset.textHEADLINE3–1530
Long headlinelongHeadlineAsset.textLONG_HEADLINEexactly 190
DescriptiondescriptionAsset.textDESCRIPTION2–490
Business namebusinessNameAsset.textBUSINESS_NAMEexactly 125
Landscape image (1.91
)
imageAsset.{name,url}MARKETING_IMAGE≥1
Square image (1
)
imageAsset.{name,url}SQUARE_MARKETING_IMAGE≥1
Logo (1
)
imageAsset.{name,url}LOGO≥1
CTA buttoncallToActionSelectionAsset.callToActionCALL_TO_ACTION_SELECTIONoptionalLEARN_MORE | SHOP_NOW | SIGN_UP | CONTACT_US
YouTube videoyoutubeVideoAsset.{title,id}YOUTUBE_VIDEOoptional (1–5)11-char video id

Image url must be a Wix Media Manager URL (static.wixstatic.com) — the STEP 2 generated images already are; for other images, upload via the Media Manager first (see Upload Media to Wix). Search themes go under assetGroupSignals.signals[] (PMAX Leads).

Create a PMAX Leads campaign (status required; create PAUSED):

Copy

For a general PERFORMANCE_MAX campaign, use campaignType: "PERFORMANCE_MAX" (the assetGroupSignals are Leads-only). For retail/Shopping, link a Merchant Center account on the account first and set performanceMaxCampaign.feedLabel; a retail campaign can serve from the product feed without a hand-built asset group.

Save the returned campaign.id and resourceName. status is read-only and syncs from Google — a PMAX Leads campaign shows LEARNING for ~28 days after launch.

Now show the user the asset group (headlines, descriptions, images) and the daily budget, and get explicit approval.


STEP 5: Launch the campaign

Copy

Returns the campaign with an updated status. Ads begin serving across Google channels; see Query Campaign Performance Analytics — PMAX Leads supports per-asset metrics.


Error handling

SymptomCauseFix
ACCOUNT_NOT_FOUNDNo Google Ads accountRun install-and-create-account
INVALID_ARGUMENT / NOT_ENOUGH_ASSETSAsset group below minimumsAdd assets to meet the per-type counts in the table
INVALID_ARGUMENT / INVALID_ASSET_GROUP_ASSETSAn asset is malformed or violates Google requirementsFix the offending asset (length, type, url)
INVALID_ARGUMENT / INVALID_IMAGE_FORMATImage format/dimensions unsupportedUse a supported ratio/size; regenerate via image-asset-suggestions
INVALID_ARGUMENT / DUPLICATE_IMAGE_ASSETS / DUPLICATE_ASSETSame asset provided twiceDeduplicate the asset group
INVALID_ARGUMENT / SEARCH_THEME_POLICY_VIOLATION / POLICY_VIOLATIONA signal/asset violates Google policyRemove or rewrite the flagged item
INVALID_ARGUMENT / RESTRICTED_LOCATIONTargeted geo is restrictedRemove it; pick a specific allowed place
INVALID_ARGUMENT / CAMPAIGN_DAILY_BUDGET_TOO_HIGHBudget over the account maxLower it within daily-budget-boundaries
FAILED_PRECONDITION / MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED5 live campaigns alreadyPause one before launching
INVALID_ARGUMENT / GOOGLE_ADS_API_ERRORUnexpected Google Ads rejectionSurface the message; verify and retry

References

Last updated: 29 July 2026

Did this help?