Portfolio and Standard Bidding Strategies

  • Portfolio bidding strategies can be shared among multiple campaigns, while standard bidding strategies are used by a single campaign.

  • Portfolio bidding strategies are created as standalone objects, whereas standard strategies are set directly on a campaign.

  • To use a portfolio bidding strategy, you can either use an existing BiddingStrategy or create a new one with MutateBiddingStrategies .

  • Campaigns are configured to use a portfolio bidding strategy by setting the campaign's bidding_strategy field to the strategy's resource name.

  • To use a standard bidding strategy, you embed the bidding scheme directly on the campaign by setting the campaign_bidding_strategy union field and do not set the bidding_strategy field.

Portfolio bidding strategiesare automated, goal-driven bidding strategies that can be shared among multiple campaigns, whereas standard bidding strategiesare not shared and can only be used by a single campaign. The API supports creating both types of strategies. Portfolio bidding strategies are created as standalone objects in an account, whereas standard strategies are managed by setting appropriate fields on a campaign.

Portfolio bidding strategies

To use a portfolio bidding strategy with your campaign, you have two options:

  1. Use an existing BiddingStrategy .
  2. Use MutateBiddingStrategies to create a new one with the fields name and scheme set. As an example, for a TARGET_SPEND bidding strategy, set the field target_spend with a new object typed as TargetSpend .

Once you've chosen a BiddingStrategy , configure your campaign to use it by setting the campaign's bidding_strategy field to its resource_name .

The following example demonstrates how to create a new portfolio TARGET_SPEND bidding strategy for a new campaign.

Java

 private 
  
 String 
  
 createBiddingStrategy 
 ( 
 GoogleAdsClient 
  
 googleAdsClient 
 , 
  
 long 
  
 customerId 
 ) 
  
 { 
  
 try 
  
 ( 
 BiddingStrategyServiceClient 
  
 biddingStrategyServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createBiddingStrategyServiceClient 
 ()) 
  
 { 
  
 // Creates a portfolio bidding strategy. 
  
 TargetSpend 
  
 targetSpend 
  
 = 
  
 TargetSpend 
 . 
 newBuilder 
 (). 
 setCpcBidCeilingMicros 
 ( 
 2_000_000L 
 ). 
 build 
 (); 
  
 BiddingStrategy 
  
 portfolioBiddingStrategy 
  
 = 
  
 BiddingStrategy 
 . 
 newBuilder 
 () 
  
 . 
 setName 
 ( 
 "Maximize Clicks #" 
  
 + 
  
 getPrintableDateTime 
 ()) 
  
 . 
 setTargetSpend 
 ( 
 targetSpend 
 ) 
  
 . 
 build 
 (); 
  
 // Constructs an operation that will create a portfolio bidding strategy. 
  
 BiddingStrategyOperation 
  
 operation 
  
 = 
  
 BiddingStrategyOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 portfolioBiddingStrategy 
 ). 
 build 
 (); 
  
 // Sends the operation in a mutate request. 
  
 MutateBiddingStrategiesResponse 
  
 response 
  
 = 
  
 biddingStrategyServiceClient 
 . 
 mutateBiddingStrategies 
 ( 
  
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 Lists 
 . 
 newArrayList 
 ( 
 operation 
 )); 
  
 MutateBiddingStrategyResult 
  
 mutateBiddingStrategyResult 
  
 = 
  
 response 
 . 
 getResults 
 ( 
 0 
 ); 
  
 // Prints the resource name of the created object. 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "Created portfolio bidding strategy with resource name: '%s'.%n" 
 , 
  
 mutateBiddingStrategyResult 
 . 
 getResourceName 
 ()); 
  
 return 
  
 mutateBiddingStrategyResult 
 . 
 getResourceName 
 (); 
  
 } 
 } 
  
  

C#

 private 
  
 string 
  
 CreatePortfolioBiddingStrategy 
 ( 
 GoogleAdsClient 
  
 client 
 , 
  
 long 
  
 customerId 
 , 
  
 string 
  
 name 
 , 
  
 long 
  
 bidCeiling 
 ) 
 { 
  
 // Get the BiddingStrategyService. 
  
 BiddingStrategyServiceClient 
  
 biddingStrategyService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V22 
 . 
 BiddingStrategyService 
 ); 
  
 // Create a portfolio bidding strategy. 
  
 BiddingStrategy 
  
 biddingStrategy 
  
 = 
  
 new 
  
 BiddingStrategy 
 () 
  
 { 
  
 Name 
  
 = 
  
 name 
 , 
  
 TargetSpend 
  
 = 
  
 new 
  
 TargetSpend 
 () 
  
 { 
  
 CpcBidCeilingMicros 
  
 = 
  
 bidCeiling 
 , 
  
 } 
  
 }; 
  
 // Create operation. 
  
 BiddingStrategyOperation 
  
 biddingOperation 
  
 = 
  
 new 
  
 BiddingStrategyOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 biddingStrategy 
  
 }; 
  
 // Create the portfolio bidding strategy. 
  
 MutateBiddingStrategiesResponse 
  
 biddingResponse 
  
 = 
  
 biddingStrategyService 
 . 
 MutateBiddingStrategies 
 ( 
  
 customerId 
 . 
 ToString 
 (), 
  
 new 
  
 BiddingStrategyOperation 
 [] 
  
 { 
  
 biddingOperation 
  
 }); 
  
 return 
  
 biddingResponse 
 . 
 Results 
 [ 
 0 
 ]. 
 ResourceName 
 ; 
 } 
  
  

PHP

 private static function createBiddingStrategy(GoogleAdsClient $googleAdsClient, int $customerId) 
 { 
 // Creates a portfolio bidding strategy. 
 $portfolioBiddingStrategy = new BiddingStrategy([ 
 'name' => 'Maximize Clicks #' . Helper::getPrintableDatetime(), 
 'target_spend' => new TargetSpend([ 
 'cpc_bid_ceiling_micros' => 2000000 
 ]) 
 ]); 
 // Constructs an operation that will create a portfolio bidding strategy. 
 $biddingStrategyOperation = new BiddingStrategyOperation(); 
 $biddingStrategyOperation->setCreate($portfolioBiddingStrategy); 
 // Issues a mutate request to create the bidding strategy. 
 $biddingStrategyServiceClient = $googleAdsClient->getBiddingStrategyServiceClient(); 
 $response = $biddingStrategyServiceClient->mutateBiddingStrategies( 
 MutateBiddingStrategiesRequest::build($customerId, [$biddingStrategyOperation]) 
 ); 
 /** @var BiddingStrategy $addedBiddingStrategy */ 
 $addedBiddingStrategy = $response->getResults()[0]; 
 // Prints out the resource name of the created bidding strategy. 
 printf( 
 "Created portfolio bidding strategy with resource name: '%s'.%s", 
 $addedBiddingStrategy->getResourceName(), 
 PHP_EOL 
 ); 
 return $addedBiddingStrategy->getResourceName(); 
 }  
 

Python

 # Create a portfolio bidding strategy. 
 bidding_strategy_operation 
 : 
 BiddingStrategyOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "BiddingStrategyOperation" 
 ) 
 bidding_strategy 
 : 
 BiddingStrategy 
 = 
 bidding_strategy_operation 
 . 
 create 
 bidding_strategy 
 . 
 name 
 = 
 f 
 "Enhanced CPC 
 { 
 uuid 
 . 
 uuid4 
 () 
 } 
 " 
 target_spend 
 : 
 TargetSpend 
 = 
 bidding_strategy 
 . 
 target_spend 
 target_spend 
 . 
 cpc_bid_ceiling_micros 
 = 
 2000000 
 # Add portfolio bidding strategy. 
 try 
 : 
 bidding_strategy_response 
 : 
 MutateBiddingStrategiesResponse 
 = 
 ( 
 bidding_strategy_service 
 . 
 mutate_bidding_strategies 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 operations 
 = 
 [ 
 bidding_strategy_operation 
 ] 
 ) 
 ) 
 bidding_strategy_id 
 : 
 str 
 = 
 bidding_strategy_response 
 . 
 results 
 [ 
 0 
 ] 
 . 
 resource_name 
 print 
 ( 
 f 
 'Created portfolio bidding strategy " 
 { 
 bidding_strategy_id 
 } 
 ".' 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
  

Ruby

 # Create a portfolio bidding strategy. 
 bidding_strategy 
  
 = 
  
 client 
 . 
 resource 
 . 
 bidding_strategy 
  
 do 
  
 | 
 bs 
 | 
  
 bs 
 . 
 name 
  
 = 
  
 "Enhanced CPC # 
 #{ 
 ( 
 Time 
 . 
 new 
 . 
 to_f 
  
 * 
  
 1000 
 ) 
 . 
 to_i 
 } 
 " 
  
 bs 
 . 
 target_spend 
  
 = 
  
 client 
 . 
 resource 
 . 
 target_spend 
  
 do 
  
 | 
 ts 
 | 
  
 ts 
 . 
 cpc_bid_ceiling_micros 
  
 = 
  
 2_000_000 
  
 end 
 end 
 operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 bidding_strategy 
 ( 
 bidding_strategy 
 ) 
 response 
  
 = 
  
 client 
 . 
 service 
 . 
 bidding_strategy 
 . 
 mutate_bidding_strategies 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 operations 
 : 
  
 [ 
 operation 
 ] 
 , 
 ) 
 bidding_id 
  
 = 
  
 response 
 . 
 results 
 . 
 first 
 . 
 resource_name 
 puts 
  
 "Portfolio bidding strategy 
 #{ 
 bidding_id 
 } 
 was created" 
  
  

Perl

 sub 
  
 create_bidding_strategy 
  
 { 
  
 my 
  
 ( 
 $api_client 
 , 
  
 $customer_id 
 ) 
  
 = 
  
 @_ 
 ; 
  
 # Create a portfolio bidding strategy. 
  
 my 
  
 $portfolio_bidding_strategy 
  
 = 
  
 Google::Ads::GoogleAds::V22::Resources:: 
 BiddingStrategy 
 - 
> new 
 ({ 
  
 name 
  
 = 
>  
 "Maximize Clicks #" 
  
 . 
  
 uniqid 
 (), 
  
 targetSpend 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Common:: 
 TargetSpend 
 - 
> new 
 ({ 
  
 cpcBidCeilingMicros 
  
 = 
>  
 2000000 
  
 } 
  
 ), 
  
 }); 
  
 # Create a bidding strategy operation. 
  
 my 
  
 $bidding_strategy_operation 
  
 = 
  
 Google::Ads::GoogleAds::V22::Services::BiddingStrategyService:: 
 BiddingStrategyOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 $portfolio_bidding_strategy 
  
 }); 
  
 # Add the bidding strategy. 
  
 my 
  
 $bidding_strategies_response 
  
 = 
  
 $api_client 
 - 
> BiddingStrategyService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 operations 
  
 = 
>  
 [ 
 $bidding_strategy_operation 
 ]}); 
  
 my 
  
 $bidding_strategy_resource_name 
  
 = 
  
 $bidding_strategies_response 
 - 
> { 
 results 
 }[ 
 0 
 ]{ 
 resourceName 
 }; 
  
 printf 
  
 "Created portfolio bidding strategy with resource name: '%s'.\n" 
 , 
  
 $bidding_strategy_resource_name 
 ; 
  
 return 
  
 $bidding_strategy_resource_name 
 ; 
 } 
  
  

Java

 Campaign 
  
 campaign 
  
 = 
  
 Campaign 
 . 
 newBuilder 
 () 
  
 . 
 setName 
 ( 
 "Interplanetary Cruise #" 
  
 + 
  
 getPrintableDateTime 
 ()) 
  
 . 
 setStatus 
 ( 
 CampaignStatus 
 . 
 PAUSED 
 ) 
  
 . 
 setCampaignBudget 
 ( 
 campaignBudgetResourceName 
 ) 
  
 . 
 setBiddingStrategy 
 ( 
 biddingStrategyResourceName 
 ) 
  
 . 
 setAdvertisingChannelType 
 ( 
 AdvertisingChannelType 
 . 
 SEARCH 
 ) 
  
 . 
 setNetworkSettings 
 ( 
 networkSettings 
 ) 
  
 // Declares whether this campaign serves political ads targeting the EU. 
  
 . 
 setContainsEuPoliticalAdvertising 
 ( 
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 ) 
  
 . 
 build 
 (); 
  
  

C#

 // Create the campaign. 
 Campaign 
  
 campaign 
  
 = 
  
 new 
  
 Campaign 
 () 
 { 
  
 Name 
  
 = 
  
 name 
 , 
  
 AdvertisingChannelType 
  
 = 
  
 AdvertisingChannelType 
 . 
 Search 
 , 
  
 // Recommendation: Set the campaign to PAUSED when creating it to prevent 
  
 // the ads from immediately serving. Set to ENABLED once you've added 
  
 // targeting and the ads are ready to serve. 
  
 Status 
  
 = 
  
 CampaignStatus 
 . 
 Paused 
 , 
  
 // Set the campaign budget. 
  
 CampaignBudget 
  
 = 
  
 campaignBudgetResourceName 
 , 
  
 // Set bidding strategy (required). 
  
 BiddingStrategy 
  
 = 
  
 biddingStrategyResourceName 
 , 
  
 // Set the campaign network options. 
  
 NetworkSettings 
  
 = 
  
 new 
  
 NetworkSettings 
 () 
  
 { 
  
 TargetGoogleSearch 
  
 = 
  
 true 
 , 
  
 TargetSearchNetwork 
  
 = 
  
 true 
 , 
  
 TargetContentNetwork 
  
 = 
  
 true 
 , 
  
 TargetPartnerSearchNetwork 
  
 = 
  
 false 
  
 }, 
  
 // Declare whether or not this campaign contains political ads targeting the EU. 
  
 ContainsEuPoliticalAdvertising 
  
 = 
  
 EuPoliticalAdvertisingStatus 
 . 
 DoesNotContainEuPoliticalAdvertising 
 , 
 }; 
  
  

PHP

 // Creates a Search campaign. 
 $campaign = new Campaign([ 
 'name' => 'Interplanetary Cruise #' . Helper::getPrintableDatetime(), 
 'advertising_channel_type' => AdvertisingChannelType::SEARCH, 
 // Recommendation: Set the campaign to PAUSED when creating it to prevent 
 // the ads from immediately serving. Set to ENABLED once you've added 
 // targeting and the ads are ready to serve. 
 'status' => CampaignStatus::PAUSED, 
 // Configures the campaign network options. 
 'network_settings' => new NetworkSettings([ 
 'target_google_search' => true, 
 'target_search_network' => true, 
 'target_content_network' => true, 
 ]), 
 // Sets the bidding strategy and budget. 
 'bidding_strategy' => $biddingStrategyResourceName, 
 'campaign_budget' => $campaignBudgetResourceName, 
 // Declare whether or not this campaign serves political ads targeting the EU. 
 'contains_eu_political_advertising' = 
> EuPoliticalAdvertisingStatus::DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 ]);  
 

Python

 # Create campaign. 
 campaign_operation 
 : 
 CampaignOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "CampaignOperation" 
 ) 
 campaign 
 : 
 Campaign 
 = 
 campaign_operation 
 . 
 create 
 campaign 
 . 
 name 
 = 
 f 
 "Interplanetary Cruise 
 { 
 uuid 
 . 
 uuid4 
 () 
 } 
 " 
 campaign 
 . 
 advertising_channel_type 
 = 
 ( 
 client 
 . 
 enums 
 . 
 AdvertisingChannelTypeEnum 
 . 
 SEARCH 
 ) 
 # Recommendation: Set the campaign to PAUSED when creating it to prevent the 
 # ads from immediately serving. Set to ENABLED once you've added targeting 
 # and the ads are ready to serve. 
 campaign 
 . 
 status 
 = 
 client 
 . 
 enums 
 . 
 CampaignStatusEnum 
 . 
 PAUSED 
 # Set the bidding strategy and budget. 
 campaign 
 . 
 bidding_strategy 
 = 
 bidding_strategy_id 
 campaign 
 . 
 manual_cpc 
 . 
 enhanced_cpc_enabled 
 = 
 True 
 campaign 
 . 
 campaign_budget 
 = 
 campaign_budget_id 
 # Set the campaign network options. 
 campaign 
 . 
 network_settings 
 . 
 target_google_search 
 = 
 True 
 campaign 
 . 
 network_settings 
 . 
 target_search_network 
 = 
 True 
 campaign 
 . 
 network_settings 
 . 
 target_content_network 
 = 
 False 
 campaign 
 . 
 network_settings 
 . 
 target_partner_search_network 
 = 
 False 
 campaign 
 . 
 contains_eu_political_advertising 
 = 
 ( 
 client 
 . 
 enums 
 . 
 EuPoliticalAdvertisingStatusEnum 
 . 
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 ) 
  

Ruby

 # Create campaigns. 
 campaigns 
  
 = 
  
 2 
 . 
 times 
 . 
 map 
  
 do 
  
 | 
 i 
 | 
  
 client 
 . 
 resource 
 . 
 campaign 
  
 do 
  
 | 
 c 
 | 
  
 c 
 . 
 name 
  
 = 
  
 "Interplanetary Cruise # 
 #{ 
 ( 
 Time 
 . 
 new 
 . 
 to_f 
  
 * 
  
 1000 
 ) 
 . 
 to_i 
  
 + 
  
 i 
 } 
 " 
  
 c 
 . 
 status 
  
 = 
  
 :PAUSED 
  
 c 
 . 
 bidding_strategy 
  
 = 
  
 bidding_id 
  
 c 
 . 
 campaign_budget 
  
 = 
  
 budget_id 
  
 c 
 . 
 advertising_channel_type 
  
 = 
  
 :SEARCH 
  
 c 
 . 
 network_settings 
  
 = 
  
 client 
 . 
 resource 
 . 
 network_settings 
  
 do 
  
 | 
 ns 
 | 
  
 ns 
 . 
 target_google_search 
  
 = 
  
 true 
  
 ns 
 . 
 target_search_network 
  
 = 
  
 true 
  
 ns 
 . 
 target_content_network 
  
 = 
  
 false 
  
 ns 
 . 
 target_partner_search_network 
  
 = 
  
 false 
  
 c 
 . 
 contains_eu_political_advertising 
  
 = 
  
 :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
  
 end 
  
 end 
 end  
 
 . 
 rb 
  

Perl

 # Create a search campaign. 
 my 
  
 $campaign 
  
 = 
  
 Google::Ads::GoogleAds::V22::Resources:: 
 Campaign 
 - 
> new 
 ({ 
  
 name 
  
 = 
>  
 "Interplanetary Cruise #" 
  
 . 
  
 uniqid 
 (), 
  
 advertisingChannelType 
  
 = 
>  
 SEARCH 
 , 
  
 # Recommendation: Set the campaign to PAUSED when creating it to stop 
  
 # the ads from immediately serving. Set to ENABLED once you've added 
  
 # targeting and the ads are ready to serve. 
  
 status 
  
 = 
>  
 PAUSED 
 , 
  
 # Configures the campaign network options. 
  
 networkSettings 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Resources:: 
 NetworkSettings 
 - 
> new 
 ({ 
  
 targetGoogleSearch 
  
 = 
>  
 "true" 
 , 
  
 targetSearchNetwork 
  
 = 
>  
 "true" 
 , 
  
 targetContentNetwork 
  
 = 
>  
 "true" 
  
 } 
  
 ), 
  
 # Set the bidding strategy and budget. 
  
 biddingStrategy 
  
 = 
>  
 $bidding_strategy_resource_name 
 , 
  
 campaignBudget 
  
 = 
>  
 $campaign_budget_resource_name 
 , 
  
 # Declare whether or not this campaign serves political ads targeting the EU. 
  
 # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and 
  
 # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING. 
  
 containsEuPoliticalAdvertising 
  
 = 
>  
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
  
 }); 
  
  

An existing portfolio bidding strategy can be linked to a shared budget. Once the two are associated, the shared budget will always be associated with the campaigns that are part of the bidding strategy.

You can only link together a portfolio bidding strategy and an existing shared budget—you cannot create one of the two and immediately associate it with the other.

To associate a BiddingStrategy with a CampaignBudget , send a MutateOperation that updates the two entities, setting the aligned_budget_id field in the bidding strategy to the ID of the shared budget and the aligned_bidding_strategy field in the campaign budget to the ID of the portfolio bidding strategy.

Standard bidding strategies

To use a standard bidding strategy with your campaign, set the campaign as follows:

This example demonstrates how to set a standard MAXIMIZE_CONVERSION_VALUE bidding strategy when creating a new campaign:

Java

 /** Creates a MutateOperation that creates a new Performance Max campaign. */ 
 private 
  
 MutateOperation 
  
 createPerformanceMaxCampaignOperation 
 ( 
  
 long 
  
 customerId 
 , 
  
 boolean 
  
 brandGuidelinesEnabled 
 ) 
  
 { 
  
 Campaign 
  
 performanceMaxCampaign 
  
 = 
  
 Campaign 
 . 
 newBuilder 
 () 
  
 . 
 setName 
 ( 
 "Performance Max campaign #" 
  
 + 
  
 getPrintableDateTime 
 ()) 
  
 // Sets the campaign status as PAUSED. The campaign is the only entity in 
  
 // the mutate request that should have its status set. 
  
 . 
 setStatus 
 ( 
 CampaignStatus 
 . 
 PAUSED 
 ) 
  
 // All Performance Max campaigns have an advertising_channel_type of 
  
 // PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. 
  
 . 
 setAdvertisingChannelType 
 ( 
 AdvertisingChannelType 
 . 
 PERFORMANCE_MAX 
 ) 
  
 // Bidding strategy must be set directly on the campaign. 
  
 // Setting a portfolio bidding strategy by resource name is not supported. 
  
 // Max Conversion and Maximize Conversion Value are the only strategies 
  
 // supported for Performance Max campaigns. 
  
 // An optional ROAS (Return on Advertising Spend) can be set for 
  
 // maximize_conversion_value. The ROAS value must be specified as a ratio in 
  
 // the API. It is calculated by dividing "total value" by "total spend". 
  
 // For more information on Maximize Conversion Value, see the support 
  
 // article: http://support.google.com/google-ads/answer/7684216. 
  
 // A targetRoas of 3.5 corresponds to a 350% return on ad spend. 
  
 . 
 setMaximizeConversionValue 
 ( 
  
 MaximizeConversionValue 
 . 
 newBuilder 
 (). 
 setTargetRoas 
 ( 
 3.5 
 ). 
 build 
 ()) 
  
 // Sets if the campaign is enabled for brand guidelines. For more information on brand 
  
 // guidelines, see https://support.google.com/google-ads/answer/14934472. 
  
 . 
 setBrandGuidelinesEnabled 
 ( 
 brandGuidelinesEnabled 
 ) 
  
 // Assigns the resource name with a temporary ID. 
  
 . 
 setResourceName 
 ( 
  
 ResourceNames 
 . 
 campaign 
 ( 
 customerId 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 )) 
  
 // Sets the budget using the given budget resource name. 
  
 . 
 setCampaignBudget 
 ( 
 ResourceNames 
 . 
 campaignBudget 
 ( 
 customerId 
 , 
  
 BUDGET_TEMPORARY_ID 
 )) 
  
 // Declares whether this campaign serves political ads targeting the EU. 
  
 . 
 setContainsEuPoliticalAdvertising 
 ( 
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 ) 
  
 // Optional fields. 
  
 . 
 setStartDate 
 ( 
 new 
  
 DateTime 
 (). 
 plusDays 
 ( 
 1 
 ). 
 toString 
 ( 
 "yyyyMMdd" 
 )) 
  
 . 
 setEndDate 
 ( 
 new 
  
 DateTime 
 (). 
 plusDays 
 ( 
 365 
 ). 
 toString 
 ( 
 "yyyyMMdd" 
 )) 
  
 // Configures the optional opt-in/out status for asset automation settings. 
  
 . 
 addAllAssetAutomationSettings 
 ( 
 ImmutableList 
 . 
 of 
 ( 
  
 AssetAutomationSetting 
 . 
 newBuilder 
 () 
  
 . 
 setAssetAutomationType 
 ( 
 AssetAutomationType 
 . 
 GENERATE_IMAGE_EXTRACTION 
 ) 
  
 . 
 setAssetAutomationStatus 
 ( 
 AssetAutomationStatus 
 . 
 OPTED_IN 
 ). 
 build 
 (), 
  
 AssetAutomationSetting 
 . 
 newBuilder 
 () 
  
 . 
 setAssetAutomationType 
 ( 
  
 AssetAutomationType 
 . 
 FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION 
 ) 
  
 . 
 setAssetAutomationStatus 
 ( 
 AssetAutomationStatus 
 . 
 OPTED_IN 
 ). 
 build 
 (), 
  
 AssetAutomationSetting 
 . 
 newBuilder 
 () 
  
 . 
 setAssetAutomationType 
 ( 
 AssetAutomationType 
 . 
 TEXT_ASSET_AUTOMATION 
 ) 
  
 . 
 setAssetAutomationStatus 
 ( 
 AssetAutomationStatus 
 . 
 OPTED_IN 
 ). 
 build 
 (), 
  
 AssetAutomationSetting 
 . 
 newBuilder 
 () 
  
 . 
 setAssetAutomationType 
 ( 
 AssetAutomationType 
 . 
 GENERATE_ENHANCED_YOUTUBE_VIDEOS 
 ) 
  
 . 
 setAssetAutomationStatus 
 ( 
 AssetAutomationStatus 
 . 
 OPTED_IN 
 ). 
 build 
 (), 
  
 AssetAutomationSetting 
 . 
 newBuilder 
 () 
  
 . 
 setAssetAutomationType 
 ( 
 AssetAutomationType 
 . 
 GENERATE_IMAGE_ENHANCEMENT 
 ) 
  
 . 
 setAssetAutomationStatus 
 ( 
 AssetAutomationStatus 
 . 
 OPTED_IN 
 ). 
 build 
 ())) 
  
 . 
 build 
 (); 
  
 return 
  
 MutateOperation 
 . 
 newBuilder 
 () 
  
 . 
 setCampaignOperation 
 ( 
  
 CampaignOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 performanceMaxCampaign 
 ). 
 build 
 ()) 
  
 . 
 build 
 (); 
 } 
  
  

C#

 /// Creates a MutateOperation that creates a new Performance Max campaign. 
 /// <param name="campaignResourceName">The campaign resource name.</param> 
 /// <param name="campaignBudgetResourceName">The campaign budget resource name.</param> 
 /// <param name="brandGuidelinesEnabled">Whether or not to enable brand guidelines.</param> 
 /// <returns>A MutateOperations that will create this new campaign.</returns> 
 private 
  
 MutateOperation 
  
 CreatePerformanceMaxCampaignOperation 
 ( 
  
 string 
  
 campaignResourceName 
 , 
  
 string 
  
 campaignBudgetResourceName 
 , 
  
 bool 
  
 brandGuidelinesEnabled 
 ) 
 { 
  
 Campaign 
  
 campaign 
  
 = 
  
 new 
  
 Campaign 
 () 
  
 { 
  
 Name 
  
 = 
  
 "Performance Max campaign #" 
  
 + 
  
 ExampleUtilities 
 . 
 GetRandomString 
 (), 
  
 // Set the campaign status as PAUSED. The campaign is the only entity in 
  
 // the mutate request that should have its status set. 
  
 Status 
  
 = 
  
 CampaignStatus 
 . 
 Paused 
 , 
  
 // All Performance Max campaigns have an AdvertisingChannelType of 
  
 // PerformanceMax. The AdvertisingChannelSubType should not be set. 
  
 AdvertisingChannelType 
  
 = 
  
 AdvertisingChannelType 
 . 
 PerformanceMax 
 , 
  
 // Bidding strategy must be set directly on the campaign. Setting a 
  
 // portfolio bidding strategy by resource name is not supported. Max 
  
 // Conversion and Maximize Conversion Value are the only strategies 
  
 // supported for Performance Max campaigns. BiddingStrategyType is 
  
 // read-only and cannot be set by the API. An optional ROAS (Return on 
  
 // Advertising Spend) can be set to enable the MaximizeConversionValue 
  
 // bidding strategy. The ROAS value must be specified as a ratio in the API. 
  
 // It is calculated by dividing "total value" by "total spend". 
  
 // 
  
 // For more information on Maximize Conversion Value, see the support 
  
 // article: 
  
 // http://support.google.com/google-ads/answer/7684216. 
  
 // 
  
 // A target_roas of 3.5 corresponds to a 350% return on ad spend. 
  
 MaximizeConversionValue 
  
 = 
  
 new 
  
 MaximizeConversionValue 
 () 
  
 { 
  
 TargetRoas 
  
 = 
  
 3.5 
  
 }, 
  
 // Use the temporary resource name created earlier 
  
 ResourceName 
  
 = 
  
 campaignResourceName 
 , 
  
 // Set the budget using the given budget resource name. 
  
 CampaignBudget 
  
 = 
  
 campaignBudgetResourceName 
 , 
  
 // Set if the campaign is enabled for brand guidelines. For more information 
  
 // on brand guidelines, see https://support.google.com/google-ads/answer/14934472. 
  
 BrandGuidelinesEnabled 
  
 = 
  
 brandGuidelinesEnabled 
 , 
  
 // Declare whether or not this campaign contains political ads targeting the EU. 
  
 ContainsEuPoliticalAdvertising 
  
 = 
  
 EuPoliticalAdvertisingStatus 
 . 
 DoesNotContainEuPoliticalAdvertising 
 , 
  
 // Optional fields 
  
 StartDate 
  
 = 
  
 DateTime 
 . 
 Now 
 . 
 AddDays 
 ( 
 1 
 ). 
 ToString 
 ( 
 "yyyyMMdd" 
 ), 
  
 EndDate 
  
 = 
  
 DateTime 
 . 
 Now 
 . 
 AddDays 
 ( 
 365 
 ). 
 ToString 
 ( 
 "yyyyMMdd" 
 ) 
  
 }; 
  
 campaign 
 . 
 AssetAutomationSettings 
 . 
 AddRange 
 ( 
 new 
 []{ 
  
 new 
  
 Campaign 
 . 
 Types 
 . 
 AssetAutomationSetting 
  
 { 
  
 AssetAutomationType 
  
 = 
  
 AssetAutomationType 
 . 
 GenerateImageExtraction 
 , 
  
 AssetAutomationStatus 
  
 = 
  
 AssetAutomationStatus 
 . 
 OptedIn 
  
 }, 
  
 new 
  
 Campaign 
 . 
 Types 
 . 
 AssetAutomationSetting 
  
 { 
  
 AssetAutomationType 
  
 = 
  
 AssetAutomationType 
 . 
 FinalUrlExpansionTextAssetAutomation 
 , 
  
 AssetAutomationStatus 
  
 = 
  
 AssetAutomationStatus 
 . 
 OptedIn 
  
 }, 
  
 new 
  
 Campaign 
 . 
 Types 
 . 
 AssetAutomationSetting 
  
 { 
  
 AssetAutomationType 
  
 = 
  
 AssetAutomationType 
 . 
 TextAssetAutomation 
 , 
  
 AssetAutomationStatus 
  
 = 
  
 AssetAutomationStatus 
 . 
 OptedIn 
  
 }, 
  
 new 
  
 Campaign 
 . 
 Types 
 . 
 AssetAutomationSetting 
  
 { 
  
 AssetAutomationType 
  
 = 
  
 AssetAutomationType 
 . 
 GenerateEnhancedYoutubeVideos 
 , 
  
 AssetAutomationStatus 
  
 = 
  
 AssetAutomationStatus 
 . 
 OptedIn 
  
 }, 
  
 new 
  
 Campaign 
 . 
 Types 
 . 
 AssetAutomationSetting 
  
 { 
  
 AssetAutomationType 
  
 = 
  
 AssetAutomationType 
 . 
 GenerateImageEnhancement 
 , 
  
 AssetAutomationStatus 
  
 = 
  
 AssetAutomationStatus 
 . 
 OptedIn 
  
 }, 
  
 }); 
  
 MutateOperation 
  
 operation 
  
 = 
  
 new 
  
 MutateOperation 
 () 
  
 { 
  
 CampaignOperation 
  
 = 
  
 new 
  
 CampaignOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 campaign 
  
 } 
  
 }; 
  
 return 
  
 operation 
 ; 
 } 
  
  

PHP

 private static function createPerformanceMaxCampaignOperation( 
 int $customerId, 
 bool $brandGuidelinesEnabled 
 ): MutateOperation { 
 // Creates a mutate operation that creates a campaign operation. 
 return new MutateOperation([ 
 'campaign_operation' => new CampaignOperation([ 
 'create' => new Campaign([ 
 'name' => 'Performance Max campaign #' . Helper::getPrintableDatetime(), 
 // Assigns the resource name with a temporary ID. 
 'resource_name' => ResourceNames::forCampaign( 
 $customerId, 
 self::PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ), 
 // Sets the budget using the given budget resource name. 
 'campaign_budget' => ResourceNames::forCampaignBudget( 
 $customerId, 
 self::BUDGET_TEMPORARY_ID 
 ), 
 // The campaign is the only entity in the mutate request that should have its 
 // status set. 
 // Recommendation: Set the campaign to PAUSED when creating it to prevent 
 // the ads from immediately serving. 
 'status' => CampaignStatus::PAUSED, 
 // All Performance Max campaigns have an advertising_channel_type of 
 // PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. 
 'advertising_channel_type' => AdvertisingChannelType::PERFORMANCE_MAX, 
 // Bidding strategy must be set directly on the campaign. 
 // Setting a portfolio bidding strategy by resource name is not supported. 
 // Max Conversion and Maximize Conversion Value are the only strategies 
 // supported for Performance Max campaigns. 
 // An optional ROAS (Return on Advertising Spend) can be set for 
 // maximize_conversion_value. The ROAS value must be specified as a ratio in 
 // the API. It is calculated by dividing "total value" by "total spend". 
 // For more information on Maximize Conversion Value, see the support 
 // article: http://support.google.com/google-ads/answer/7684216. 
 // A target_roas of 3.5 corresponds to a 350% return on ad spend. 
 'maximize_conversion_value' => new MaximizeConversionValue([ 
 'target_roas' => 3.5 
 ]), 
 'asset_automation_settings' => [ 
 new AssetAutomationSetting([ 
 'asset_automation_type' => AssetAutomationType::TEXT_ASSET_AUTOMATION, 
 'asset_automation_status' => AssetAutomationStatus::OPTED_IN 
 ]), 
 new AssetAutomationSetting([ 
 'asset_automation_type' => AssetAutomationType::URL_EXPANSION, 
 'asset_automation_status' => AssetAutomationStatus::OPTED_IN 
 ]) 
 ], 
 // Sets if the campaign is enabled for brand guidelines. For more information 
 // on brand guidelines, see 
 // https://support.google.com/google-ads/answer/14934472. 
 'brand_guidelines_enabled' => $brandGuidelinesEnabled, 
 // Declare whether or not this campaign serves political ads targeting the EU. 
 'contains_eu_political_advertising' = 
> EuPoliticalAdvertisingStatus::DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING, 
 // Optional fields. 
 'start_date' => date('Ymd', strtotime('+1 day')), 
 'end_date' => date('Ymd', strtotime('+365 days')) 
 ]) 
 ]) 
 ]); 
 }  
 

Python

 def 
  
 create_performance_max_campaign_operation 
 ( 
 client 
 : 
 GoogleAdsClient 
 , 
 customer_id 
 : 
 str 
 , 
 brand_guidelines_enabled 
 : 
 bool 
 , 
 ) 
 - 
> MutateOperation 
 : 
  
 """Creates a MutateOperation that creates a new Performance Max campaign. 
 A temporary ID will be assigned to this campaign 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. 
 brand_guidelines_enabled: a boolean value indicating if the campaign is 
 enabled for brand guidelines. 
 Returns: 
 a MutateOperation that creates a campaign. 
 """ 
 mutate_operation 
 : 
 MutateOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "MutateOperation" 
 ) 
 campaign 
 : 
 Campaign 
 = 
 mutate_operation 
 . 
 campaign_operation 
 . 
 create 
 campaign 
 . 
 name 
 = 
 f 
 "Performance Max campaign # 
 { 
 uuid4 
 () 
 } 
 " 
 # Set the campaign status as PAUSED. The campaign is the only entity in 
 # the mutate request that should have its status set. 
 campaign 
 . 
 status 
 = 
 client 
 . 
 enums 
 . 
 CampaignStatusEnum 
 . 
 PAUSED 
 # All Performance Max campaigns have an advertising_channel_type of 
 # PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. 
 campaign 
 . 
 advertising_channel_type 
 = 
 ( 
 client 
 . 
 enums 
 . 
 AdvertisingChannelTypeEnum 
 . 
 PERFORMANCE_MAX 
 ) 
 # Bidding strategy must be set directly on the campaign. 
 # Setting a portfolio bidding strategy by resource name is not supported. 
 # Max Conversion and Maximize Conversion Value are the only strategies 
 # supported for Performance Max campaigns. 
 # An optional ROAS (Return on Advertising Spend) can be set for 
 # maximize_conversion_value. The ROAS value must be specified as a ratio in 
 # the API. It is calculated by dividing "total value" by "total spend". 
 # For more information on Maximize Conversion Value, see the support 
 # article: http://support.google.com/google-ads/answer/7684216. 
 # A target_roas of 3.5 corresponds to a 350% return on ad spend. 
 campaign 
 . 
 bidding_strategy_type 
 = 
 ( 
 client 
 . 
 enums 
 . 
 BiddingStrategyTypeEnum 
 . 
 MAXIMIZE_CONVERSION_VALUE 
 ) 
 campaign 
 . 
 maximize_conversion_value 
 . 
 target_roas 
 = 
 3.5 
 # Set if the campaign is enabled for brand guidelines. For more information 
 # on brand guidelines, see https://support.google.com/google-ads/answer/14934472. 
 campaign 
 . 
 brand_guidelines_enabled 
 = 
 brand_guidelines_enabled 
 # Assign the resource name with a temporary ID. 
 campaign_service 
 : 
 CampaignServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "CampaignService" 
 ) 
 campaign 
 . 
 resource_name 
 = 
 campaign_service 
 . 
 campaign_path 
 ( 
 customer_id 
 , 
 _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ) 
 # Set the budget using the given budget resource name. 
 campaign 
 . 
 campaign_budget 
 = 
 campaign_service 
 . 
 campaign_budget_path 
 ( 
 customer_id 
 , 
 _BUDGET_TEMPORARY_ID 
 ) 
 # Declare whether or not this campaign serves political ads targeting the 
 # EU. Valid values are: 
 #   CONTAINS_EU_POLITICAL_ADVERTISING 
 #   DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 campaign 
 . 
 contains_eu_political_advertising 
 = 
 ( 
 client 
 . 
 enums 
 . 
 EuPoliticalAdvertisingStatusEnum 
 . 
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
 ) 
 # Optional fields 
 campaign 
 . 
 start_date 
 = 
 ( 
 datetime 
 . 
 now 
 () 
 + 
 timedelta 
 ( 
 1 
 )) 
 . 
 strftime 
 ( 
 "%Y%m 
 %d 
 " 
 ) 
 campaign 
 . 
 end_date 
 = 
 ( 
 datetime 
 . 
 now 
 () 
 + 
 timedelta 
 ( 
 365 
 )) 
 . 
 strftime 
 ( 
 "%Y%m 
 %d 
 " 
 ) 
 # Configures the optional opt-in/out status for asset automation settings. 
 for 
 asset_automation_type_enum 
 in 
 [ 
 client 
 . 
 enums 
 . 
 AssetAutomationTypeEnum 
 . 
 GENERATE_IMAGE_EXTRACTION 
 , 
 client 
 . 
 enums 
 . 
 AssetAutomationTypeEnum 
 . 
 FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION 
 , 
 client 
 . 
 enums 
 . 
 AssetAutomationTypeEnum 
 . 
 TEXT_ASSET_AUTOMATION 
 , 
 client 
 . 
 enums 
 . 
 AssetAutomationTypeEnum 
 . 
 GENERATE_ENHANCED_YOUTUBE_VIDEOS 
 , 
 client 
 . 
 enums 
 . 
 AssetAutomationTypeEnum 
 . 
 GENERATE_IMAGE_ENHANCEMENT 
 ]: 
 asset_automattion_setting 
 : 
 Campaign 
 . 
 AssetAutomationSetting 
 = 
 client 
 . 
 get_type 
 ( 
 "Campaign" 
 ) 
 . 
 AssetAutomationSetting 
 () 
 asset_automattion_setting 
 . 
 asset_automation_type 
 = 
 asset_automation_type_enum 
 asset_automattion_setting 
 . 
 asset_automation_status 
 = 
 client 
 . 
 enums 
 . 
 AssetAutomationStatusEnum 
 . 
 OPTED_IN 
 campaign 
 . 
 asset_automation_settings 
 . 
 append 
 ( 
 asset_automattion_setting 
 ) 
 return 
 mutate_operation  
 
 . 
 py 

Ruby

 # Creates a MutateOperation that creates a new Performance Max campaign. 
 # 
 # A temporary ID will be assigned to this campaign so that it can 
 # be referenced by other objects being created in the same Mutate request. 
 def 
  
 create_performance_max_campaign_operation 
 ( 
  
 client 
 , 
  
 customer_id 
 , 
  
 brand_guidelines_enabled 
 ) 
  
 client 
 . 
 operation 
 . 
 mutate 
  
 do 
  
 | 
 m 
 | 
  
 m 
 . 
 campaign_operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 campaign 
  
 do 
  
 | 
 c 
 | 
  
 c 
 . 
 name 
  
 = 
  
 "Performance Max campaign 
 #{ 
 SecureRandom 
 . 
 uuid 
 } 
 " 
  
 # Set the campaign status as PAUSED. The campaign is the only entity in 
  
 # the mutate request that should have its status set. 
  
 c 
 . 
 status 
  
 = 
  
 :PAUSED 
  
 # All Performance Max campaigns have an advertising_channel_type of 
  
 # PERFORMANCE_MAX. The advertising_channel_sub_type should not be set. 
  
 c 
 . 
 advertising_channel_type 
  
 = 
  
 :PERFORMANCE_MAX 
  
 # Bidding strategy must be set directly on the campaign. 
  
 # Setting a portfolio bidding strategy by resource name is not supported. 
  
 # Max Conversion and Maximize Conversion Value are the only strategies 
  
 # supported for Performance Max campaigns. 
  
 # An optional ROAS (Return on Advertising Spend) can be set for 
  
 # maximize_conversion_value. The ROAS value must be specified as a ratio in 
  
 # the API. It is calculated by dividing "total value" by "total spend". 
  
 # For more information on Maximize Conversion Value, see the support 
  
 # article: http://support.google.com/google-ads/answer/7684216. 
  
 # A target_roas of 3.5 corresponds to a 350% return on ad spend. 
  
 c 
 . 
 bidding_strategy_type 
  
 = 
  
 :MAXIMIZE_CONVERSION_VALUE 
  
 c 
 . 
 maximize_conversion_value 
  
 = 
  
 client 
 . 
 resource 
 . 
 maximize_conversion_value 
  
 do 
  
 | 
 mcv 
 | 
  
 mcv 
 . 
 target_roas 
  
 = 
  
 3 
 . 
 5 
  
 end 
  
 # Configures the optional opt-in/out status for asset automation settings. 
  
 c 
 . 
 asset_automation_settings 
 << 
 client 
 . 
 resource 
 . 
 asset_automation_setting 
  
 do 
  
 | 
 aas 
 | 
  
 aas 
 . 
 asset_automation_type 
  
 = 
  
 :GENERATE_IMAGE_EXTRACTION 
  
 aas 
 . 
 asset_automation_status 
  
 = 
  
 :OPTED_IN 
  
 end 
  
 c 
 . 
 asset_automation_settings 
 << 
 client 
 . 
 resource 
 . 
 asset_automation_setting 
  
 do 
  
 | 
 aas 
 | 
  
 aas 
 . 
 asset_automation_type 
  
 = 
  
 :FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION 
  
 aas 
 . 
 asset_automation_status 
  
 = 
  
 :OPTED_IN 
  
 end 
  
 c 
 . 
 asset_automation_settings 
 << 
 client 
 . 
 resource 
 . 
 asset_automation_setting 
  
 do 
  
 | 
 aas 
 | 
  
 aas 
 . 
 asset_automation_type 
  
 = 
  
 :TEXT_ASSET_AUTOMATION 
  
 aas 
 . 
 asset_automation_status 
  
 = 
  
 :OPTED_IN 
  
 end 
  
 c 
 . 
 asset_automation_settings 
 << 
 client 
 . 
 resource 
 . 
 asset_automation_setting 
  
 do 
  
 | 
 aas 
 | 
  
 aas 
 . 
 asset_automation_type 
  
 = 
  
 :GENERATE_ENHANCED_YOUTUBE_VIDEOS 
  
 aas 
 . 
 asset_automation_status 
  
 = 
  
 :OPTED_IN 
  
 end 
  
 c 
 . 
 asset_automation_settings 
 << 
 client 
 . 
 resource 
 . 
 asset_automation_setting 
  
 do 
  
 | 
 aas 
 | 
  
 aas 
 . 
 asset_automation_type 
  
 = 
  
 :GENERATE_IMAGE_ENHANCEMENT 
  
 aas 
 . 
 asset_automation_status 
  
 = 
  
 :OPTED_IN 
  
 end 
  
 # Set if the campaign is enabled for brand guidelines. For more 
  
 # information on brand guidelines, see 
  
 # https://support.google.com/google-ads/answer/14934472. 
  
 c 
 . 
 brand_guidelines_enabled 
  
 = 
  
 brand_guidelines_enabled 
  
 # Assign the resource name with a temporary ID. 
  
 c 
 . 
 resource_name 
  
 = 
  
 client 
 . 
 path 
 . 
 campaign 
 ( 
 customer_id 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
 ) 
  
 # Set the budget using the given budget resource name. 
  
 c 
 . 
 campaign_budget 
  
 = 
  
 client 
 . 
 path 
 . 
 campaign_budget 
 ( 
 customer_id 
 , 
  
 BUDGET_TEMPORARY_ID 
 ) 
  
 # Declare whether or not this campaign serves political ads targeting the EU. 
  
 # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and 
  
 # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING. 
  
 c 
 . 
 contains_eu_political_advertising 
  
 = 
  
 :DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
  
 # Optional fields 
  
 c 
 . 
 start_date 
  
 = 
  
 DateTime 
 . 
 parse 
 (( 
 Date 
 . 
 today 
  
 + 
  
 1 
 ) 
 . 
 to_s 
 ) 
 . 
 strftime 
 ( 
 '%Y%m%d' 
 ) 
  
 c 
 . 
 end_date 
  
 = 
  
 DateTime 
 . 
 parse 
 ( 
 Date 
 . 
 today 
 . 
 next_year 
 . 
 to_s 
 ) 
 . 
 strftime 
 ( 
 '%Y%m%d' 
 ) 
  
 end 
  
 end 
 end  
 
 . 
 rb 
  

Perl

 sub 
  
 create_performance_max_campaign_operation 
  
 { 
  
 my 
  
 ( 
 $customer_id 
 , 
  
 $brand_guidelines_enabled 
 ) 
  
 = 
  
 @_ 
 ; 
  
 # Configures the optional opt-in/out status for asset automation settings. 
  
 # When we create the campaign object, we set campaign->{assetAutomationSettings} 
  
 # equal to $asset_automation_settings. 
  
 my 
  
 $asset_automation_settings 
  
 = 
  
 [] 
 ; 
  
 my 
  
 $asset_automation_types 
  
 = 
  
 [ 
  
 GENERATE_IMAGE_EXTRACTION 
 , 
  
 FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION 
 , 
  
 TEXT_ASSET_AUTOMATION 
 , 
  
 GENERATE_ENHANCED_YOUTUBE_VIDEOS 
 , 
  
 GENERATE_IMAGE_ENHANCEMENT 
  
 ]; 
  
 foreach 
  
 my 
  
 $asset_automation_type 
  
 ( 
 @$asset_automation_types 
 ) 
  
 { 
  
 push 
  
 @$asset_automation_settings 
 , 
  
 Google::Ads::GoogleAds::V22::Resources:: 
 AssetAutomationSetting 
 - 
> new 
 ({ 
  
 assetAutomationStatus 
  
 = 
>  
 OPTED_IN 
 , 
  
 assetAutomationType 
  
 = 
>  
 $asset_automation_type 
  
 }); 
  
 } 
  
 # Create a mutate operation that creates a campaign operation. 
  
 return 
  
 Google::Ads::GoogleAds::V22::Services::GoogleAdsService:: 
 MutateOperation 
 - 
>  
 new 
 ({ 
  
 campaignOperation 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Services::CampaignService:: 
 CampaignOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Resources:: 
 Campaign 
 - 
> new 
 ({ 
  
 # Assign the resource name with a temporary ID. 
  
 resourceName 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Utils::ResourceNames:: 
 campaign 
 ( 
  
 $customer_id 
 , 
  
 PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID 
  
 ), 
  
 name 
  
 = 
>  
 "Performance Max campaign #" 
  
 . 
  
 uniqid 
 (), 
  
 # Set the budget using the given budget resource name. 
  
 campaignBudget 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Utils::ResourceNames:: 
 campaign_budget 
 ( 
  
 $customer_id 
 , 
  
 BUDGET_TEMPORARY_ID 
  
 ), 
  
 # Set the campaign status as PAUSED. The campaign is the only entity in 
  
 # the mutate request that should have its status set. 
  
 status 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Enums::CampaignStatusEnum:: 
 PAUSED 
 , 
  
 # All Performance Max campaigns have an advertisingChannelType of 
  
 # PERFORMANCE_MAX. The advertisingChannelSubType should not be set. 
  
 advertisingChannelType 
  
 = 
>  
 PERFORMANCE_MAX 
 , 
  
 # Bidding strategy must be set directly on the campaign. 
  
 # Setting a portfolio bidding strategy by resource name is not supported. 
  
 # Max Conversion and Maximize Conversion Value are the only strategies 
  
 # supported for Performance Max campaigns. 
  
 # An optional ROAS (Return on Advertising Spend) can be set for 
  
 # maximizeConversionValue. The ROAS value must be specified as a ratio in 
  
 # the API. It is calculated by dividing "total value" by "total spend". 
  
 # For more information on Maximize Conversion Value, see the support 
  
 # article: http://support.google.com/google-ads/answer/7684216. 
  
 # A targetRoas of 3.5 corresponds to a 350% return on ad spend. 
  
 maximizeConversionValue 
  
 = 
>  
 Google::Ads::GoogleAds::V22::Common:: 
 MaximizeConversionValue 
 - 
>  
 new 
 ({ 
  
 targetRoas 
  
 = 
>  
 3.5 
  
 } 
  
 ), 
  
 # Set if the campaign is enabled for brand guidelines. For more information 
  
 # on brand guidelines, see https://support.google.com/google-ads/answer/14934472. 
  
 brandGuidelinesEnabled 
  
 = 
>  
 $brand_guidelines_enabled 
 , 
  
 # Configures the optional opt-in/out status for asset automation settings. 
  
 assetAutomationSettings 
  
 = 
>  
 $asset_automation_settings 
 , 
  
 # Optional fields. 
  
 startDate 
  
 = 
>  
 strftime 
 ( 
 "%Y%m%d" 
 , 
  
 localtime 
 ( 
 time 
  
 + 
  
 60 
  
 * 
  
 60 
  
 * 
  
 24 
 )), 
  
 endDate 
  
 = 
>  
 strftime 
 ( 
 "%Y%m%d" 
 , 
  
 localtime 
 ( 
 time 
  
 + 
  
 60 
  
 * 
  
 60 
  
 * 
  
 24 
  
 * 
  
 365 
 )), 
  
 # Declare whether or not this campaign serves political ads targeting the EU. 
  
 # Valid values are CONTAINS_EU_POLITICAL_ADVERTISING and 
  
 # DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING. 
  
 containsEuPoliticalAdvertising 
  
 = 
>  
 DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING 
  
 })})}); 
 } 
  
  

Bidding strategy transitions

To update a campaign's bidding strategy, in a CampaignOperation.update , set the fields of the Campaign as previously described.

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