Performance Max Asset Groups

A Performance Max asset group is made from the images, headlines, descriptions, and videos you add when you create your Performance Max campaign. To optimize your ad's performance, the system intelligently selects and combines your assets to best fit the specific Google Ads channel (such as YouTube, Gmail, or Search) where your ad is shown.

An asset group cannot be shared between campaigns. Each campaign requires at least one asset group. There is a maximum of 100 asset groups per campaign.

Asset groups

An asset group is a collection of assets centered on a theme or related to a target audience. The asset group is used to assemble all of your ads and build an inventory for all applicable ad formats for your advertising objective. Learn more about asset groups .

Asset groups contain one or more final URLs. At least one final URL is required. Use the URL that is most relevant to the conversion path for the given asset group and campaign objectives. The final URL of the asset group cannot be excluded from the WEBPAGE campaign criteria .

An AssetGroup is linked to an Asset by creating a new AssetGroupAsset and providing the following:

  • Resource name of the AssetGroup
  • Resource name of the Asset
  • AssetFieldType of the Asset in the AssetGroup

An AssetGroup can be linked to multiple Asset objects. An Asset can be linked to multiple asset groups. One Asset can have different field types in different AssetGroup objects.

Restrictions:

  • AssetGroupOperation requests must be atomic. Partial failure is not supported.
  • Asset group resources cannot be modified in a batch process using AssetGroupOperation . Instead, use the standard GoogleAdsService.Mutate with AssetGroupService for modifying asset group resources in a batch process.
  • AssetGroupAssetOperation may be used within the BatchJobService to link or unlink assets to an asset group.

You can create AssetGroup objects in Performance Max retail campaigns without meeting the minimum asset requirements . However, attempting to link an Asset to an AssetGroup using an AssetGroupAsset in any Performance Max campaign triggers all asset requirements to take effect. In other words, AssetGroup objects in Performance Max retail campaigns can only exist in two states:

  • Without any linked Asset objects
  • Meeting all Asset requirements

As a best practice, we recommend uploading assets to maximize reach across all inventory. However, you must link all required assets in a single request, and you cannot add assets to asset groups one at a time with separate requests.

