A Performance Max (PMAX) campaign runs across every Google channel from a single asset group — a bundle of headlines, descriptions, and images 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.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/_serverless/pa-google/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.
suggestionInfo.landingPageUrl and textSuggestionInfo.languageCode are both required. Response may take up to 60s.
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.
Search themes are the targeting signals for a leads campaign's asset group. textSuggestionInfo.languageCode is required.
Each string becomes a { "searchTheme": { "text": "…" } } signal in the asset group (max 25).
PMAX uses Generate Budget Recommendation (not the Smart-campaign budget-suggestions endpoint). campaignType, assetGroupInfo (with a finalUrl), and currency are required.
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.
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, keep each asset type within its count below, or the create call fails with INVALID_ASSET_GROUP_ASSETS:
| Asset | Payload field | assetFieldType | Count | Max chars |
|---|---|---|---|---|
| Short headline | headlineAsset.text | HEADLINE | 3–15 | 30 |
| Long headline | longHeadlineAsset.text | LONG_HEADLINE | 1–5 | 90 |
| Description | descriptionAsset.text | DESCRIPTION | 2–5 | 90 |
| Business name | businessNameAsset.text | BUSINESS_NAME | exactly 1 | 25 |
| Landscape image (1.91) | imageAsset.{name,url} | MARKETING_IMAGE | 1–20 | — |
| Square image (1) | imageAsset.{name,url} | SQUARE_MARKETING_IMAGE | 1–20 | — |
| Logo (1) | imageAsset.{name,url} | LOGO | 1–5 | — |
Call-to-action, YouTube video, and media bundle assets are not supported — leave them out of the asset group.
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):
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.
Returns the campaign with an updated status. Ads begin serving across Google channels; see Query Campaign Performance Analytics — PMAX Leads supports per-asset metrics.
| Symptom | Cause | Fix |
|---|---|---|
ACCOUNT_NOT_FOUND | No Google Ads account | Run install-and-create-account |
INVALID_ARGUMENT / NOT_ENOUGH_ASSETS | Asset group below minimums | Add assets to meet the per-type counts in the table |
INVALID_ARGUMENT / INVALID_ASSET_GROUP_ASSETS | An asset type's count is outside its range in the table, an asset type is unsupported, or an asset is malformed | Fix the count or the offending asset (length, type, url) |
INVALID_ARGUMENT / INVALID_IMAGE_FORMAT | Image format/dimensions unsupported | Use a supported ratio/size; regenerate via image-asset-suggestions |
INVALID_ARGUMENT / DUPLICATE_IMAGE_ASSETS / DUPLICATE_ASSET | Same asset provided twice | Deduplicate the asset group |
INVALID_ARGUMENT / SEARCH_THEME_POLICY_VIOLATION / POLICY_VIOLATION | A signal/asset violates Google policy | Remove or rewrite the flagged item |
INVALID_ARGUMENT / RESTRICTED_LOCATION | Targeted geo is restricted | Remove it; pick a specific allowed place |
INVALID_ARGUMENT / CAMPAIGN_DAILY_BUDGET_TOO_HIGH | Budget over the account max | Lower it within daily-budget-boundaries |
FAILED_PRECONDITION / MAXIMUM_NUMBER_OF_CAMPAIGNS_REACHED | 5 live campaigns already | Pause one before launching |
INVALID_ARGUMENT / GOOGLE_ADS_API_ERROR | Unexpected Google Ads rejection | Surface the message; verify and retry |
Last updated: 26 October 2026