Required components of Performance Max

  • Creating a new Performance Max campaign requires the creation of a campaign, budget, account-level assets, an asset group, and links between assets and the asset group.

  • A non-shared budget with a unique name in your account is required and created using a CampaignBudgetOperation.

  • The campaign must reference the created budget and is created using a CampaignOperation.

  • An asset group for the campaign needs a reference to the campaign and is created using an AssetGroupOperation.

  • Asset group links connect assets and asset groups and are created using an AssetGroupAssetOperation, requiring the correct asset resource name and field type.

To generate a new Performance Max campaign from scratch, you must at the 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 your asset groups and 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"
    }
  }
});