Java

 /** Creates a list of MutateOperations that create a new AssetGroup. */ 
 private 
  
 List<MutateOperation> 
  
 createAssetGroupOperations 
 ( 
  
 long 
  
 customerId 
 , 
  
 String 
  
 assetGroupResourceName 
 , 
  
 List<String> 
  
 headlineAssetResourceNames 
 , 
  
 List<String> 
  
 descriptionAssetResourceNames 
 , 
  
 boolean 
  
 brandGuidelinesEnabled 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 List<MutateOperation> 
  
 mutateOperations 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 String 
  
 campaignResourceName 
  
 = 
  
 ResourceNames 
 . 
 campaign 
 ( 
 customerId 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ); 
  
 // Creates the AssetGroup. 
  
 AssetGroup 
  
 assetGroup 
  
 = 
  
 AssetGroup 
 . 
 newBuilder 
 () 
  
 . 
 setName 
 ( 
 "Performance Max asset group #" 
  
 + 
  
 getPrintableDateTime 
 ()) 
  
 . 
 setCampaign 
 ( 
 campaignResourceName 
 ) 
  
 . 
 addFinalUrls 
 ( 
 "http://www.example.com" 
 ) 
  
 . 
 addFinalMobileUrls 
 ( 
 "http://www.example.com" 
 ) 
  
 . 
 setStatus 
 ( 
 AssetGroupStatus 
 . 
 PAUSED 
 ) 
  
 . 
 setResourceName 
 ( 
 assetGroupResourceName 
 ) 
  
 . 
 build 
 (); 
  
 AssetGroupOperation 
  
 assetGroupOperation 
  
 = 
  
 AssetGroupOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 assetGroup 
 ). 
 build 
 (); 
  
 mutateOperations 
 . 
 add 
 ( 
  
 MutateOperation 
 . 
 newBuilder 
 (). 
 setAssetGroupOperation 
 ( 
 assetGroupOperation 
 ). 
 build 
 ()); 
  
 // For the list of required assets for a Performance Max campaign, see 
  
 // https://developers.google.com/google-ads/api/docs/performance-max/assets 
  
 // An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
  
 // and providing: 
  
 //   the resource name of the AssetGroup 
  
 //   the resource name of the Asset 
  
 //   the field_type of the Asset in this AssetGroup. 
  
 // To learn more about AssetGroups, see 
  
 // https://developers.google.com/google-ads/api/docs/performance-max/asset-groups 
  
 // Links the previously created multiple text assets. 
  
 // Links the headline assets. 
  
 for 
  
 ( 
 String 
  
 resourceName 
  
 : 
  
 headlineAssetResourceNames 
 ) 
  
 { 
  
 mutateOperations 
 . 
 add 
 ( 
  
 createAssetGroupAssetMutateOperation 
 ( 
  
 AssetFieldType 
 . 
 HEADLINE 
 , 
  
 resourceName 
 , 
  
 assetGroupResourceName 
 )); 
  
 } 
  
 // Links the description assets. 
  
 for 
  
 ( 
 String 
  
 resourceName 
  
 : 
  
 descriptionAssetResourceNames 
 ) 
  
 { 
  
 mutateOperations 
 . 
 add 
 ( 
  
 createAssetGroupAssetMutateOperation 
 ( 
  
 AssetFieldType 
 . 
 DESCRIPTION 
 , 
  
 resourceName 
 , 
  
 assetGroupResourceName 
 )); 
  
 } 
  
 // Creates and links the long headline text asset. 
  
 List<MutateOperation> 
  
 createAndLinkTextAssetOperations 
  
 = 
  
 createAndLinkTextAsset 
 ( 
 customerId 
 , 
  
 "Travel the World" 
 , 
  
 AssetFieldType 
 . 
 LONG_HEADLINE 
 ); 
  
 mutateOperations 
 . 
 addAll 
 ( 
 createAndLinkTextAssetOperations 
 ); 
  
 // Creates and links the business name and logo assets. 
  
 List<MutateOperation> 
  
 createAndLinkBrandAssets 
  
 = 
  
 createAndLinkBrandAssets 
 ( 
  
 customerId 
 , 
  
 brandGuidelinesEnabled 
 , 
  
 "Interplanetary Cruises" 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 "Marketing Logo" 
 ); 
  
 mutateOperations 
 . 
 addAll 
 ( 
 createAndLinkBrandAssets 
 ); 
  
 // Creates and links the image assets. 
  
 // Creates and links the Marketing Image Asset. 
  
 createAndLinkTextAssetOperations 
  
 = 
  
 createAndLinkImageAsset 
 ( 
  
 customerId 
 , 
  
 "https://gaagl.page.link/Eit5" 
 , 
  
 AssetFieldType 
 . 
 MARKETING_IMAGE 
 , 
  
 "Marketing Image" 
 ); 
  
 mutateOperations 
 . 
 addAll 
 ( 
 createAndLinkTextAssetOperations 
 ); 
  
 // Creates and links the Square Marketing Image Asset. 
  
 createAndLinkTextAssetOperations 
  
 = 
  
 createAndLinkImageAsset 
 ( 
  
 customerId 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 AssetFieldType 
 . 
 SQUARE_MARKETING_IMAGE 
 , 
  
 "Square Marketing Image" 
 ); 
  
 mutateOperations 
 . 
 addAll 
 ( 
 createAndLinkTextAssetOperations 
 ); 
  
 return 
  
 mutateOperations 
 ; 
 } 
  
  

