Stay organized with collectionsSave and categorize content based on your preferences.
APerformance Max asset groupis made from the images, headlines, descriptions, and videos
you add when youcreateyour 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
Anasset groupis 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 theWEBPAGEcampaign criteria.
AnAssetGroupcan be linked to multipleAssetobjects. AnAssetcan be
linked to multiple asset groups. OneAssetcan have different field types in
differentAssetGroupobjects.
Restrictions:
AssetGroupOperationrequests must be atomic.Partial
failureis not supported.
Asset group resources cannot be modified in abatch
processusingAssetGroupOperation. Instead, use the standardGoogleAdsService.MutatewithAssetGroupServicefor modifying asset group resources in a batch
process.
AssetGroupAssetOperationmay be used within theBatchJobServiceto link
or unlink assets to an asset group.
Link asset groups to assets in Performance Max retail campaigns
You can createAssetGroupobjects in Performance Max retail campaigns without
meeting theminimum asset requirements.
However, attempting to link anAssetto anAssetGroupusing anAssetGroupAssetinanyPerformance Max campaign triggers all asset
requirements to take effect. In other words,AssetGroupobjects in Performance
Max retail campaigns can only exist in two states:
Without any linkedAssetobjects
Meeting allAssetrequirements
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.
defcreate_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 canbe 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 isenabled 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 AssetGroupmutate_operation:MutateOperation=client.get_type("MutateOperation")asset_group:AssetGroup=mutate_operation.asset_group_operation.createasset_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.PAUSEDasset_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.forresource_nameinheadline_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.HEADLINEasset_group_asset.asset_group=asset_group_service.asset_group_path(customer_id,_ASSET_GROUP_TEMPORARY_ID,)asset_group_asset.asset=resource_nameoperations.append(mutate_operation)# Link the description assets.forresource_nameindescription_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_nameoperations.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)returnoperations
# 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.defcreate_asset_group_operation(client,customer_id,headline_asset_resource_names,description_asset_resource_names,brand_guidelines_enabled)operations=[]# Create the AssetGroupoperations<<client.operation.mutatedo|m|m.asset_group_operation=client.operation.create_resource.asset_groupdo|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=:PAUSEDag.resource_name=client.path.asset_group(customer_id,ASSET_GROUP_TEMPORARY_ID)endend# 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.eachdo|resource_name|operations<<client.operation.mutatedo|m|m.asset_group_asset_operation=client.operation.create_resource.asset_group_assetdo|aga|aga.field_type=:HEADLINEaga.asset_group=client.path.asset_group(customer_id,ASSET_GROUP_TEMPORARY_ID)aga.asset=resource_nameendendend# Link the description assets.description_asset_resource_names.eachdo|resource_name|operations<<client.operation.mutatedo|m|m.asset_group_asset_operation=client.operation.create_resource.asset_group_assetdo|aga|aga.field_type=:DESCRIPTIONaga.asset_group=client.path.asset_group(customer_id,ASSET_GROUP_TEMPORARY_ID)aga.asset=resource_nameendendend# 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")operationsend
subcreate_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.foreachmy$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.foreachmy$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;}
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 toShareablePreviewService.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.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-03 UTC."],[[["\u003cp\u003ePerformance Max campaigns utilize asset groups, which are collections of images, logos, headlines, descriptions, and videos, automatically combined by Google Ads for various ad channels.\u003c/p\u003e\n"],["\u003cp\u003eAsset groups are centered around a theme or target audience, and must contain at least one final URL for the conversion path.\u003c/p\u003e\n"],["\u003cp\u003eLinking assets to asset groups involves creating an \u003ccode\u003eAssetGroupAsset\u003c/code\u003e and associating the \u003ccode\u003eAssetGroup\u003c/code\u003e and \u003ccode\u003eAsset\u003c/code\u003e resource names, along with the \u003ccode\u003eAssetFieldType\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eFor non-retail campaigns, asset groups and their minimum required assets must be created together in a single request using bulk mutate requests, while retail campaigns allow initial creation without assets but enforce all requirements upon linking any asset.\u003c/p\u003e\n"],["\u003cp\u003eThe provided code snippets demonstrate creating asset groups, linking various assets (text and image), and compiling all operations into a single list for efficient Performance Max campaign setup.\u003c/p\u003e\n"]]],[],null,[]]