Shared sets

Shared sets let you manage and share a single set of criteria across multiple campaigns.

The SharedSetType enum specifies the types of shared sets you can use in the Google Ads API. This guide shows you how to use a shared set to create and apply a shared negative keyword list to a campaign. You can follow the same process to add other types of shared sets to campaigns.

Create a SharedSet

First, create a SharedSet to act as a container for your shared criteria.

When you create the SharedSet , specify the SharedSetType . For a campaign-level negative keyword list, use NEGATIVE_KEYWORDS .

The SharedSet creation process involves these steps:

  1. Instantiate a SharedSet .
  2. Set the SharedSetType to NEGATIVE_KEYWORDS .
  3. Provide a name to assist with future resource identification.
  4. Use the SharedSetService to create the SharedSet .

The response provides the resource name of the newly created SharedSet . You use this name in the next steps.

Create SharedCriterions

Next, create SharedCriterion objects for each item you want to add to your SharedSet . In the case of a negative keyword list, these are your negative keywords.

Each SharedCriterion contains:

  • A supported Criterion object.
  • The resource name of the SharedSet you created in the previous step.

To add the negative keywords to your SharedSet :

  1. For each negative keyword, create a SharedCriterion object.
  2. Within each SharedCriterion , create a KeywordInfo object and set the keyword text and match type.
  3. Set the shared_set field of the SharedCriterion to the resource name of your SharedSet .
  4. Use the SharedCriterionService to add each SharedCriterion to the SharedSet .

Attach a SharedSet to a campaign

When a shared set serves as a negative criterion, such as a negative keyword list, attach it to a campaign using a CampaignSharedSet object.

To link a SharedSet to a campaign as a negative criterion:

  1. Create a CampaignSharedSet object.
  2. Set the campaign field to the resource name of the campaign you want to add the SharedSet to.
  3. Set the shared_set field to the resource name of the SharedSet you created.
  4. Use the CampaignSharedSetService to create the CampaignSharedSet . This establishes the link between the campaign and the SharedSet .

Some shared sets, such as a brand list, may be attached to the campaign using a CampaignCriterion . For a list of criterion you can add as a CampaignCriterion , see the CampaignCriterion documentation .

Other uses for SharedSets

In addition to attaching a SharedSet to a campaign, you can also attach a SharedSet as a criterion at other levels. You can attach your SharedSet at the customer level using a CustomerNegativeCriterion . Alternatively, attach it to an ad group using an AdGroupCriterion .

Shared Keyword Set Code example

