Get started with Performance Max

  • This guide explains how to build Performance Max campaigns in the Google Ads API for online sales or lead generation.

  • Performance Max campaigns provide access to all Google Ads channels and inventory from a single campaign and require conversion tracking.

  • Valid, serving campaigns require specific resources including CampaignBudget, Campaign, CampaignAssets (if brand guidelines enabled), AssetGroups, and AssetGroupAssets, with some resources needing to be created together in a single bulk mutate request.

  • Assets are the building blocks of your Performance Max ads, grouped in AssetGroups based on theme or target audience, and linked using AssetGroupAsset.

  • Optional features like custom conversion goals, campaign targeting, AssetGroupSignals (Audience and Search theme), and ValueTrack parameters can be used to enhance campaign performance, which can also be optimized with recommendations.

This guide provides a checklist of concepts and tasks for each of the three Performance Max business goals to help you build your campaign. To get started, select a business goal:

Performance Max for online sales or lead generation (standard)

Performance Max allows advertisers to access all Google Ads channels and inventory from a single, unified campaign. The steps to create a standard Performance Max campaign are as follows. Click the links in each section for more information.

Performance Max concepts

One of the most common goals among advertisers is to encourage customers to pursue a specific action to achieve a goals such as generating sales or leads. In the Google Ads API, Performance Max campaigns for online sales or lead generation are often referred to as standard Performance Max campaigns.

When creating a Performance Max campaign, you can use a bulk mutate request to create the resources required to form a valid, serving campaign in a single request. Not all resources must be created in a single bulk mutate request. The following resources are required to create a valid, serving Performance Max campaign. Learn more in the Structure requests guide.

  • CampaignBudget
  • Campaign
  • CampaignAssets (for campaigns with brand guidelines enabled only)
  • AssetGroups
  • AssetGroupAssets


Campaign and campaign budget

Code example

Java

/** Creates a MutateOperation that creates a new CampaignBudget. */
private MutateOperation createCampaignBudgetOperation(long customerId) {
  CampaignBudget campaignBudget =
      CampaignBudget.newBuilder()
          .setName("Performance Max campaign budget #" + getPrintableDateTime())
          // The budget period already defaults to DAILY.
          .setAmountMicros(50_000_000)
          .setDeliveryMethod(BudgetDeliveryMethod.STANDARD)
          // A Performance Max campaign cannot use a shared campaign budget.
          .setExplicitlyShared(false)
          // Set a temporary ID in the budget's resource name, so it can be referenced
          // by the campaign in later steps.
          .setResourceName(ResourceNames.campaignBudget(customerId, BUDGET_TEMPORARY_ID))
          .build();

  return MutateOperation.newBuilder()
      .setCampaignBudgetOperation(
          CampaignBudgetOperation.newBuilder().setCreate(campaignBudget).build())
      .build();
}

      

C#

/// <summary>
/// Creates a MutateOperation that creates a new CampaignBudget.
///
/// A temporary ID will be assigned to this campaign budget so that it can be
/// referenced by other objects being created in the same Mutate request.
/// </summary>
/// <param name="budgetResourceName">The temporary resource name of the budget to
/// create.</param>
/// <returns>A MutateOperation that creates a CampaignBudget.</returns>
private MutateOperation CreateCampaignBudgetOperation(string budgetResourceName)
{
    MutateOperation operation = new MutateOperation
    {
        CampaignBudgetOperation = new CampaignBudgetOperation
        {
            Create = new CampaignBudget
            {
                Name = "Performance Max campaign budget #"
                  + ExampleUtilities.GetRandomString(),

                // The budget period already defaults to DAILY.
                AmountMicros = 50000000,

                // A Performance Max campaign cannot use a shared campaign budget.
                ExplicitlyShared = false,

                // Set a temporary ID in the budget's resource name so it can be referenced
                // by the campaign in later steps.
                ResourceName = budgetResourceName
            }
        }
    };

    return operation;
}

      

PHP

private static function createCampaignBudgetOperation(int $customerId): MutateOperation
{
    // Creates a mutate operation that creates a campaign budget operation.
    return new MutateOperation([
        'campaign_budget_operation' => new CampaignBudgetOperation([
            'create' => new CampaignBudget([
                // Sets a temporary ID in the budget's resource name so it can be referenced
                // by the campaign in later steps.
                'resource_name' => ResourceNames::forCampaignBudget(
                    $customerId,
                    self::BUDGET_TEMPORARY_ID
                ),
                'name' => 'Performance Max campaign budget #' . Helper::getPrintableDatetime(),
                // The budget period already defaults to DAILY.
                'amount_micros' => 50000000,
                'delivery_method' => BudgetDeliveryMethod::STANDARD,
                // A Performance Max campaign cannot use a shared campaign budget.
                'explicitly_shared' => false
            ])
        ])
    ]);
}