C#

 /// <summary> 
 /// Creates a list of MutateOperations that create a new asset_group. 
 /// </summary> 
 /// <param name="campaignResourceName">The campaign resource name.</param> 
 /// <param name="assetGroupResourceName">The asset group resource name.</param> 
 /// <param name="headlineAssetResourceNames">The headline asset resource names.</param> 
 /// <param name="descriptionAssetResourceNames">The description asset resource 
 /// names.</param> 
 /// <param name="resourceNameGenerator">A generator for unique temporary ID's.</param> 
 /// <param name="config">The Google Ads config.</param> 
 /// <param name="brandGuidelinesEnabled">Whether or not to enable brand guidelines.</param> 
 /// <returns>A list of MutateOperations that create the new asset group.</returns> 
 private 
  
 List<MutateOperation> 
  
 CreateAssetGroupOperations 
 ( 
  
 string 
  
 campaignResourceName 
 , 
  
 string 
  
 assetGroupResourceName 
 , 
  
 List<string> 
  
 headlineAssetResourceNames 
 , 
  
 List<string> 
  
 descriptionAssetResourceNames 
 , 
  
 AssetTemporaryResourceNameGenerator 
  
 resourceNameGenerator 
 , 
  
 GoogleAdsConfig 
  
 config 
 , 
  
 bool 
  
 brandGuidelinesEnabled 
 ) 
 { 
  
 List<MutateOperation> 
  
 operations 
  
 = 
  
 new 
  
 List<MutateOperation> 
 (); 
  
 // Create the AssetGroup 
  
 operations 
 . 
 Add 
 ( 
  
 new 
  
 MutateOperation 
 () 
  
 { 
  
 AssetGroupOperation 
  
 = 
  
 new 
  
 AssetGroupOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 new 
  
 AssetGroup 
 () 
  
 { 
  
 Name 
  
 = 
  
 "Performance Max asset group #" 
  
 + 
  
 ExampleUtilities 
 . 
 GetRandomString 
 (), 
  
 Campaign 
  
 = 
  
 campaignResourceName 
 , 
  
 FinalUrls 
  
 = 
  
 { 
  
 "http://www.example.com" 
  
 }, 
  
 FinalMobileUrls 
  
 = 
  
 { 
  
 "http://www.example.com" 
  
 }, 
  
 Status 
  
 = 
  
 AssetGroupStatus 
 . 
 Paused 
 , 
  
 ResourceName 
  
 = 
  
 assetGroupResourceName 
  
 } 
  
 } 
  
 } 
  
 ); 
  
 // For the list of required assets for a Performance Max campaign, see 
  
 // https://developers.google.com/google-ads/api/docs/performance-max/assets 
  
 // An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
  
 // and providing: 
  
 //   the resource name of the AssetGroup 
  
 //   the resource name of the Asset 
  
 //   the field_type of the Asset in this AssetGroup. 
  
 // 
  
 // To learn more about AssetGroups, see 
  
 // https://developers.google.com/google-ads/api/docs/performance-max/asset-groups 
  
 // Link the previously created multiple text assets. 
  
 // Link the headline assets. 
  
 foreach 
  
 ( 
 string 
  
 resourceName 
  
 in 
  
 headlineAssetResourceNames 
 ) 
  
 { 
  
 operations 
 . 
 Add 
 ( 
  
 new 
  
 MutateOperation 
 () 
  
 { 
  
 AssetGroupAssetOperation 
  
 = 
  
 new 
  
 AssetGroupAssetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 new 
  
 AssetGroupAsset 
 () 
  
 { 
  
 FieldType 
  
 = 
  
 AssetFieldType 
 . 
 Headline 
 , 
  
 AssetGroup 
  
 = 
  
 assetGroupResourceName 
 , 
  
 Asset 
  
 = 
  
 resourceName 
  
 } 
  
 } 
  
 } 
  
 ); 
  
 } 
  
 // Link the description assets. 
  
 foreach 
  
 ( 
 string 
  
 resourceName 
  
 in 
  
 descriptionAssetResourceNames 
 ) 
  
 { 
  
 operations 
 . 
 Add 
 ( 
  
 new 
  
 MutateOperation 
 () 
  
 { 
  
 AssetGroupAssetOperation 
  
 = 
  
 new 
  
 AssetGroupAssetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 new 
  
 AssetGroupAsset 
 () 
  
 { 
  
 FieldType 
  
 = 
  
 AssetFieldType 
 . 
 Description 
 , 
  
 AssetGroup 
  
 = 
  
 assetGroupResourceName 
 , 
  
 Asset 
  
 = 
  
 resourceName 
  
 } 
  
 } 
  
 } 
  
 ); 
  
 } 
  
 // Create and link the brand assets. 
  
 operations 
 . 
 AddRange 
 ( 
  
 CreateAndLinkBrandAssets 
 ( 
  
 assetGroupResourceName 
 , 
  
 campaignResourceName 
 , 
  
 resourceNameGenerator 
 , 
  
 "Interplanetary Cruises" 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 "Marketing Logo" 
 , 
  
 config 
 , 
  
 brandGuidelinesEnabled 
  
 ) 
  
 ); 
  
 // Create and link the long headline text asset. 
  
 operations 
 . 
 AddRange 
 ( 
  
 CreateAndLinkTextAsset 
 ( 
  
 assetGroupResourceName 
 , 
  
 resourceNameGenerator 
 . 
 Next 
 (), 
  
 "Travel the World" 
 , 
  
 AssetFieldType 
 . 
 LongHeadline 
  
 ) 
  
 ); 
  
 // Create and link the image assets. 
  
 // Create and link the Marketing Image Asset. 
  
 operations 
 . 
 AddRange 
 ( 
  
 CreateAndLinkImageAsset 
 ( 
  
 assetGroupResourceName 
 , 
  
 resourceNameGenerator 
 . 
 Next 
 (), 
  
 "https://gaagl.page.link/Eit5" 
 , 
  
 AssetFieldType 
 . 
 MarketingImage 
 , 
  
 "Marketing Image" 
 , 
  
 config 
  
 ) 
  
 ); 
  
 // Create and link the Square Marketing Image Asset. 
  
 operations 
 . 
 AddRange 
 ( 
  
 CreateAndLinkImageAsset 
 ( 
  
 assetGroupResourceName 
 , 
  
 resourceNameGenerator 
 . 
 Next 
 (), 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 AssetFieldType 
 . 
 SquareMarketingImage 
 , 
  
 "Square Marketing Image" 
 , 
  
 config 
  
 ) 
  
 ); 
  
 return 
  
 operations 
 ; 
 } 
  
  