Java

 // Copyright 2018 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     https://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 package 
  
 com.google.ads.googleads.examples.advancedoperations 
 ; 
 import static 
  
 com.google.ads.googleads.examples.utils.CodeSampleHelper.getPrintableDateTime 
 ; 
 import 
  
 com.beust.jcommander.Parameter 
 ; 
 import 
  
 com.google.ads.googleads.examples.utils.ArgumentNames 
 ; 
 import 
  
 com.google.ads.googleads.examples.utils.CodeSampleParams 
 ; 
 import 
  
 com.google.ads.googleads.lib.GoogleAdsClient 
 ; 
 import 
  
 com.google.ads.googleads.v21.common.KeywordInfo 
 ; 
 import 
  
 com.google.ads.googleads.v21.enums.KeywordMatchTypeEnum.KeywordMatchType 
 ; 
 import 
  
 com.google.ads.googleads.v21.enums.SharedSetTypeEnum.SharedSetType 
 ; 
 import 
  
 com.google.ads.googleads.v21.errors.GoogleAdsError 
 ; 
 import 
  
 com.google.ads.googleads.v21.errors.GoogleAdsException 
 ; 
 import 
  
 com.google.ads.googleads.v21.resources.CampaignSharedSet 
 ; 
 import 
  
 com.google.ads.googleads.v21.resources.SharedCriterion 
 ; 
 import 
  
 com.google.ads.googleads.v21.resources.SharedSet 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.CampaignSharedSetOperation 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.CampaignSharedSetServiceClient 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateCampaignSharedSetsResponse 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateSharedCriteriaResponse 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateSharedCriterionResult 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateSharedSetsResponse 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedCriterionOperation 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedCriterionServiceClient 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedSetOperation 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedSetServiceClient 
 ; 
 import 
  
 com.google.ads.googleads.v21.utils.ResourceNames 
 ; 
 import 
  
 com.google.common.collect.ImmutableList 
 ; 
 import 
  
 java.io.FileNotFoundException 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.util.ArrayList 
 ; 
 import 
  
 java.util.Arrays 
 ; 
 import 
  
 java.util.List 
 ; 
 /** Creates a shared list of negative broad match keywords. It then attaches them to a campaign. */ 
 public 
  
 class 
 CreateAndAttachSharedKeywordSet 
  
 { 
  
 private 
  
 static 
  
 class 
 CreateAndAttachSharedKeywordSetParams 
  
 extends 
  
 CodeSampleParams 
  
 { 
  
 @Parameter 
 ( 
 names 
  
 = 
  
 ArgumentNames 
 . 
 CUSTOMER_ID 
 , 
  
 required 
  
 = 
  
 true 
 ) 
  
 private 
  
 Long 
  
 customerId 
 ; 
  
 @Parameter 
 ( 
 names 
  
 = 
  
 ArgumentNames 
 . 
 CAMPAIGN_ID 
 , 
  
 required 
  
 = 
  
 true 
 ) 
  
 private 
  
 Long 
  
 campaignId 
 ; 
  
 } 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 CreateAndAttachSharedKeywordSetParams 
  
 params 
  
 = 
  
 new 
  
 CreateAndAttachSharedKeywordSetParams 
 (); 
  
 if 
  
 ( 
 ! 
 params 
 . 
 parseArguments 
 ( 
 args 
 )) 
  
 { 
  
 // Either pass the required parameters for this example on the command line, or insert them 
  
 // into the code here. See the parameter class definition above for descriptions. 
  
 params 
 . 
 customerId 
  
 = 
  
 Long 
 . 
 parseLong 
 ( 
 "INSERT_CUSTOMER_ID_HERE" 
 ); 
  
 params 
 . 
 campaignId 
  
 = 
  
 Long 
 . 
 parseLong 
 ( 
 "INSERT_CAMPAIGN_ID_HERE" 
 ); 
  
 } 
  
 GoogleAdsClient 
  
 googleAdsClient 
  
 = 
  
 null 
 ; 
  
 try 
  
 { 
  
 googleAdsClient 
  
 = 
  
 GoogleAdsClient 
 . 
 newBuilder 
 (). 
 fromPropertiesFile 
 (). 
 build 
 (); 
  
 } 
  
 catch 
  
 ( 
 FileNotFoundException 
  
 fnfe 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 printf 
 ( 
  
 "Failed to load GoogleAdsClient configuration from file. Exception: %s%n" 
 , 
  
 fnfe 
 ); 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 } 
  
 catch 
  
 ( 
 IOException 
  
 ioe 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 printf 
 ( 
 "Failed to create GoogleAdsClient. Exception: %s%n" 
 , 
  
 ioe 
 ); 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 } 
  
 try 
  
 { 
  
 new 
  
 CreateAndAttachSharedKeywordSet 
 () 
  
 . 
 runExample 
 ( 
 googleAdsClient 
 , 
  
 params 
 . 
 customerId 
 , 
  
 params 
 . 
 campaignId 
 ); 
  
 } 
  
 catch 
  
 ( 
 GoogleAdsException 
  
 gae 
 ) 
  
 { 
  
 // GoogleAdsException is the base class for most exceptions thrown by an API request. 
  
 // Instances of this exception have a message and a GoogleAdsFailure that contains a 
  
 // collection of GoogleAdsErrors that indicate the underlying causes of the 
  
 // GoogleAdsException. 
  
 System 
 . 
 err 
 . 
 printf 
 ( 
  
 "Request ID %s failed due to GoogleAdsException. Underlying errors:%n" 
 , 
  
 gae 
 . 
 getRequestId 
 ()); 
  
 int 
  
 i 
  
 = 
  
 0 
 ; 
  
 for 
  
 ( 
 GoogleAdsError 
  
 googleAdsError 
  
 : 
  
 gae 
 . 
 getGoogleAdsFailure 
 (). 
 getErrorsList 
 ()) 
  
 { 
  
 System 
 . 
 err 
 . 
 printf 
 ( 
 "  Error %d: %s%n" 
 , 
  
 i 
 ++ 
 , 
  
 googleAdsError 
 ); 
  
 } 
  
 System 
 . 
 exit 
 ( 
 1 
 ); 
  
 } 
  
 } 
  
 /** 
 * Runs the example. 
 * 
 * @param googleAdsClient the Google Ads API client. 
 * @param customerId the client customer ID. 
 * @param campaignId the campaign ID. 
 * @throws GoogleAdsException if an API request failed with one or more service errors. 
 */ 
  
 private 
  
 void 
  
 runExample 
 ( 
 GoogleAdsClient 
  
 googleAdsClient 
 , 
  
 long 
  
 customerId 
 , 
  
 long 
  
 campaignId 
 ) 
  
 { 
  
 // Creates a keywords list to create a shared set of. 
  
 List<String> 
  
 keywords 
  
 = 
  
 Arrays 
 . 
 asList 
 ( 
 "mars cruise" 
 , 
  
 "mars hotels" 
 ); 
  
 // Creates shared negative keyword set. 
  
 SharedSet 
  
 sharedSet 
  
 = 
  
 SharedSet 
 . 
 newBuilder 
 () 
  
 . 
 setName 
 ( 
 "API Negative keyword list - " 
  
 + 
  
 getPrintableDateTime 
 ()) 
  
 . 
 setType 
 ( 
 SharedSetType 
 . 
 NEGATIVE_KEYWORDS 
 ) 
  
 . 
 build 
 (); 
  
 SharedSetOperation 
  
 operation 
  
 = 
  
 SharedSetOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 sharedSet 
 ). 
 build 
 (); 
  
 String 
  
 sharedSetResourceName 
 ; 
  
 try 
  
 ( 
 SharedSetServiceClient 
  
 sharedSetServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createSharedSetServiceClient 
 ()) 
  
 { 
  
 MutateSharedSetsResponse 
  
 response 
  
 = 
  
 sharedSetServiceClient 
 . 
 mutateSharedSets 
 ( 
  
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 ImmutableList 
 . 
 of 
 ( 
 operation 
 )); 
  
 sharedSetResourceName 
  
 = 
  
 response 
 . 
 getResults 
 ( 
 0 
 ). 
 getResourceName 
 (); 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "Created shared set %s%n" 
 , 
  
 sharedSetResourceName 
 ); 
  
 } 
  
 List<SharedCriterionOperation> 
  
 sharedCriterionOperations 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 for 
  
 ( 
 String 
  
 keyword 
  
 : 
  
 keywords 
 ) 
  
 { 
  
 SharedCriterion 
  
 sharedCriterion 
  
 = 
  
 SharedCriterion 
 . 
 newBuilder 
 () 
  
 . 
 setKeyword 
 ( 
  
 KeywordInfo 
 . 
 newBuilder 
 () 
  
 . 
 setText 
 ( 
 keyword 
 ) 
  
 . 
 setMatchType 
 ( 
 KeywordMatchType 
 . 
 BROAD 
 ) 
  
 . 
 build 
 ()) 
  
 . 
 setSharedSet 
 ( 
 sharedSetResourceName 
 ) 
  
 . 
 build 
 (); 
  
 SharedCriterionOperation 
  
 sharedCriterionOperation 
  
 = 
  
 SharedCriterionOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 sharedCriterion 
 ). 
 build 
 (); 
  
 sharedCriterionOperations 
 . 
 add 
 ( 
 sharedCriterionOperation 
 ); 
  
 } 
  
 try 
  
 ( 
 SharedCriterionServiceClient 
  
 sharedCriterionServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createSharedCriterionServiceClient 
 ()) 
  
 { 
  
 MutateSharedCriteriaResponse 
  
 response 
  
 = 
  
 sharedCriterionServiceClient 
 . 
 mutateSharedCriteria 
 ( 
  
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 sharedCriterionOperations 
 ); 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "Added %d shared criteria:%n" 
 , 
  
 response 
 . 
 getResultsCount 
 ()); 
  
 for 
  
 ( 
 MutateSharedCriterionResult 
  
 result 
  
 : 
  
 response 
 . 
 getResultsList 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "\t%s%n" 
 , 
  
 result 
 . 
 getResourceName 
 ()); 
  
 } 
  
 } 
  
 String 
  
 campaignResourceName 
  
 = 
  
 ResourceNames 
 . 
 campaign 
 ( 
 customerId 
 , 
  
 campaignId 
 ); 
  
 CampaignSharedSet 
  
 campaignSharedSet 
  
 = 
  
 CampaignSharedSet 
 . 
 newBuilder 
 () 
  
 . 
 setCampaign 
 ( 
 campaignResourceName 
 ) 
  
 . 
 setSharedSet 
 ( 
 sharedSetResourceName 
 ) 
  
 . 
 build 
 (); 
  
 CampaignSharedSetOperation 
  
 campaignSharedSetOperation 
  
 = 
  
 CampaignSharedSetOperation 
 . 
 newBuilder 
 (). 
 setCreate 
 ( 
 campaignSharedSet 
 ). 
 build 
 (); 
  
 try 
  
 ( 
 CampaignSharedSetServiceClient 
  
 campaignSharedSetServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createCampaignSharedSetServiceClient 
 ()) 
  
 { 
  
 MutateCampaignSharedSetsResponse 
  
 response 
  
 = 
  
 campaignSharedSetServiceClient 
 . 
 mutateCampaignSharedSets 
 ( 
  
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 ImmutableList 
 . 
 of 
 ( 
 campaignSharedSetOperation 
 )); 
  
 String 
  
 campaignSharedSetResourceName 
  
 = 
  
 response 
 . 
 getResults 
 ( 
 0 
 ). 
 getResourceName 
 (); 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
 "Created campaign shared set %s%n" 
 , 
  
 campaignSharedSetResourceName 
 ); 
  
 } 
  
 } 
 } 
  
  

