Performance Max Required Components

To generate a new Performance Max campaign from scratch, you must at a minimum create the following:

The campaign and budget are useful for creating all sorts of campaign types, while the asset-related operations will be specifically useful for creating Performance Max campaigns.

Make sure you're familiar with the mutate strategy, as this guide will only provide the JavaScript objects to be used in the mutates.

Budget

The budget must not be shared, and must have a unique name in your account. Use a CampaignBudgetOperation.

const budgetOperation = {
  "campaignBudgetOperation": {
    "create": {
      "resourceName": `customers/${customerId}/campaignBudgets/${getNextTempId()}`,
      "name": "Performance Max campaign budget",
      "amountMicros": "50000000",
      "deliveryMethod": "STANDARD",
      "explicitlyShared": false
    }
  }
}
operations.push(budgetOperation);

Campaign

The campaign must reference the previously created budget, so in addition to specifying its own resource name with a temp ID, you will need the exact resource name you set in the previous step in order to create the campaign, so that you can uniquely identify the budget previously created in this request. Use a CampaignOperation.

const campaignOperation = {
  "campaignOperation": {
    "create": {
      "resourceName": `customers/${customerId}/campaigns/${getNextTempId()}`,
      "name": "Performance Max campaign",
      "status": "PAUSED",
      "advertisingChannelType": "PERFORMANCE_MAX",
      "campaignBudget": budgetOperation.campaignBudgetOperation.create.resourceName,
      "biddingStrategyType": "MAXIMIZE_CONVERSION_VALUE",
      "startDate": "20240314",
      "endDate": "20250313",
      "urlExpansionOptOut": false,
      "maximizeConversionValue": {
        "targetRoas": 3.5
      }
    }
  }
}
operations.push(campaignOperation);

Asset group

The asset group for this campaign requires a reference to the campaign, and will need to be referenced later when you link assets to it. Use an AssetGroupOperation.

const assetGroupOperation = {
  "assetGroupOperation": {
    "create": {
      "resourceName": `customers/${customerId}/assetGroups/${getNextTempId()}`,
      "campaign": campaignOperation.campaignOperation.create.resourceName,
      "name": "Performance Max asset group",
      "finalUrls": [
        "http://www.example.com"
      ],
      "finalMobileUrls": [
        "http://www.example.com"
      ],
      "status": "PAUSED"
    }
  }
}
operations.push(assetGroupOperation);

Now that you have our asset groups and our assets (from the previous step), you need to link them together so that the Performance Max campaign knows which assets you want to use. You must do this in the same request where you create the asset group initially. To do this, use an AssetGroupAssetOperation.

You will need to provide the correct asset resource name, as well as modifying the fieldType to the appropriate value for the asset you're linking. Check out the complete list of valid field types.

You will need multiple of these operations to meet the minimum requirements for a Performance Max campaign.

operations.push({
  "assetGroupAssetOperation": {
    "create": {
      "assetGroup": assetGroupOperation.assetGroupOperation.create.resourceName,
      // assetResourceName here is a placeholder; you will need to determine
      // the correct resource name to use depending on which asset you want
      // to add to the asset group.
      "asset": assetResourceName,
      "fieldType": "HEADLINE"
    }
  }
});