PHP

 private static function createAssetGroupOperations( 
 int $customerId, 
 array $headlineAssetResourceNames, 
 array $descriptionAssetResourceNames, 
 bool $brandGuidelinesEnabled 
 ): array { 
 $operations = []; 
 // Creates a new mutate operation that creates an asset group operation. 
 $operations[] = new MutateOperation([ 
 'asset_group_operation' => new AssetGroupOperation([ 
 'create' => new AssetGroup([ 
 'resource_name' => ResourceNames::forAssetGroup( 
 $customerId, 
 self::ASSET_GROUP_TEMPORARY_ID 
 ), 
 'name' => 'Performance Max asset group #' . Helper::getPrintableDatetime(), 
 'campaign' => ResourceNames::forCampaign( 
 $customerId, 
 self::PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ), 
 'final_urls' => ['http://www.example.com'], 
 'final_mobile_urls' => ['http://www.example.com'], 
 'status' => AssetGroupStatus::PAUSED 
 ]) 
 ]) 
 ]); 
 // For the list of required assets for a Performance Max campaign, see 
 // https://developers.google.com/google-ads/api/docs/performance-max/assets 
 // An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
 // and providing: 
 // -  the resource name of the AssetGroup 
 // -  the resource name of the Asset 
 // -  the field_type of the Asset in this AssetGroup 
 // 
 // To learn more about AssetGroups, see 
 // https://developers.google.com/google-ads/api/docs/performance-max/asset-groups. 
 // Links the previously created multiple text assets. 
 // Links the headline assets. 
 foreach ($headlineAssetResourceNames as $resourceName) { 
 $operations[] = new MutateOperation([ 
 'asset_group_asset_operation' => new AssetGroupAssetOperation([ 
 'create' => new AssetGroupAsset([ 
 'asset' => $resourceName, 
 'asset_group' => ResourceNames::forAssetGroup( 
 $customerId, 
 self::ASSET_GROUP_TEMPORARY_ID 
 ), 
 'field_type' => AssetFieldType::HEADLINE 
 ]) 
 ]) 
 ]); 
 } 
 // Links the description assets. 
 foreach ($descriptionAssetResourceNames as $resourceName) { 
 $operations[] = new MutateOperation([ 
 'asset_group_asset_operation' => new AssetGroupAssetOperation([ 
 'create' => new AssetGroupAsset([ 
 'asset' => $resourceName, 
 'asset_group' => ResourceNames::forAssetGroup( 
 $customerId, 
 self::ASSET_GROUP_TEMPORARY_ID 
 ), 
 'field_type' => AssetFieldType::DESCRIPTION 
 ]) 
 ]) 
 ]); 
 } 
 // Creates and links the long headline text asset. 
 $operations = array_merge($operations, self::createAndLinkTextAsset( 
 $customerId, 
 'Travel the World', 
 AssetFieldType::LONG_HEADLINE 
 )); 
 // Creates and links the business name text asset. 
 $operations = array_merge($operations, self::createAndLinkBrandAssets( 
 $customerId, 
 $brandGuidelinesEnabled, 
 'Interplanetary Cruises', 
 'https://gaagl.page.link/bjYi', 
 'Marketing Logo' 
 )); 
 // Creates and links the image assets. 
 // Creates and links the Marketing Image Asset. 
 $operations = array_merge($operations, self::createAndLinkImageAsset( 
 $customerId, 
 'https://gaagl.page.link/Eit5', 
 AssetFieldType::MARKETING_IMAGE, 
 'Marketing Image' 
 )); 
 // Creates and links the Square Marketing Image Asset. 
 $operations = array_merge($operations, self::createAndLinkImageAsset( 
 $customerId, 
 'https://gaagl.page.link/bjYi', 
 AssetFieldType::SQUARE_MARKETING_IMAGE, 
 'Square Marketing Image' 
 )); 
 return $operations; 
 }  
 