C#

 // Copyright 2019 Google LLC 
 // 
 // Licensed under the Apache License, Version 2.0 (the "License"); 
 // you may not use this file except in compliance with the License. 
 // You may obtain a copy of the License at 
 // 
 //     http://www.apache.org/licenses/LICENSE-2.0 
 // 
 // Unless required by applicable law or agreed to in writing, software 
 // distributed under the License is distributed on an "AS IS" BASIS, 
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 // See the License for the specific language governing permissions and 
 // limitations under the License. 
 using 
  
 CommandLine 
 ; 
 using 
  
 Google.Ads.Gax.Examples 
 ; 
 using 
  
 Google.Ads.GoogleAds.Lib 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Common 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Errors 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Resources 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Services 
 ; 
 using 
  
 System 
 ; 
 using 
  
 System.Collections.Generic 
 ; 
 using 
  
 static 
  
 Google 
 . 
 Ads 
 . 
 GoogleAds 
 . 
 V21 
 . 
 Enums 
 . 
 KeywordMatchTypeEnum 
 . 
 Types 
 ; 
 using 
  
 static 
  
 Google 
 . 
 Ads 
 . 
 GoogleAds 
 . 
 V21 
 . 
 Enums 
 . 
 SharedSetTypeEnum 
 . 
 Types 
 ; 
 namespace 
  
 Google.Ads.GoogleAds.Examples.V21 
 { 
  
 /// <summary> 
  
 /// This code example creates a shared list of negative broad match keywords. It then 
  
 /// attaches them to a campaign. 
  
 /// </summary> 
  
 public 
  
 class 
  
 CreateAndAttachSharedKeywordSet 
  
 : 
  
 ExampleBase 
  
 { 
  
 /// <summary> 
  
 /// Command line options for running the <see cref="CreateAndAttachSharedKeywordSet"/> 
  
 /// example. 
  
 /// </summary> 
  
 public 
  
 class 
  
 Options 
  
 : 
  
 OptionsBase 
  
 { 
  
 /// <summary> 
  
 /// The Google Ads customer ID for which the call is made. 
  
 /// </summary> 
  
 [Option("customerId", Required = true, HelpText = 
 "The Google Ads customer ID for which the call is made.")] 
  
 public 
  
 long 
  
 CustomerId 
  
 { 
  
 get 
 ; 
  
 set 
 ; 
  
 } 
  
 /// <summary> 
  
 /// The ID of the campaign for which shared criterion is updated. 
  
 /// </summary> 
  
 [Option("campaignId", Required = true, HelpText = 
 "The ID of the campaign for which shared criterion is updated.")] 
  
 public 
  
 long 
  
 CampaignId 
  
 { 
  
 get 
 ; 
  
 set 
 ; 
  
 } 
  
 } 
  
 /// <summary> 
  
 /// Main method, to run this code example as a standalone application. 
  
 /// </summary> 
  
 /// <param name="args">The command line arguments.</param> 
  
 public 
  
 static 
  
 void 
  
 Main 
 ( 
 string 
 [] 
  
 args 
 ) 
  
 { 
  
 Options 
  
 options 
  
 = 
  
 ExampleUtilities 
 . 
 ParseCommandLine<Options> 
 ( 
 args 
 ); 
  
 CreateAndAttachSharedKeywordSet 
  
 codeExample 
  
 = 
  
 new 
  
 CreateAndAttachSharedKeywordSet 
 (); 
  
 Console 
 . 
 WriteLine 
 ( 
 codeExample 
 . 
 Description 
 ); 
  
 codeExample 
 . 
 Run 
 ( 
 new 
  
 GoogleAdsClient 
 (), 
  
 options 
 . 
 CustomerId 
 , 
  
 options 
 . 
 CampaignId 
 ); 
  
 } 
  
 /// <summary> 
  
 /// Returns a description about the code example. 
  
 /// </summary> 
  
 public 
  
 override 
  
 string 
  
 Description 
  
 = 
>  
 "This code example creates a shared list of negative broad match keywords. It then " 
  
 + 
  
 "attaches them to a campaign." 
 ; 
  
 /// <summary> 
  
 /// Runs the code example. 
  
 /// </summary> 
  
 /// <param name="client">The Google Ads client.</param> 
  
 /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> 
  
 /// <param name="campaignId">The ID of the campaign for which shared criterion is updated. 
  
 /// </param> 
  
 public 
  
 void 
  
 Run 
 ( 
 GoogleAdsClient 
  
 client 
 , 
  
 long 
  
 customerId 
 , 
  
 long 
  
 campaignId 
 ) 
  
 { 
  
 SharedSetServiceClient 
  
 sharedSetService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V21 
 . 
 SharedSetService 
 ); 
  
 SharedCriterionServiceClient 
  
 sharedCriterionService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
 Services 
 . 
 V21 
 . 
 SharedCriterionService 
 ); 
  
 CampaignSharedSetServiceClient 
  
 campaignSharedSetService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
 Services 
 . 
 V21 
 . 
 CampaignSharedSetService 
 ); 
  
 try 
  
 { 
  
 // Keywords to create a shared set of. 
  
 string 
 [] 
  
 keywords 
  
 = 
  
 new 
  
 string 
 [] 
  
 { 
  
 "mars cruise" 
 , 
  
 "mars hotels" 
  
 }; 
  
 // Create shared negative keyword set. 
  
 SharedSet 
  
 sharedSet 
  
 = 
  
 new 
  
 SharedSet 
 () 
  
 { 
  
 Name 
  
 = 
  
 "API Negative keyword list - " 
  
 + 
  
 ExampleUtilities 
 . 
 GetRandomString 
 (), 
  
 Type 
  
 = 
  
 SharedSetType 
 . 
 NegativeKeywords 
 , 
  
 }; 
  
 SharedSetOperation 
  
 operation 
  
 = 
  
 new 
  
 SharedSetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 sharedSet 
  
 }; 
  
 MutateSharedSetsResponse 
  
 sharedSetResponse 
  
 = 
  
 sharedSetService 
 . 
 MutateSharedSets 
 ( 
  
 customerId 
 . 
 ToString 
 (), 
  
 new 
  
 SharedSetOperation 
 [] 
  
 { 
  
 operation 
  
 }); 
  
 string 
  
 sharedSetResourceName 
  
 = 
  
 sharedSetResponse 
 . 
 Results 
 [ 
 0 
 ]. 
 ResourceName 
 ; 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Created shared set {sharedSetResourceName}." 
 ); 
  
 // Create negative keywords in the shared set. 
  
 List<SharedCriterionOperation> 
  
 criterionOperations 
  
 = 
  
 new 
  
 List<SharedCriterionOperation> 
 (); 
  
 foreach 
  
 ( 
 string 
  
 keyword 
  
 in 
  
 keywords 
 ) 
  
 { 
  
 SharedCriterion 
  
 sharedCriterion 
  
 = 
  
 new 
  
 SharedCriterion 
 () 
  
 { 
  
 Keyword 
  
 = 
  
 new 
  
 KeywordInfo 
 () 
  
 { 
  
 Text 
  
 = 
  
 keyword 
 , 
  
 MatchType 
  
 = 
  
 KeywordMatchType 
 . 
 Broad 
  
 }, 
  
 SharedSet 
  
 = 
  
 sharedSetResourceName 
  
 }; 
  
 criterionOperations 
 . 
 Add 
 ( 
 new 
  
 SharedCriterionOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 sharedCriterion 
  
 }); 
  
 } 
  
 MutateSharedCriteriaResponse 
  
 criteriaResponse 
  
 = 
  
 sharedCriterionService 
 . 
 MutateSharedCriteria 
 ( 
  
 customerId 
 . 
 ToString 
 (), 
  
 criterionOperations 
 ); 
  
 foreach 
  
 ( 
 MutateSharedCriterionResult 
  
 result 
  
 in 
  
 criteriaResponse 
 . 
 Results 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Created shared criterion {result.ResourceName}." 
 ); 
  
 } 
  
 // Attach shared set to campaign. 
  
 CampaignSharedSet 
  
 campaignSet 
  
 = 
  
 new 
  
 CampaignSharedSet 
 () 
  
 { 
  
 Campaign 
  
 = 
  
 ResourceNames 
 . 
 Campaign 
 ( 
 customerId 
 , 
  
 campaignId 
 ), 
  
 SharedSet 
  
 = 
  
 sharedSetResourceName 
  
 }; 
  
 CampaignSharedSetOperation 
  
 sharedSetoperation 
  
 = 
  
 new 
  
 CampaignSharedSetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 campaignSet 
  
 }; 
  
 MutateCampaignSharedSetsResponse 
  
 response 
  
 = 
  
 campaignSharedSetService 
 . 
 MutateCampaignSharedSets 
 ( 
 customerId 
 . 
 ToString 
 (), 
  
 new 
  
 CampaignSharedSetOperation 
 [] 
  
 { 
  
 sharedSetoperation 
  
 }); 
  
 Console 
 . 
 WriteLine 
 ( 
 "Created campaign shared set {0}." 
 , 
  
 response 
 . 
 Results 
 [ 
 0 
 ]. 
 ResourceName 
 ); 
  
 } 
  
 catch 
  
 ( 
 GoogleAdsException 
  
 e 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Failure:" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Message: {e.Message}" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Failure: {e.Failure}" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Request ID: {e.RequestId}" 
 ); 
  
 throw 
 ; 
  
 } 
  
 } 
  
 } 
 } 
  
  

PHP

< ?php 
 /** 
 * Copyright 2018 Google LLC 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at 
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License. 
 */ 
 namespace Google\Ads\GoogleAds\Examples\AdvancedOperations; 
 require __DIR__ . '/../../vendor/autoload.php'; 
 use GetOpt\GetOpt; 
 use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; 
 use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; 
 use Google\Ads\GoogleAds\Examples\Utils\Helper; 
 use Google\Ads\GoogleAds\Lib\V21\GoogleAdsClient; 
 use Google\Ads\GoogleAds\Lib\V21\GoogleAdsClientBuilder; 
 use Google\Ads\GoogleAds\Lib\V21\GoogleAdsException; 
 use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; 
 use Google\Ads\GoogleAds\Util\V21\ResourceNames; 
 use Google\Ads\GoogleAds\V21\Common\KeywordInfo; 
 use Google\Ads\GoogleAds\V21\Enums\KeywordMatchTypeEnum\KeywordMatchType; 
 use Google\Ads\GoogleAds\V21\Enums\SharedSetTypeEnum\SharedSetType; 
 use Google\Ads\GoogleAds\V21\Errors\GoogleAdsError; 
 use Google\Ads\GoogleAds\V21\Resources\CampaignSharedSet; 
 use Google\Ads\GoogleAds\V21\Resources\SharedCriterion; 
 use Google\Ads\GoogleAds\V21\Resources\SharedSet; 
 use Google\Ads\GoogleAds\V21\Services\CampaignSharedSetOperation; 
 use Google\Ads\GoogleAds\V21\Services\MutateCampaignSharedSetsRequest; 
 use Google\Ads\GoogleAds\V21\Services\MutateSharedCriteriaRequest; 
 use Google\Ads\GoogleAds\V21\Services\MutateSharedSetsRequest; 
 use Google\Ads\GoogleAds\V21\Services\SharedCriterionOperation; 
 use Google\Ads\GoogleAds\V21\Services\SharedSetOperation; 
 use Google\ApiCore\ApiException; 
 /** 
 * This example creates a shared list of negative broad match keywords. It then attaches them to a 
 * campaign. 
 */ 
 class CreateAndAttachSharedKeywordSet 
 { 
 private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; 
 private const CAMPAIGN_ID = 'INSERT_CAMPAIGN_ID_HERE'; 
 public static function main() 
 { 
 // Either pass the required parameters for this example on the command line, or insert them 
 // into the constants above. 
 $options = (new ArgumentParser())->parseCommandArguments([ 
 ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT, 
 ArgumentNames::CAMPAIGN_ID => GetOpt::REQUIRED_ARGUMENT 
 ]); 
 // Generate a refreshable OAuth2 credential for authentication. 
 $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); 
 // Construct a Google Ads client configured from a properties file and the 
 // OAuth2 credentials above. 
 $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile() 
 ->withOAuth2Credential($oAuth2Credential) 
 ->build(); 
 try { 
 self::runExample( 
 $googleAdsClient, 
 $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID, 
 $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID 
 ); 
 } catch (GoogleAdsException $googleAdsException) { 
 printf( 
 "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", 
 $googleAdsException->getRequestId(), 
 PHP_EOL, 
 PHP_EOL 
 ); 
 foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { 
 /** @var GoogleAdsError $error */ 
 printf( 
 "\t%s: %s%s", 
 $error->getErrorCode()->getErrorCode(), 
 $error->getMessage(), 
 PHP_EOL 
 ); 
 } 
 exit(1); 
 } catch (ApiException $apiException) { 
 printf( 
 "ApiException was thrown with message '%s'.%s", 
 $apiException->getMessage(), 
 PHP_EOL 
 ); 
 exit(1); 
 } 
 } 
 /** 
 * Runs the example. 
 * 
 * @param GoogleAdsClient $googleAdsClient the Google Ads API client 
 * @param int $customerId the customer ID 
 * @param int $campaignId the ID of the campaign 
 */ 
 public static function runExample( 
 GoogleAdsClient $googleAdsClient, 
 int $customerId, 
 int $campaignId 
 ) { 
 // Create shared negative keyword set. 
 $sharedSet = new SharedSet([ 
 'name' => 'API Negative keyword list - ' . Helper::getPrintableDatetime(), 
 'type' => SharedSetType::NEGATIVE_KEYWORDS, 
 ]); 
 $sharedSetOperation = new SharedSetOperation(); 
 $sharedSetOperation->setCreate($sharedSet); 
 $sharedSetServiceClient = $googleAdsClient->getSharedSetServiceClient(); 
 $response = $sharedSetServiceClient->mutateSharedSets(MutateSharedSetsRequest::build( 
 $customerId, 
 [$sharedSetOperation] 
 )); 
 $sharedSetResourceName = $response->getResults()[0]->getResourceName(); 
 print 'Created shared set ' . $sharedSetResourceName . PHP_EOL; 
 // Creates shared set criteria. 
 $sharedCriterionOperations = []; 
 // Keywords to create a shared set of. 
 $keywords = ['mars cruise', 'mars hotels']; 
 foreach ($keywords as $keyword) { 
 $sharedCriterion = new SharedCriterion([ 
 'keyword' => new KeywordInfo([ 
 'text' => $keyword, 
 'match_type' => KeywordMatchType::BROAD 
 ]), 
 'shared_set' => $sharedSetResourceName 
 ]); 
 $sharedCriterionOperation = new SharedCriterionOperation(); 
 $sharedCriterionOperation->setCreate($sharedCriterion); 
 $sharedCriterionOperations[] = $sharedCriterionOperation; 
 } 
 $sharedCriterionServiceClient = $googleAdsClient->getSharedCriterionServiceClient(); 
 $response = $sharedCriterionServiceClient->mutateSharedCriteria( 
 MutateSharedCriteriaRequest::build($customerId, $sharedCriterionOperations) 
 ); 
 printf("Added %d shared criteria:%s", $response->getResults()->count(), PHP_EOL); 
 foreach ($response->getResults() as $addedSharedCriterion) { 
 /** @var SharedCriterion $addedSharedCriterion */ 
 print "\t" . $addedSharedCriterion->getResourceName() . PHP_EOL; 
 } 
 // Creates campaign shared set. 
 $campaignSharedSet = new CampaignSharedSet([ 
 'campaign' => ResourceNames::forCampaign($customerId, $campaignId), 
 'shared_set' => $sharedSetResourceName 
 ]); 
 $campaignSharedSetOperation = new CampaignSharedSetOperation(); 
 $campaignSharedSetOperation->setCreate($campaignSharedSet); 
 $campaignSharedSetServiceClient = $googleAdsClient->getCampaignSharedSetServiceClient(); 
 $response = $campaignSharedSetServiceClient->mutateCampaignSharedSets( 
 MutateCampaignSharedSetsRequest::build($customerId, [$campaignSharedSetOperation]) 
 ); 
 print 'Created campaign shared set: ' . $response->getResults()[0]->getResourceName() 
 . PHP_EOL; 
 } 
 } 
 CreateAndAttachSharedKeywordSet::main(); 
  
  

Python

 #!/usr/bin/env python 
 # Copyright 2018 Google LLC 
 # 
 # Licensed under the Apache License, Version 2.0 (the "License"); 
 # you may not use this file except in compliance with the License. 
 # You may obtain a copy of the License at 
 # 
 #     https://www.apache.org/licenses/LICENSE-2.0 
 # 
 # Unless required by applicable law or agreed to in writing, software 
 # distributed under the License is distributed on an "AS IS" BASIS, 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 # See the License for the specific language governing permissions and 
 # limitations under the License. 
 """Demonstrates how to create a shared list of negative broad match keywords. 
 Note that the keywords will be attached to the specified campaign. 
 """ 
 import 
  
 argparse 
 import 
  
 sys 
 from 
  
 typing 
  
 import 
 List 
 import 
  
 uuid 
 from 
  
 google.ads.googleads.client 
  
 import 
 GoogleAdsClient 
 from 
  
 google.ads.googleads.errors 
  
 import 
 GoogleAdsException 
 from 
  
 google.ads.googleads.v21.errors.types.errors 
  
 import 
 GoogleAdsError 
 from 
  
 google.ads.googleads.v21.resources.types.campaign_shared_set 
  
 import 
 ( 
 CampaignSharedSet 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.resources.types.shared_criterion 
  
 import 
 ( 
 SharedCriterion 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.resources.types.shared_set 
  
 import 
 SharedSet 
 from 
  
 google.ads.googleads.v21.services.services.campaign_service 
  
 import 
 ( 
 CampaignServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.services.campaign_shared_set_service 
  
 import 
 ( 
 CampaignSharedSetServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.types.campaign_shared_set_service 
  
 import 
 ( 
 CampaignSharedSetOperation 
 , 
 MutateCampaignSharedSetsResponse 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.services.shared_criterion_service 
  
 import 
 ( 
 SharedCriterionServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.services.shared_set_service 
  
 import 
 ( 
 SharedSetServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.types.shared_criterion_service 
  
 import 
 ( 
 MutateSharedCriteriaResponse 
 , 
 MutateSharedCriterionResult 
 , 
 SharedCriterionOperation 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.types.shared_set_service 
  
 import 
 ( 
 MutateSharedSetsResponse 
 , 
 SharedSetOperation 
 , 
 ) 
 def 
  
 main 
 ( 
 client 
 : 
 GoogleAdsClient 
 , 
 customer_id 
 : 
 str 
 , 
 campaign_id 
 : 
 str 
 ) 
 - 
> None 
 : 
 campaign_service 
 : 
 CampaignServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "CampaignService" 
 ) 
 shared_set_service 
 : 
 SharedSetServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "SharedSetService" 
 ) 
 shared_criterion_service 
 : 
 SharedCriterionServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "SharedCriterionService" 
 ) 
 campaign_shared_set_service 
 : 
 CampaignSharedSetServiceClient 
 = 
 ( 
 client 
 . 
 get_service 
 ( 
 "CampaignSharedSetService" 
 ) 
 ) 
 # Create shared negative keyword set. 
 shared_set_operation 
 : 
 SharedSetOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "SharedSetOperation" 
 ) 
 shared_set 
 : 
 SharedSet 
 = 
 shared_set_operation 
 . 
 create 
 shared_set 
 . 
 name 
 = 
 f 
 "API Negative keyword list - 
 { 
 uuid 
 . 
 uuid4 
 () 
 } 
 " 
 shared_set 
 . 
 type_ 
 = 
 client 
 . 
 enums 
 . 
 SharedSetTypeEnum 
 . 
 NEGATIVE_KEYWORDS 
 try 
 : 
 shared_set_response 
 : 
 MutateSharedSetsResponse 
 = 
 ( 
 shared_set_service 
 . 
 mutate_shared_sets 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 operations 
 = 
 [ 
 shared_set_operation 
 ] 
 ) 
 ) 
 shared_set_resource_name 
 : 
 str 
 = 
 shared_set_response 
 . 
 results 
 [ 
 0 
 ] 
 . 
 resource_name 
 print 
 ( 
 f 
 'Created shared set " 
 { 
 shared_set_resource_name 
 } 
 ".' 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
 # Keywords to create a shared set of. 
 keywords 
 : 
 List 
 [ 
 str 
 ] 
 = 
 [ 
 "mars cruise" 
 , 
 "mars hotels" 
 ] 
 shared_criteria_operations 
 : 
 List 
 [ 
 SharedCriterionOperation 
 ] 
 = 
 [] 
 for 
 keyword 
 in 
 keywords 
 : 
 shared_criterion_operation 
 : 
 SharedCriterionOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "SharedCriterionOperation" 
 ) 
 shared_criterion 
 : 
 SharedCriterion 
 = 
 shared_criterion_operation 
 . 
 create 
 shared_criterion 
 . 
 keyword 
 . 
 text 
 = 
 keyword 
 shared_criterion 
 . 
 keyword 
 . 
 match_type 
 = 
 ( 
 client 
 . 
 enums 
 . 
 KeywordMatchTypeEnum 
 . 
 BROAD 
 ) 
 shared_criterion 
 . 
 shared_set 
 = 
 shared_set_resource_name 
 shared_criteria_operations 
 . 
 append 
 ( 
 shared_criterion_operation 
 ) 
 try 
 : 
 response 
 : 
 MutateSharedCriteriaResponse 
 = 
 ( 
 shared_criterion_service 
 . 
 mutate_shared_criteria 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 operations 
 = 
 shared_criteria_operations 
 ) 
 ) 
 shared_criterion_result 
 : 
 MutateSharedCriterionResult 
 for 
 shared_criterion_result 
 in 
 response 
 . 
 results 
 : 
 print 
 ( 
 "Created shared criterion " 
 f 
 '" 
 { 
 shared_criterion_result 
 . 
 resource_name 
 } 
 ".' 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
 campaign_set_operation 
 : 
 CampaignSharedSetOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "CampaignSharedSetOperation" 
 ) 
 campaign_set 
 : 
 CampaignSharedSet 
 = 
 campaign_set_operation 
 . 
 create 
 campaign_set 
 . 
 campaign 
 = 
 campaign_service 
 . 
 campaign_path 
 ( 
 customer_id 
 , 
 campaign_id 
 ) 
 campaign_set 
 . 
 shared_set 
 = 
 shared_set_resource_name 
 try 
 : 
 campaign_shared_set_response 
 : 
 MutateCampaignSharedSetsResponse 
 = 
 ( 
 campaign_shared_set_service 
 . 
 mutate_campaign_shared_sets 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 operations 
 = 
 [ 
 campaign_set_operation 
 ] 
 ) 
 ) 
 print 
 ( 
 "Created campaign shared set " 
 f 
 '" 
 { 
 campaign_shared_set_response 
 . 
 results 
 [ 
 0 
 ] 
 . 
 resource_name 
 } 
 ".' 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
 def 
  
 handle_googleads_exception 
 ( 
 exception 
 : 
 GoogleAdsException 
 ) 
 - 
> None 
 : 
 print 
 ( 
 f 
 'Request with ID " 
 { 
 exception 
 . 
 request_id 
 } 
 " failed with status ' 
 f 
 '" 
 { 
 exception 
 . 
 error 
 . 
 code 
 () 
 . 
 name 
 } 
 " and includes the following errors:' 
 ) 
 error 
 : 
 GoogleAdsError 
 for 
 error 
 in 
 exception 
 . 
 failure 
 . 
 errors 
 : 
 print 
 ( 
 f 
 ' 
 \t 
 Error with message " 
 { 
 error 
 . 
 message 
 } 
 ".' 
 ) 
 if 
 error 
 . 
 location 
 : 
 for 
 field_path_element 
 in 
 error 
 . 
 location 
 . 
 field_path_elements 
 : 
 print 
 ( 
 f 
 " 
 \t\t 
 On field: 
 { 
 field_path_element 
 . 
 field_name 
 } 
 " 
 ) 
 sys 
 . 
 exit 
 ( 
 1 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 parser 
 = 
 argparse 
 . 
 ArgumentParser 
 ( 
 description 
 = 
 ( 
 "Adds a list of negative broad match keywords to the " 
 "provided campaign, for the specified customer." 
 ) 
 ) 
 # The following argument(s) should be provided to run the example. 
 parser 
 . 
 add_argument 
 ( 
 "-c" 
 , 
 "--customer_id" 
 , 
 type 
 = 
 str 
 , 
 required 
 = 
 True 
 , 
 help 
 = 
 "The Google Ads customer ID." 
 , 
 ) 
 parser 
 . 
 add_argument 
 ( 
 "-i" 
 , 
 "--campaign_id" 
 , 
 type 
 = 
 str 
 , 
 required 
 = 
 True 
 , 
 help 
 = 
 "The campaign ID." 
 ) 
 args 
 = 
 parser 
 . 
 parse_args 
 () 
 # GoogleAdsClient will read the google-ads.yaml configuration file in the 
 # home directory if none is specified. 
 googleads_client 
 : 
 GoogleAdsClient 
 = 
 GoogleAdsClient 
 . 
 load_from_storage 
 ( 
 version 
 = 
 "v21" 
 ) 
 main 
 ( 
 googleads_client 
 , 
 args 
 . 
 customer_id 
 , 
 args 
 . 
 campaign_id 
 ) 
  

Ruby

 #!/usr/bin/env ruby 
 # Encoding: utf-8 
 # 
 # Copyright 2018 Google LLC 
 # 
 # Licensed under the Apache License, Version 2.0 (the "License"); 
 # you may not use this file except in compliance with the License. 
 # You may obtain a copy of the License at 
 # 
 #     https://www.apache.org/licenses/LICENSE-2.0 
 # 
 # Unless required by applicable law or agreed to in writing, software 
 # distributed under the License is distributed on an "AS IS" BASIS, 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 # See the License for the specific language governing permissions and 
 # limitations under the License. 
 # 
 # This example creates a shared list of negative broad match keywords. It then 
 # attaches them to a campaign. 
 require 
  
 "optparse" 
 require 
  
 "google/ads/google_ads" 
 require 
  
 "date" 
 def 
  
 create_and_attach_shared_keyword_set 
 ( 
 customer_id 
 , 
  
 campaign_id 
 ) 
  
 # GoogleAdsClient will read a config file from 
  
 # ENV['HOME']/google_ads_config.rb when called without parameters 
  
 client 
  
 = 
  
 Google 
 :: 
 Ads 
 :: 
 GoogleAds 
 :: 
 GoogleAdsClient 
 . 
 new 
  
 # Keywords to create a shared set of. 
  
 keywords 
  
 = 
  
 [ 
 "mars cruise" 
 , 
  
 "mars hotels" 
 ] 
  
 # Create shared negative keyword set. 
  
 shared_set 
  
 = 
  
 client 
 . 
 resource 
 . 
 shared_set 
  
 do 
  
 | 
 ss 
 | 
  
 ss 
 . 
 name 
  
 = 
  
 "API Negative keyword list - 
 #{ 
 ( 
 Time 
 . 
 new 
 . 
 to_f 
  
 * 
  
 1000 
 ) 
 . 
 to_i 
 } 
 " 
  
 ss 
 . 
 type 
  
 = 
  
 :NEGATIVE_KEYWORDS 
  
 end 
  
 operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 shared_set 
 ( 
 shared_set 
 ) 
  
 response 
  
 = 
  
 client 
 . 
 service 
 . 
 shared_set 
 . 
 mutate_shared_sets 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 operations 
 : 
  
 [ 
 operation 
 ] 
 , 
  
 ) 
  
 shared_set_resource_name 
  
 = 
  
 response 
 . 
 results 
 . 
 first 
 . 
 resource_name 
  
 puts 
  
 "Created shared set 
 #{ 
 shared_set_resource_name 
 } 
 " 
  
 shared_criteria 
  
 = 
  
 keywords 
 . 
 map 
  
 do 
  
 | 
 keyword 
 | 
  
 client 
 . 
 resource 
 . 
 shared_criterion 
  
 do 
  
 | 
 sc 
 | 
  
 sc 
 . 
 keyword 
  
 = 
  
 client 
 . 
 resource 
 . 
 keyword_info 
  
 do 
  
 | 
 kw 
 | 
  
 kw 
 . 
 text 
  
 = 
  
 keyword 
  
 kw 
 . 
 match_type 
  
 = 
  
 :BROAD 
  
 end 
  
 sc 
 . 
 shared_set 
  
 = 
  
 shared_set_resource_name 
  
 end 
  
 end 
  
 operations 
  
 = 
  
 shared_criteria 
 . 
 map 
  
 do 
  
 | 
 criterion 
 | 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 shared_criterion 
 ( 
 criterion 
 ) 
  
 end 
  
 response 
  
 = 
  
 client 
 . 
 service 
 . 
 shared_criterion 
 . 
 mutate_shared_criteria 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 operations 
 : 
  
 operations 
 , 
  
 ) 
  
 response 
 . 
 results 
 . 
 each 
  
 do 
  
 | 
 result 
 | 
  
 puts 
  
 "Created shared criterion 
 #{ 
 result 
 . 
 resource_name 
 } 
 " 
  
 end 
  
 campaign_set 
  
 = 
  
 client 
 . 
 resource 
 . 
 campaign_shared_set 
  
 do 
  
 | 
 css 
 | 
  
 css 
 . 
 campaign 
  
 = 
  
 client 
 . 
 path 
 . 
 campaign 
 ( 
 customer_id 
 , 
  
 campaign_id 
 ) 
  
 css 
 . 
 shared_set 
  
 = 
  
 shared_set_resource_name 
  
 end 
  
 operation 
  
 = 
  
 client 
 . 
 operation 
 . 
 create_resource 
 . 
 campaign_shared_set 
 ( 
 campaign_set 
 ) 
  
 response 
  
 = 
  
 client 
 . 
 service 
 . 
 campaign_shared_set 
 . 
 mutate_campaign_shared_sets 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 operations 
 : 
  
 [ 
 operation 
 ] 
 , 
  
 ) 
  
 puts 
  
 "Created campaign shared set 
 #{ 
 response 
 . 
 results 
 . 
 first 
 . 
 resource_name 
 } 
 " 
 end 
 if 
  
 __FILE__ 
  
 == 
  
 $PROGRAM_NAME 
  
 options 
  
 = 
  
 {} 
  
 # The following parameter(s) should be provided to run the example. You can 
  
 # either specify these by changing the INSERT_XXX_ID_HERE values below, or on 
  
 # the command line. 
  
 # 
  
 # Parameters passed on the command line will override any parameters set in 
  
 # code. 
  
 # 
  
 # Running the example with -h will print the command line usage. 
  
 options 
 [ 
 :customer_id 
 ] 
  
 = 
  
 'INSERT_CUSTOMER_ID_HERE' 
  
 options 
 [ 
 :campaign_id 
 ] 
  
 = 
  
 'INSERT_CAMPAIGN_ID_HERE' 
  
 OptionParser 
 . 
 new 
  
 do 
  
 | 
 opts 
 | 
  
 opts 
 . 
 banner 
  
 = 
  
 sprintf 
 ( 
 'Usage: ruby %s [options]' 
 , 
  
 File 
 . 
 basename 
 ( 
 __FILE__ 
 )) 
  
 opts 
 . 
 separator 
  
 '' 
  
 opts 
 . 
 separator 
  
 'Options:' 
  
 opts 
 . 
 on 
 ( 
 '-C' 
 , 
  
 '--customer-id CUSTOMER-ID' 
 , 
  
 String 
 , 
  
 'Customer ID' 
 ) 
  
 do 
  
 | 
 v 
 | 
  
 options 
 [ 
 :customer_id 
 ] 
  
 = 
  
 v 
  
 end 
  
 opts 
 . 
 on 
 ( 
 '-c' 
 , 
  
 '--campaign-id CAMPAIGN-ID' 
 , 
  
 String 
 , 
  
 'Campaign ID' 
 ) 
  
 do 
  
 | 
 v 
 | 
  
 options 
 [ 
 :campaign_id 
 ] 
  
 = 
  
 v 
  
 end 
  
 opts 
 . 
 separator 
  
 '' 
  
 opts 
 . 
 separator 
  
 'Help:' 
  
 opts 
 . 
 on_tail 
 ( 
 '-h' 
 , 
  
 '--help' 
 , 
  
 'Show this message' 
 ) 
  
 do 
  
 puts 
  
 opts 
  
 exit 
  
 end 
  
 end 
 . 
 parse! 
  
 begin 
  
 create_and_attach_shared_keyword_set 
 ( 
 options 
 . 
 fetch 
 ( 
 :customer_id 
 ) 
 . 
 tr 
 ( 
 "-" 
 , 
  
 "" 
 ), 
  
 options 
 [ 
 :campaign_id 
 ] 
 ) 
  
 rescue 
  
 Google 
 :: 
 Ads 
 :: 
 GoogleAds 
 :: 
 Errors 
 :: 
 GoogleAdsError 
  
 = 
>  
 e 
  
 e 
 . 
 failure 
 . 
 errors 
 . 
 each 
  
 do 
  
 | 
 error 
 | 
  
 STDERR 
 . 
 printf 
 ( 
 "Error with message: %s 
 \n 
 " 
 , 
  
 error 
 . 
 message 
 ) 
  
 if 
  
 error 
 . 
 location 
  
 error 
 . 
 location 
 . 
 field_path_elements 
 . 
 each 
  
 do 
  
 | 
 field_path_element 
 | 
  
 STDERR 
 . 
 printf 
 ( 
 " 
 \t 
 On field: %s 
 \n 
 " 
 , 
  
 field_path_element 
 . 
 field_name 
 ) 
  
 end 
  
 end 
  
 error 
 . 
 error_code 
 . 
 to_h 
 . 
 each 
  
 do 
  
 | 
 k 
 , 
  
 v 
 | 
  
 next 
  
 if 
  
 v 
  
 == 
  
 :UNSPECIFIED 
  
 STDERR 
 . 
 printf 
 ( 
 " 
 \t 
 Type: %s 
 \n\t 
 Code: %s 
 \n 
 " 
 , 
  
 k 
 , 
  
 v 
 ) 
  
 end 
  
 end 
  
 raise 
  
 end 
 end 
  
  

Perl

 #!/usr/bin/perl -w 
 # 
 # Copyright 2019, Google LLC 
 # 
 # Licensed under the Apache License, Version 2.0 (the "License"); 
 # you may not use this file except in compliance with the License. 
 # You may obtain a copy of the License at 
 # 
 #     http://www.apache.org/licenses/LICENSE-2.0 
 # 
 # Unless required by applicable law or agreed to in writing, software 
 # distributed under the License is distributed on an "AS IS" BASIS, 
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 # See the License for the specific language governing permissions and 
 # limitations under the License. 
 # 
 # This example creates a shared list of negative broad match keywords. It then 
 # attaches them to a campaign. 
 use 
  
 strict 
 ; 
 use 
  
 warnings 
 ; 
 use 
  
 utf8 
 ; 
 use 
  
 FindBin 
  
 qw($Bin) 
 ; 
 use 
  
 lib 
  
 "$Bin/../../lib" 
 ; 
 use 
  
 Google::Ads::GoogleAds::Client 
 ; 
 use 
  
 Google::Ads::GoogleAds::Utils::GoogleAdsHelper 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Resources::SharedSet 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Resources::SharedCriterion 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Resources::CampaignSharedSet 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Common::KeywordInfo 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Enums::SharedSetTypeEnum 
  
 qw(NEGATIVE_KEYWORDS) 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Enums::KeywordMatchTypeEnum 
  
 qw(BROAD) 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Services::SharedSetService::SharedSetOperation 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Services::SharedCriterionService::SharedCriterionOperation 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Services::CampaignSharedSetService::CampaignSharedSetOperation 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames 
 ; 
 use 
  
 Getopt::Long 
  
 qw(:config auto_help) 
 ; 
 use 
  
 Pod::Usage 
 ; 
 use 
  
 Cwd 
  
 qw(abs_path) 
 ; 
 use 
  
 Data::Uniqid 
  
 qw(uniqid) 
 ; 
 # The following parameter(s) should be provided to run the example. You can 
 # either specify these by changing the INSERT_XXX_ID_HERE values below, or on 
 # the command line. 
 # 
 # Parameters passed on the command line will override any parameters set in 
 # code. 
 # 
 # Running the example with -h will print the command line usage. 
 my 
  
 $customer_id 
  
 = 
  
 "INSERT_CUSTOMER_ID_HERE" 
 ; 
 my 
  
 $campaign_id 
  
 = 
  
 "INSERT_CAMPAIGN_ID_HERE" 
 ; 
 sub 
  
 create_and_attach_shared_keyword_set 
  
 { 
  
 my 
  
 ( 
 $api_client 
 , 
  
 $customer_id 
 , 
  
 $campaign_id 
 ) 
  
 = 
  
 @_ 
 ; 
  
 # Create shared negative keyword set. 
  
 my 
  
 $shared_set 
  
 = 
  
 Google::Ads::GoogleAds::V21::Resources:: 
 SharedSet 
 - 
> new 
 ({ 
  
 name 
  
 = 
>  
 "API Negative keyword list - " 
  
 . 
  
 uniqid 
 (), 
  
 type 
  
 = 
>  
 NEGATIVE_KEYWORDS 
  
 }); 
  
 my 
  
 $shared_set_operation 
  
 = 
  
 Google::Ads::GoogleAds::V21::Services::SharedSetService:: 
 SharedSetOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 $shared_set 
  
 }); 
  
 my 
  
 $shared_sets_response 
  
 = 
  
 $api_client 
 - 
> SharedSetService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 operations 
  
 = 
>  
 [ 
 $shared_set_operation 
 ]}); 
  
 my 
  
 $shared_set_resource_name 
  
 = 
  
 $shared_sets_response 
 - 
> { 
 results 
 }[ 
 0 
 ]{ 
 resourceName 
 }; 
  
 printf 
  
 "Created shared set: '%s'.\n" 
 , 
  
 $shared_set_resource_name 
 ; 
  
 # Create shared set criterion. 
  
 my 
  
 $shared_criterion_operations 
  
 = 
  
 [] 
 ; 
  
 # Keywords to create a shared set of. 
  
 my 
  
 $keywords 
  
 = 
  
 [ 
 'mars cruise' 
 , 
  
 'mars hotels' 
 ]; 
  
 foreach 
  
 my 
  
 $keyword 
  
 ( 
 @$keywords 
 ) 
  
 { 
  
 my 
  
 $shared_criterion 
  
 = 
  
 Google::Ads::GoogleAds::V21::Resources:: 
 SharedCriterion 
 - 
> new 
 ({ 
  
 keyword 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Common:: 
 KeywordInfo 
 - 
> new 
 ({ 
  
 text 
  
 = 
>  
 $keyword 
 , 
  
 matchType 
  
 = 
>  
 BROAD 
  
 } 
  
 ), 
  
 sharedSet 
  
 = 
>  
 $shared_set_resource_name 
  
 }); 
  
 my 
  
 $shared_criterion_operation 
  
 = 
  
 Google::Ads::GoogleAds::V21::Services::SharedCriterionService:: 
 SharedCriterionOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 $shared_criterion 
  
 }); 
  
 push 
  
 @$shared_criterion_operations 
 , 
  
 $shared_criterion_operation 
 ; 
  
 } 
  
 my 
  
 $shared_criteria_response 
  
 = 
  
 $api_client 
 - 
> SharedCriterionService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 operations 
  
 = 
>  
 $shared_criterion_operations 
  
 }); 
  
 my 
  
 $shared_criterion_results 
  
 = 
  
 $shared_criteria_response 
 - 
> { 
 results 
 }; 
  
 printf 
  
 "Added %d shared criterion:\n" 
 , 
  
 scalar 
  
 @$shared_criterion_results 
 ; 
  
 foreach 
  
 my 
  
 $shared_criterion_result 
  
 ( 
 @$shared_criterion_results 
 ) 
  
 { 
  
 printf 
  
 "\t%s\n" 
 , 
  
 $shared_criterion_result 
 - 
> { 
 resourceName 
 }; 
  
 } 
  
 # Create campaign shared set. 
  
 my 
  
 $campaign_shared_set 
  
 = 
  
 Google::Ads::GoogleAds::V21::Resources:: 
 CampaignSharedSet 
 - 
> new 
 ({ 
  
 campaign 
  
 = 
>  
 Google::Ads::GoogleAds::V21::Utils::ResourceNames:: 
 campaign 
 ( 
  
 $customer_id 
 , 
  
 $campaign_id 
  
 ), 
  
 sharedSet 
  
 = 
>  
 $shared_set_resource_name 
  
 }); 
  
 my 
  
 $campaign_shared_set_operation 
  
 = 
  
 Google::Ads::GoogleAds::V21::Services::CampaignSharedSetService:: 
 CampaignSharedSetOperation 
  
 - 
> new 
 ({ 
  
 create 
  
 = 
>  
 $campaign_shared_set 
  
 }); 
  
 my 
  
 $campaign_shared_sets_response 
  
 = 
  
 $api_client 
 - 
> CampaignSharedSetService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 operations 
  
 = 
>  
 [ 
 $campaign_shared_set_operation 
 ]}); 
  
 printf 
  
 "Created campaign shared set: '%s'.\n" 
 , 
  
 $campaign_shared_sets_response 
 - 
> { 
 results 
 }[ 
 0 
 ]{ 
 resourceName 
 }; 
  
 return 
  
 1 
 ; 
 } 
 # Don't run the example if the file is being included. 
 if 
  
 ( 
 abs_path 
 ( 
 $0 
 ) 
  
 ne 
  
 abs_path 
 ( 
 __FILE__ 
 )) 
  
 { 
  
 return 
  
 1 
 ; 
 } 
 # Get Google Ads Client, credentials will be read from ~/googleads.properties. 
 my 
  
 $api_client 
  
 = 
  
 Google::Ads::GoogleAds:: 
 Client 
 - 
> new 
 (); 
 # By default examples are set to die on any server returned fault. 
 $api_client 
 - 
> set_die_on_faults 
 ( 
 1 
 ); 
 # Parameters passed on the command line will override any parameters set in code. 
 GetOptions 
 ( 
 "customer_id=s" 
  
 = 
>  
 \ 
 $customer_id 
 , 
  
 "campaign_id=i" 
  
 = 
>  
 \ 
 $campaign_id 
 ); 
 # Print the help message if the parameters are not initialized in the code nor 
 # in the command line. 
 pod2usage 
 ( 
 2 
 ) 
  
 if 
  
 not 
  
 check_params 
 ( 
 $customer_id 
 , 
  
 $campaign_id 
 ); 
 # Call the example. 
 create_and_attach_shared_keyword_set 
 ( 
 $api_client 
 , 
  
 $customer_id 
  
 =~ 
  
 s/-//g 
 r 
 , 
  
 $campaign_id 
 ); 
 =pod 
 =head1 NAME 
 create_and_attach_shared_keyword_set 
 =head1 DESCRIPTION 
 This example creates a shared list of negative broad match keywords. It then attaches 
 them to a campaign. 
 =head1 SYNOPSIS 
 create_and_attach_shared_keyword_set.pl [options] 
 -help                       Show the help message. 
 -customer_id                The Google Ads customer ID. 
 -campaign_id                The campaign ID. 
 =cut 
  
  
Design a Mobile Site
View Site in Mobile | Classic
Share by: