Assets in a Performance Max CampaignStay organized with collectionsSave and categorize content based on your preferences.
Page Summary
Performance Max campaigns require a minimum number of different asset types.
Assets in Performance Max campaigns are organized into unique collections called AssetGroups.
Some assets can be automatically created through machine learning in Performance Max campaigns.
Reusing existing assets from other campaign types is possible when upgrading to Performance Max.
Automatically created text assets from page feeds require linking a page feed and ensuring TEXT_ASSET_AUTOMATION is opted in.
Auto-generated video assets can be replaced by uploading your own custom video, and you can opt out of enhanced YouTube video asset generation.
Performance Max campaigns have some unique characteristics regardingassets.
There are a minimum required number of assets of different types.
Assetsare grouped together in a collection called
anAssetGroup, which is unique to Performance Max
campaigns.
Some assets can be generated automatically by machine learning.
Brand guidelines: business name and logo linkage
While most assets in a Performance Max campaign are organized within
asset groups, key assets representing your brand's identity—specificallyBusiness NameandBusiness Logo—are handled differently if brand
guidelines are enabled for your campaign.
These brand guideline assets are linked directly at the campaign level, not at
the Asset Group level. This is done using theCampaignAssetresource. You
link the asset to the campaign, specifying the appropriateAssetFieldType:
defcreate_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 textasset.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]=[]fortextintexts:mutate_operation:MutateOperation=client.get_type("MutateOperation")asset:Asset=mutate_operation.asset_operation.createasset.text_asset.text=textoperations.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]=[]forresultinresponse.mutate_operation_responses:ifresult._pb.HasField("asset_result"):asset_resource_names.append(result.asset_result.resource_name)print_response_details(response)returnasset_resource_names
# Creates multiple text assets and returns the list of resource names.defcreate_multiple_text_assets(client,customer_id,texts)operations=texts.mapdo|text|client.operation.mutatedo|m|m.asset_operation=client.operation.create_resource.assetdo|asset|asset.text_asset=client.resource.text_assetdo|text_asset|text_asset.text=textendendendend# 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.eachdo|result|ifresult.asset_resultasset_resource_names.append(result.asset_result.resource_name)endendprint_response_details(response)asset_resource_namesend
subcreate_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=[];foreachmy$text(@$texts){# Create a mutate operation for a text asset.push@$operations,Google::Ads::GoogleAds::V22::Services::GoogleAdsService::MutateOperation->new({assetOperation=>Google::Ads::GoogleAds::V22::Services::AssetService::AssetOperation->new({create=>Google::Ads::GoogleAds::V22::Resources::Asset->new({textAsset=>Google::Ads::GoogleAds::V22::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=[];foreachmy$response(@{$mutate_google_ads_response->{mutateOperationResponses}}){push@$asset_resource_names,$response->{assetResult}{resourceName};}print_response_details($mutate_google_ads_response);return$asset_resource_names;}
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. For more details on managing these settings,
see theasset automation settings guide.
After you've associated a page feed, make sure theAssetAutomationSettingof typeTEXT_ASSET_AUTOMATIONis set toOPTED_IN.
This is the default setting if you didn't set theAssetAutomationSettingwhen
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 asOPTED-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.
[[["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-12-22 UTC."],[],[]]