Python

 def 
  
 create_asset_group_operation 
 ( 
 client 
 : 
 GoogleAdsClient 
 , 
 customer_id 
 : 
 str 
 , 
 headline_asset_resource_names 
 : 
 List 
 [ 
 str 
 ], 
 description_asset_resource_names 
 : 
 List 
 [ 
 str 
 ], 
 brand_guidelines_enabled 
 : 
 bool 
 , 
 ) 
 - 
> List 
 [ 
 MutateOperation 
 ]: 
  
 """Creates a list of MutateOperations that create a new asset_group. 
 A temporary ID will be assigned to this asset group so that it can 
 be referenced by other objects being created in the same Mutate request. 
 Args: 
 client: an initialized GoogleAdsClient instance. 
 customer_id: a client customer ID. 
 headline_asset_resource_names: a list of headline resource names. 
 description_asset_resource_names: a list of description resource names. 
 brand_guidelines_enabled: a boolean value indicating if the campaign is 
 enabled for brand guidelines. 
 Returns: 
 MutateOperations that create a new asset group and related assets. 
 """ 
 asset_group_service 
 : 
 AssetGroupServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "AssetGroupService" 
 ) 
 campaign_service 
 : 
 CampaignServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "CampaignService" 
 ) 
 operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 [] 
 # Create the AssetGroup 
 mutate_operation 
 : 
 MutateOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "MutateOperation" 
 ) 
 asset_group 
 : 
 AssetGroup 
 = 
 mutate_operation 
 . 
 asset_group_operation 
 . 
 create 
 asset_group 
 . 
 name 
 = 
 f 
 "Performance Max asset group # 
 { 
 uuid4 
 () 
 } 
 " 
 asset_group 
 . 
 campaign 
 = 
 campaign_service 
 . 
 campaign_path 
 ( 
 customer_id 
 , 
 _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ) 
 asset_group 
 . 
 final_urls 
 . 
 append 
 ( 
 "http://www.example.com" 
 ) 
 asset_group 
 . 
 final_mobile_urls 
 . 
 append 
 ( 
 "http://www.example.com" 
 ) 
 asset_group 
 . 
 status 
 = 
 client 
 . 
 enums 
 . 
 AssetGroupStatusEnum 
 . 
 PAUSED 
 asset_group 
 . 
 resource_name 
 = 
 asset_group_service 
 . 
 asset_group_path 
 ( 
 customer_id 
 , 
 _ASSET_GROUP_TEMPORARY_ID 
 , 
 ) 
 operations 
 . 
 append 
 ( 
 mutate_operation 
 ) 
 # For the list of required assets for a Performance Max campaign, see 
 # https://developers.google.com/google-ads/api/docs/performance-max/assets 
 # An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
 # and providing: 
 #   the resource name of the AssetGroup 
 #   the resource name of the Asset 
 #   the field_type of the Asset in this AssetGroup. 
 # 
 # To learn more about AssetGroups, see 
 # https://developers.google.com/google-ads/api/docs/performance-max/asset-groups 
 # Link the previously created multiple text assets. 
 # Link the headline assets. 
 for 
 resource_name 
 in 
 headline_asset_resource_names 
 : 
 mutate_operation 
 : 
 MutateOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "MutateOperation" 
 ) 
 asset_group_asset 
 : 
 AssetGroupAsset 
 = 
 ( 
 mutate_operation 
 . 
 asset_group_asset_operation 
 . 
 create 
 ) 
 asset_group_asset 
 . 
 field_type 
 = 
 client 
 . 
 enums 
 . 
 AssetFieldTypeEnum 
 . 
 HEADLINE 
 asset_group_asset 
 . 
 asset_group 
 = 
 asset_group_service 
 . 
 asset_group_path 
 ( 
 customer_id 
 , 
 _ASSET_GROUP_TEMPORARY_ID 
 , 
 ) 
 asset_group_asset 
 . 
 asset 
 = 
 resource_name 
 operations 
 . 
 append 
 ( 
 mutate_operation 
 ) 
 #  Link the description assets. 
 for 
 resource_name 
 in 
 description_asset_resource_names 
 : 
 mutate_operation 
 : 
 MutateOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "MutateOperation" 
 ) 
 asset_group_asset 
 : 
 AssetGroupAsset 
 = 
 ( 
 mutate_operation 
 . 
 asset_group_asset_operation 
 . 
 create 
 ) 
 asset_group_asset 
 . 
 field_type 
 = 
 ( 
 client 
 . 
 enums 
 . 
 AssetFieldTypeEnum 
 . 
 DESCRIPTION 
 ) 
 asset_group_asset 
 . 
 asset_group 
 = 
 asset_group_service 
 . 
 asset_group_path 
 ( 
 customer_id 
 , 
 _ASSET_GROUP_TEMPORARY_ID 
 , 
 ) 
 asset_group_asset 
 . 
 asset 
 = 
 resource_name 
 operations 
 . 
 append 
 ( 
 mutate_operation 
 ) 
 # Create and link the long headline text asset. 
 mutate_operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 create_and_link_text_asset 
 ( 
 client 
 , 
 customer_id 
 , 
 "Travel the World" 
 , 
 client 
 . 
 enums 
 . 
 AssetFieldTypeEnum 
 . 
 LONG_HEADLINE 
 , 
 ) 
 operations 
 . 
 extend 
 ( 
 mutate_operations 
 ) 
 # Create and link the business name and logo asset. 
 mutate_operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 create_and_link_brand_assets 
 ( 
 client 
 , 
 customer_id 
 , 
 brand_guidelines_enabled 
 , 
 "Interplanetary Cruises" 
 , 
 "https://gaagl.page.link/bjYi" 
 , 
 "Marketing Logo" 
 , 
 ) 
 operations 
 . 
 extend 
 ( 
 mutate_operations 
 ) 
 # Create and link the image assets. 
 # Create and link the Marketing Image Asset. 
 mutate_operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 create_and_link_image_asset 
 ( 
 client 
 , 
 customer_id 
 , 
 "https://gaagl.page.link/Eit5" 
 , 
 client 
 . 
 enums 
 . 
 AssetFieldTypeEnum 
 . 
 MARKETING_IMAGE 
 , 
 "Marketing Image" 
 , 
 ) 
 operations 
 . 
 extend 
 ( 
 mutate_operations 
 ) 
 # Create and link the Square Marketing Image Asset. 
 mutate_operations 
 : 
 List 
 [ 
 MutateOperation 
 ] 
 = 
 create_and_link_image_asset 
 ( 
 client 
 , 
 customer_id 
 , 
 "https://gaagl.page.link/bjYi" 
 , 
 client 
 . 
 enums 
 . 
 AssetFieldTypeEnum 
 . 
 SQUARE_MARKETING_IMAGE 
 , 
 "Square Marketing Image" 
 , 
 ) 
 operations 
 . 
 extend 
 ( 
 mutate_operations 
 ) 
 return 
 operations  
 
 . 
 py 

Ruby

 # Creates a list of MutateOperations that create a new asset_group. 
 # 
 # A temporary ID will be assigned to this asset group so that it can 
 # be referenced by other objects being created in the same Mutate request. 
 def 
  
 create_asset_group_operation 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 headline_asset_resource_names 
 , 
  
 description_asset_resource_names 
 , 
  
 brand_guidelines_enabled 
 ) 
  
 operations 
  
 = 
  
 [] 
  
 # Create the AssetGroup 
  
 operations 
 << 
 client 
 . 
 operation 
 . 
 mutate 
  
 do 
  
 | 
 m 
 | 
  
 m 
 . 
 asset_group_operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 asset_group 
  
 do 
  
 | 
 ag 
 | 
  
 ag 
 . 
 name 
  
 = 
  
 "Performance Max asset group 
 #{ 
 SecureRandom 
 . 
 uuid 
 } 
 " 
  
 ag 
 . 
 campaign 
  
 = 
  
 client 
 . 
 path 
 . 
 campaign 
 ( 
  
 customer_id 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ) 
  
 ag 
 . 
 final_urls 
 << 
 "http://www.example.com" 
  
 ag 
 . 
 final_mobile_urls 
 << 
 "http://www.example.com" 
  
 ag 
 . 
 status 
  
 = 
  
 :PAUSED 
  
 ag 
 . 
 resource_name 
  
 = 
  
 client 
 . 
 path 
 . 
 asset_group 
 ( 
  
 customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
 ) 
  
 end 
  
 end 
  
 # For the list of required assets for a Performance Max campaign, see 
  
 # https://developers.google.com/google-ads/api/docs/performance-max/assets 
  
 # 
  
 # An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
  
 # and providing: 
  
 #   the resource name of the AssetGroup 
  
 #   the resource name of the Asset 
  
 #   the field_type of the Asset in this AssetGroup. 
  
 # 
  
 # To learn more about AssetGroups, see 
  
 # https://developers.google.com/google-ads/api/docs/performance-max/asset-groups 
  
 # Link the previously created multiple text assets. 
  
 # Link the headline assets. 
  
 headline_asset_resource_names 
 . 
 each 
  
 do 
  
 | 
 resource_name 
 | 
  
 operations 
 << 
 client 
 . 
 operation 
 . 
 mutate 
  
 do 
  
 | 
 m 
 | 
  
 m 
 . 
 asset_group_asset_operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
  
 . 
 asset_group_asset 
  
 do 
  
 | 
 aga 
 | 
  
 aga 
 . 
 field_type 
  
 = 
  
 :HEADLINE 
  
 aga 
 . 
 asset_group 
  
 = 
  
 client 
 . 
 path 
 . 
 asset_group 
 ( 
  
 customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
 ) 
  
 aga 
 . 
 asset 
  
 = 
  
 resource_name 
  
 end 
  
 end 
  
 end 
  
 #  Link the description assets. 
  
 description_asset_resource_names 
 . 
 each 
  
 do 
  
 | 
 resource_name 
 | 
  
 operations 
 << 
 client 
 . 
 operation 
 . 
 mutate 
  
 do 
  
 | 
 m 
 | 
  
 m 
 . 
 asset_group_asset_operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
  
 . 
 asset_group_asset 
  
 do 
  
 | 
 aga 
 | 
  
 aga 
 . 
 field_type 
  
 = 
  
 :DESCRIPTION 
  
 aga 
 . 
 asset_group 
  
 = 
  
 client 
 . 
 path 
 . 
 asset_group 
 ( 
  
 customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
 ) 
  
 aga 
 . 
 asset 
  
 = 
  
 resource_name 
  
 end 
  
 end 
  
 end 
  
 # Create and link the long headline text asset. 
  
 operations 
  
 += 
  
 create_and_link_text_asset 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 "Travel the World" 
 , 
  
 :LONG_HEADLINE 
 ) 
  
 # Create and link the business name and logo asset. 
  
 operations 
  
 += 
  
 create_and_link_brand_assets 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 brand_guidelines_enabled 
 , 
  
 "Interplanetary Cruises" 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 "Marketing Logo" 
 ) 
  
 # Create and link the image assets. 
  
 # Create and link the Marketing Image Asset. 
  
 operations 
  
 += 
  
 create_and_link_image_asset 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 "https://gaagl.page.link/Eit5" 
 , 
  
 :MARKETING_IMAGE 
 , 
  
 "Marketing Image" 
 ) 
  
 # Create and link the Square Marketing Image Asset. 
  
 operations 
  
 += 
  
 create_and_link_image_asset 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 :SQUARE_MARKETING_IMAGE 
 , 
  
 "Square Marketing Image" 
 ) 
  
 operations 
 end  
 
 . 
 rb 
  

Perl

 sub 
  
 create_asset_group_operations 
  
 { 
  
 my 
  
 ( 
  
 $customer_id 
 , 
  
 $headline_asset_resource_names 
 , 
  
 $description_asset_resource_names 
 , 
  
 $brand_guidelines_enabled 
  
 ) 
  
 = 
  
 @_ 
 ; 
  
 my 
  
 $operations 
  
 = 
  
 [] 
 ; 
  
 # Create a mutate operation that creates an asset group operation. 
  
 push 
  
 @$operations 
 , 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 MutateOperation 
 - 
>  
 new 
 ({ 
  
 assetGroupOperation 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Services::AssetGroupService:: 
 AssetGroupOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Resources:: 
 AssetGroup 
 - 
> new 
 ({ 
  
 resourceName 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames:: 
 asset_group 
 ( 
  
 $customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
  
 ), 
  
 name 
  
 = 
>  
 "Performance Max asset group #" 
  
 . 
  
 uniqid 
 (), 
  
 campaign 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames:: 
 campaign 
 ( 
  
 $customer_id 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
  
 ), 
  
 finalUrls 
  
 = 
>  
 [ 
 "http://www.example.com" 
 ], 
  
 finalMobileUrls 
  
 = 
>  
 [ 
 "http://www.example.com" 
 ], 
  
 status 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Enums::AssetGroupStatusEnum:: 
 PAUSED 
  
 })})}); 
  
 # For the list of required assets for a Performance Max campaign, see 
  
 # https://developers.google.com/google-ads/api/docs/performance-max/assets. 
  
 # An AssetGroup is linked to an Asset by creating a new AssetGroupAsset 
  
 # and providing: 
  
 # - the resource name of the AssetGroup 
  
 # - the resource name of the Asset 
  
 # - the fieldType of the Asset in this AssetGroup 
  
 # 
  
 # To learn more about AssetGroups, see 
  
 # https://developers.google.com/google-ads/api/docs/performance-max/asset-groups. 
  
 # Link the previously created multiple text assets. 
  
 # Link the headline assets. 
  
 foreach 
  
 my 
  
 $resource_name 
  
 ( 
 @$headline_asset_resource_names 
 ) 
  
 { 
  
 push 
  
 @$operations 
 , 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 MutateOperation 
  
 - 
> new 
 ({ 
  
 assetGroupAssetOperation 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Services::AssetGroupAssetService:: 
 AssetGroupAssetOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Resources:: 
 AssetGroupAsset 
 - 
> new 
 ({ 
  
 asset 
  
 = 
>  
 $resource_name 
 , 
  
 assetGroup 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames:: 
 asset_group 
 ( 
  
 $customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
  
 ), 
  
 fieldType 
  
 = 
>  
 HEADLINE 
  
 })})}); 
  
 } 
  
 # Link the description assets. 
  
 foreach 
  
 my 
  
 $resource_name 
  
 ( 
 @$description_asset_resource_names 
 ) 
  
 { 
  
 push 
  
 @$operations 
 , 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 MutateOperation 
  
 - 
> new 
 ({ 
  
 assetGroupAssetOperation 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Services::AssetGroupAssetService:: 
 AssetGroupAssetOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Resources:: 
 AssetGroupAsset 
 - 
> new 
 ({ 
  
 asset 
  
 = 
>  
 $resource_name 
 , 
  
 assetGroup 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames:: 
 asset_group 
 ( 
  
 $customer_id 
 , 
  
 ASSET_GROUP_TEMPORARY_ID 
  
 ), 
  
 fieldType 
  
 = 
>  
 DESCRIPTION 
  
 })})}); 
  
 } 
  
 # Create and link the long headline text asset. 
  
 push 
  
 @$operations 
 , 
  
 @ 
 { 
 create_and_link_text_asset 
 ( 
 $customer_id 
 , 
  
 "Travel the World" 
 , 
  
 LONG_HEADLINE 
 )}; 
  
 # Create and link the business name and logo asset. 
  
 push 
  
 @$operations 
 , 
  
 @ 
 { 
  
 create_and_link_brand_assets 
 ( 
  
 $customer_id 
 , 
  
 $brand_guidelines_enabled 
 , 
  
 "Interplanetary Cruises" 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 "Marketing Logo" 
  
 )}; 
  
 # Create and link the image assets. 
  
 # Create and link the marketing image asset. 
  
 push 
  
 @$operations 
 , 
  
 @ 
 { 
  
 create_and_link_image_asset 
 ( 
  
 $customer_id 
 , 
  
 "https://gaagl.page.link/Eit5" 
 , 
  
 MARKETING_IMAGE 
 , 
  
 "Marketing Image" 
  
 )}; 
  
 # Create and link the square marketing image asset. 
  
 push 
  
 @$operations 
 , 
  
 @ 
 { 
  
 create_and_link_image_asset 
 ( 
  
 $customer_id 
 , 
  
 "https://gaagl.page.link/bjYi" 
 , 
  
 SQUARE_MARKETING_IMAGE 
 , 
  
 "Square Marketing Image" 
  
 )}; 
  
 return 
  
 $operations 
 ; 
 } 
  
  

Preview ads for asset groups

Once you have created asset groups and linked assets to them, you can generate a shareable preview to show how the ads created from each asset group look.

By passing the asset group IDs to ShareablePreviewService.GenerateShareablePreviews , you can retrieve the URLs of the ad previews to be shared with your users, along with their expiration timestamp.

Multiple asset groups

You can create unique asset groups for different final URLs if the assets are not generic enough to be used across URLs in the domain and you are using URL expansion.

You can also create multiple asset groups for the same final URL if you want to customize your assets by audience. You can also create multiple asset groups per theme.

Create a Mobile Website
View Site in Mobile | Classic
Share by: