Assets in a Performance Max Campaign

Performance Max campaigns have some unique characteristics regarding assets .

  1. There are a minimum required number of assets of different types.
  2. Assets are grouped together in a collection called an AssetGroup , which is unique to Performance Max campaigns.
  3. Some assets can be generated automatically by machine learning.

Code example

The following code snippet illustrates creating the necessary repeated assets in a new request:

Java

 /** Creates multiple text assets and returns the list of resource names. */ 
 private 
  
 List<String> 
  
 createMultipleTextAssets 
 ( 
  
 GoogleAdsClient 
  
 googleAdsClient 
 , 
  
 long 
  
 customerId 
 , 
  
 List<String> 
  
 texts 
 ) 
  
 { 
  
 List<MutateOperation> 
  
 mutateOperations 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 for 
  
 ( 
 String 
  
 text 
  
 : 
  
 texts 
 ) 
  
 { 
  
 Asset 
  
 asset 
  
 = 
  
 Asset 
 . 
 newBuilder 
 (). 
 setTextAsset 
 ( 
 TextAsset 
 . 
 newBuilder 
 (). 
 setText 
 ( 
 text 
 )). 
 build 
 (); 
  
 AssetOperation 
  
 assetOperation 
  
 = 
  
 AssetOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 asset 
 ). 
 build 
 (); 
  
 mutateOperations 
 . 
 add 
 ( 
 MutateOperation 
 . 
 newBuilder 
 (). 
 setAssetOperation 
 ( 
 assetOperation 
 ). 
 build 
 ()); 
  
 } 
  
 List<String> 
  
 assetResourceNames 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 // Creates the service client. 
  
 try 
  
 ( 
 GoogleAdsServiceClient 
  
 googleAdsServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createGoogleAdsServiceClient 
 ()) 
  
 { 
  
 // Sends the operations in a single Mutate request. 
  
 MutateGoogleAdsResponse 
  
 response 
  
 = 
  
 googleAdsServiceClient 
 . 
 mutate 
 ( 
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 mutateOperations 
 ); 
  
 for 
  
 ( 
 MutateOperationResponse 
  
 result 
  
 : 
  
 response 
 . 
 getMutateOperationResponsesList 
 ()) 
  
 { 
  
 if 
  
 ( 
 result 
 . 
 hasAssetResult 
 ()) 
  
 { 
  
 assetResourceNames 
 . 
 add 
 ( 
 result 
 . 
 getAssetResult 
 (). 
 getResourceName 
 ()); 
  
 } 
  
 } 
  
 printResponseDetails 
 ( 
 response 
 ); 
  
 } 
  
 return 
  
 assetResourceNames 
 ; 
 } 
  
  

C#

 /// <summary> 
 /// Creates multiple text assets and returns the list of resource names. 
 /// </summary> 
 /// <param name="client">The Google Ads Client.</param> 
 /// <param name="customerId">The customer's ID.</param> 
 /// <param name="texts">The texts to add.</param> 
 /// <returns>A list of asset resource names.</returns> 
 private 
  
 List<string> 
  
 CreateMultipleTextAssets 
 ( 
  
 GoogleAdsClient 
  
 client 
 , 
  
 long 
  
 customerId 
 , 
  
 string 
 [] 
  
 texts 
 ) 
 { 
  
 // Get the GoogleAdsService. 
  
 GoogleAdsServiceClient 
  
 googleAdsServiceClient 
  
 = 
  
 client 
 . 
 GetService 
 ( 
 Services 
 . 
 V21 
 . 
 GoogleAdsService 
 ); 
  
 MutateGoogleAdsRequest 
  
 request 
  
 = 
  
 new 
  
 MutateGoogleAdsRequest 
 () 
  
 { 
  
 CustomerId 
  
 = 
  
 customerId 
 . 
 ToString 
 () 
  
 }; 
  
 foreach 
  
 ( 
 string 
  
 text 
  
 in 
  
 texts 
 ) 
  
 { 
  
 request 
 . 
 MutateOperations 
 . 
 Add 
 ( 
  
 new 
  
 MutateOperation 
 () 
  
 { 
  
 AssetOperation 
  
 = 
  
 new 
  
 AssetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 new 
  
 Asset 
 () 
  
 { 
  
 TextAsset 
  
 = 
  
 new 
  
 TextAsset 
 () 
  
 { 
  
 Text 
  
 = 
  
 text 
  
 } 
  
 } 
  
 } 
  
 } 
  
 ); 
  
 } 
  
 // Send the operations in a single Mutate request. 
  
 MutateGoogleAdsResponse 
  
 response 
  
 = 
  
 googleAdsServiceClient 
 . 
 Mutate 
 ( 
 request 
 ); 
  
 List<string> 
  
 assetResourceNames 
  
 = 
  
 new 
  
 List<string> 
 (); 
  
 foreach 
  
 ( 
 MutateOperationResponse 
  
 operationResponse 
  
 in 
  
 response 
 . 
 MutateOperationResponses 
 ) 
  
 { 
  
 MutateAssetResult 
  
 assetResult 
  
 = 
  
 operationResponse 
 . 
 AssetResult 
 ; 
  
 assetResourceNames 
 . 
 Add 
 ( 
 assetResult 
 . 
 ResourceName 
 ); 
  
 } 
  
 PrintResponseDetails 
 ( 
 response 
 ); 
  
 return 
  
 assetResourceNames 
 ; 
 } 
  
  

PHP

 private static function createMultipleTextAssets( 
 GoogleAdsClient $googleAdsClient, 
 int $customerId, 
 array $texts 
 ): array { 
 // Here again, we use the GoogleAdService to create multiple text assets in a single 
 // request. 
 $operations = []; 
 foreach ($texts as $text) { 
 // Creates a mutate operation for a text asset. 
 $operations[] = new MutateOperation([ 
 'asset_operation' => new AssetOperation([ 
 'create' => new Asset(['text_asset' => new TextAsset(['text' => $text])]) 
 ]) 
 ]); 
 } 
 // Issues a mutate request to add all assets. 
 $googleAdsService = $googleAdsClient->getGoogleAdsServiceClient(); 
 /** @var MutateGoogleAdsResponse $mutateGoogleAdsResponse */ 
 $mutateGoogleAdsResponse = 
 $googleAdsService->mutate(MutateGoogleAdsRequest::build($customerId, $operations)); 
 $assetResourceNames = []; 
 foreach ($mutateGoogleAdsResponse->getMutateOperationResponses() as $response) { 
 /** @var MutateOperationResponse $response */ 
 $assetResourceNames[] = $response->getAssetResult()->getResourceName(); 
 } 
 self::printResponseDetails($mutateGoogleAdsResponse); 
 return $assetResourceNames; 
 }  
 

Python

 def 
  
 create_multiple_text_assets 
 ( 
 client 
 : 
 GoogleAdsClient 
 , 
 customer_id 
 : 
 str 
 , 
 texts 
 : 
 List 
 [ 
 str 
 ] 
 ) 
 - 
> List 
 [ 
 str 
 ]: 
  
 """Creates multiple text assets and returns the list of resource names. 
 Args: 
 client: an initialized GoogleAdsClient instance. 
 customer_id: a client customer ID. 
 texts: a list of strings, each of which will be used to create a text 
 asset. 
 Returns: 
 asset_resource_names: a list of asset resource names. 
 """ 
 # Here again we use the GoogleAdService to create multiple text 
 # assets in a single request. 
 googleads_service 
 : 
 GoogleAdsServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "GoogleAdsService" 
 ) 
 operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 [] 
 for 
 text 
 in 
 texts 
 : 
 mutate_operation 
 : 
 MutateOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "MutateOperation" 
 ) 
 asset 
 : 
 Asset 
 = 
 mutate_operation 
 . 
 asset_operation 
 . 
 create 
 asset 
 . 
 text_asset 
 . 
 text 
 = 
 text 
 operations 
 . 
 append 
 ( 
 mutate_operation 
 ) 
 # Send the operations in a single Mutate request. 
 response 
 : 
 MutateGoogleAdsResponse 
 = 
 googleads_service 
 . 
 mutate 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 mutate_operations 
 = 
 operations 
 , 
 ) 
 asset_resource_names 
 : 
 List 
 [ 
 str 
 ] 
 = 
 [] 
 for 
 result 
 in 
 response 
 . 
 mutate_operation_responses 
 : 
 if 
 result 
 . 
 _pb 
 . 
 HasField 
 ( 
 "asset_result" 
 ): 
 asset_resource_names 
 . 
 append 
 ( 
 result 
 . 
 asset_result 
 . 
 resource_name 
 ) 
 print_response_details 
 ( 
 response 
 ) 
 return 
 asset_resource_names  
 
 . 
 py 

Ruby

 # Creates multiple text assets and returns the list of resource names. 
 def 
  
 create_multiple_text_assets 
 ( 
 client 
 , 
  
 customer_id 
 , 
  
 texts 
 ) 
  
 operations 
  
 = 
  
 texts 
 . 
 map 
  
 do 
  
 | 
 text 
 | 
  
 client 
 . 
 operation 
 . 
 mutate 
  
 do 
  
 | 
 m 
 | 
  
 m 
 . 
 asset_operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 asset 
  
 do 
  
 | 
 asset 
 | 
  
 asset 
 . 
 text_asset 
  
 = 
  
 client 
 . 
 resource 
 . 
 text_asset 
  
 do 
  
 | 
 text_asset 
 | 
  
 text_asset 
 . 
 text 
  
 = 
  
 text 
  
 end 
  
 end 
  
 end 
  
 end 
  
 # Send the operations in a single Mutate request. 
  
 response 
  
 = 
  
 client 
 . 
 service 
 . 
 google_ads 
 . 
 mutate 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 mutate_operations 
 : 
  
 operations 
 , 
  
 ) 
  
 asset_resource_names 
  
 = 
  
 [] 
  
 response 
 . 
 mutate_operation_responses 
 . 
 each 
  
 do 
  
 | 
 result 
 | 
  
 if 
  
 result 
 . 
 asset_result 
  
 asset_resource_names 
 . 
 append 
 ( 
 result 
 . 
 asset_result 
 . 
 resource_name 
 ) 
  
 end 
  
 end 
  
 print_response_details 
 ( 
 response 
 ) 
  
 asset_resource_names 
 end  
 
 . 
 rb 
  

Perl

 sub 
  
 create_multiple_text_assets 
  
 { 
  
 my 
  
 ( 
 $api_client 
 , 
  
 $customer_id 
 , 
  
 $texts 
 ) 
  
 = 
  
 @_ 
 ; 
  
 # Here again we use the GoogleAdService to create multiple text assets in a 
  
 # single request. 
  
 my 
  
 $operations 
  
 = 
  
 [] 
 ; 
  
 foreach 
  
 my 
  
 $text 
  
 ( 
 @$texts 
 ) 
  
 { 
  
 # Create a mutate operation for a text asset. 
  
 push 
  
 @$operations 
 , 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 MutateOperation 
  
 - 
> new 
 ({ 
  
 assetOperation 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Services::AssetService:: 
 AssetOperation 
 - 
>  
 new 
 ({ 
  
 create 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Resources:: 
 Asset 
 - 
> new 
 ({ 
  
 textAsset 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Common:: 
 TextAsset 
 - 
> new 
 ({ 
  
 text 
  
 = 
>  
 $text 
  
 })})})}); 
  
 } 
  
 # Issue a mutate request to add all assets. 
  
 my 
  
 $mutate_google_ads_response 
  
 = 
  
 $api_client 
 - 
> GoogleAdsService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 mutateOperations 
  
 = 
>  
 $operations 
  
 }); 
  
 my 
  
 $asset_resource_names 
  
 = 
  
 [] 
 ; 
  
 foreach 
  
 my 
  
 $response 
  
 ( 
 @ 
 { 
 $mutate_google_ads_response 
 - 
> { 
 mutateOperationResponses 
 }}) 
  
 { 
  
 push 
  
 @$asset_resource_names 
 , 
  
 $response 
 - 
> { 
 assetResult 
 }{ 
 resourceName 
 }; 
  
 } 
  
 print_response_details 
 ( 
 $mutate_google_ads_response 
 ); 
  
 return 
  
 $asset_resource_names 
 ; 
 } 
  
  

Automatically created assets

Google automation using machine learning generates additional assets as needed to cover all relevant channels. Assets are automatically mixed and matched based on which Google Ad channel (such as YouTube, Gmail, or Search) your ad is being served on.

Text assets

You can associate a page feed in your account with a Performance Max campaign to automatically generate assets .

To link a page feed with a campaign, use the same process as used for Dynamic Search Ads:

  1. Create assets for each page of your website
  2. Package page feed assets into an AssetSet
  3. Associate the AssetSet with a campaign

After you've associated a page feed, make sure the AssetAutomationSetting of type TEXT_ASSET_AUTOMATION is set to OPTED_IN . This is the default setting if you didn't set the AssetAutomationSetting when creating the campaign.

Using this setting means your campaign can use content from your landing page, domain, and provided assets to customize ads when predicted to improve performance. We recommend leaving this as OPTED-IN .

Video assets

If you don't add a video to your Performance Max asset group, then one or more video assets might be generated from the assets in your asset group. If you no longer want auto-generated videos to serve in your Performance Max campaign, then you can upload your own custom video, and the auto-generated videos will stop serving.

Smart automation may enhance your YouTube video assets by adjusting video orientation and intelligently shortening them to highlight key moments. If you prefer to maintain your original video assets, set the AssetAutomationSetting of type GENERATE_ENHANCED_YOUTUBE_VIDEOS to OPTED_OUT .

Design a Mobile Site
View Site in Mobile | Classic
Share by: