Basic usage

  • Initialize the client library by creating a GoogleAdsConfig object with necessary settings and then using it to create a GoogleAdsClient instance.

  • The GoogleAdsClient instance is crucial for creating pre-configured service classes that make API calls.

  • Use the GetService method of the GoogleAdsClient instance with the appropriate Services enumeration to create a specific Ads service.

  • Handle potential API errors by catching the GoogleAdsException which provides details about the failure.

  • Avoid sharing a single GoogleAdsClient instance across multiple threads due to potential configuration conflicts.

  • To keep applications responsive when making API calls, consider using the Grpc.Core library for legacy .NET Framework applications or utilizing asynchronous methods.

The basic usage of the client library is as follows:

  // Initialize a GoogleAdsConfig class. 
 GoogleAdsConfig 
  
 config 
  
 = 
  
 new 
  
 GoogleAdsConfig 
 () 
 { 
  
 DeveloperToken 
  
 = 
  
 "******" 
 , 
  
 OAuth2Mode 
  
 = 
  
 OAuth2Flow 
 . 
 SERVICE_ACCOUNT 
 , 
  
 OAuth2SecretsJsonPath 
  
 = 
  
 "PATH_TO_CREDENTIALS_JSON" 
 , 
  
 LoginCustomerId 
  
 = 
  
 ****** 
 }; 
 // Initialize a GoogleAdsClient class. 
 GoogleAdsClient 
  
 client 
  
 = 
  
 new 
  
 GoogleAdsClient 
 ( 
 config 
 ); 
 // Create the required service. 
 CampaignServiceClient 
  
 campaignService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
 Services 
 . 
 V22 
 . 
 CampaignService 
 ); 
 // Make more calls to service class. 
 

Create a GoogleAdsClient instance

The most important classes in the Google Ads API .NET library is the GoogleAdsClient class. It lets you create a pre-configured service class that can be used for making API calls. To configure a GoogleAdsClient object, you need to create a GoogleAdsConfig object and set the necessary settings. Refer to the Configuration guide to learn more.

  // Initialize a GoogleAdsConfig class. 
 GoogleAdsConfig 
  
 config 
  
 = 
  
 new 
  
 GoogleAdsConfig 
 () 
 { 
  
 DeveloperToken 
  
 = 
  
 "******" 
 , 
  
 OAuth2Mode 
  
 = 
  
 OAuth2Flow 
 . 
 SERVICE_ACCOUNT 
 , 
  
 OAuth2SecretsJsonPath 
  
 = 
  
 "PATH_TO_CREDENTIALS_JSON" 
 , 
  
 LoginCustomerId 
  
 = 
  
 ****** 
 }; 
 // Initialize a GoogleAdsClient class. 
 GoogleAdsClient 
  
 client 
  
 = 
  
 new 
  
 GoogleAdsClient 
 ( 
 config 
 ); 
 // Modify the GoogleAdsClient afterwards. 
 client 
 . 
 Config 
 . 
 LoginCustomerId 
  
 = 
  
 ****** 
 ; 
 

Create a service

GoogleAdsClient provides a GetService method that can be used to create an Ads service.

  CampaignServiceClient 
  
 campaignService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V22 
 . 
 CampaignService 
 ); 
 // Now make calls to CampaignService. 
 

We provide a Services class that enumerates all the supported API versions and services. The GetService method accepts these enumeration objects as argument when creating the service. For example, to create an instance of CampaignServiceClient for version V22 of the Google Ads API, you need to call the GoogleAdsClient.GetService method with Services.V22.CampaignService as the argument, as shown in the previous example.

Error handling

Not every API call will succeed. The server can throw errors if your API calls fail for some reason. It is important to capture API errors and handle them appropriately.

A GoogleAdsException instance is thrown when an API error occurs. It has details to help you figure out what went wrong:

 public 
  
 void 
  
 Run 
 ( 
 GoogleAdsClient 
  
 client 
 , 
  
 long 
  
 customerId 
 ) 
 { 
  
 // Get the GoogleAdsService. 
  
 GoogleAdsServiceClient 
  
 googleAdsService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V22 
 . 
 GoogleAdsService 
 ); 
  
 // Create a query that will retrieve all campaigns. 
  
 string 
  
 query 
  
 = 
  
 @"SELECT 
  
 campaign 
 . 
 id 
 , 
  
 campaign 
 . 
 name 
 , 
  
 campaign 
 . 
 network_settings 
 . 
 target_content_network 
  
 FROM 
  
 campaign 
  
 ORDER 
  
 BY 
  
 campaign 
 . 
 id 
 "; 
  
 try 
  
 { 
  
 // Issue a search request. 
  
 googleAdsService 
 . 
 SearchStream 
 ( 
 customerId 
 . 
 ToString 
 (), 
  
 query 
 , 
  
 delegate 
  
 ( 
 SearchGoogleAdsStreamResponse 
  
 resp 
 ) 
  
 { 
  
 foreach 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 in 
  
 resp 
 . 
 Results 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Campaign with ID {0} and name '{1}' was found." 
 , 
  
 googleAdsRow 
 . 
 Campaign 
 . 
 Id 
 , 
  
 googleAdsRow 
 . 
 Campaign 
 . 
 Name 
 ); 
  
 } 
  
 } 
  
 ); 
  
 } 
  
 catch 
  
 ( 
 GoogleAdsException 
  
 e 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Failure:" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $ 
 "Message: {e.Message}" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $ 
 "Failure: {e.Failure}" 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $ 
 "Request ID: {e.RequestId}" 
 ); 
  
 throw 
 ; 
  
 } 
 } 
  
  

Thread safety

It is not safe to share a GoogleAdsClient instance between multiple threads, since the configuration changes you make on an instance in one thread might affect the services you create on other threads. Operations like obtaining new service instances from a GoogleAdsClient instance and making calls to multiple services in parallel are thread-safe.

A multithreaded application would look something like this:

  GoogleAdsClient 
  
 client1 
  
 = 
  
 new 
  
 GoogleAdsClient 
 (); 
 GoogleAdsClient 
  
 client2 
  
 = 
  
 new 
  
 GoogleAdsClient 
 (); 
 Thread 
  
 userThread1 
  
 = 
  
 new 
  
 Thread 
 ( 
 addAdGroups 
 ); 
 Thread 
  
 userThread2 
  
 = 
  
 new 
  
 Thread 
 ( 
 addAdGroups 
 ); 
 userThread1 
 . 
 start 
 ( 
 client1 
 ); 
 userThread2 
 . 
 start 
 ( 
 client2 
 ); 
 userThread1 
 . 
 join 
 (); 
 userThread2 
 . 
 join 
 (); 
 public 
  
 void 
  
 addAdGroups 
 ( 
 object 
  
 data 
 ) 
  
 { 
  
 GoogleAdsClient 
  
 client 
  
 = 
  
 ( 
 GoogleAdsClient 
 ) 
  
 data 
 ; 
  
 // Do more operations here. 
  
 ... 
 } 
 

Keep your application responsive

The Google Ads API API method calls may take a while to complete, depending on how big the requests are. To keep your application responsive, we recommend the following steps:

Use the Grpc.Core library

If you are developing an application that targets .NET Framework and uses a legacy technology such as ASP.NET Web Forms or WinForms application, we recommend using the legacy Grpc.Core library as follows:

   
 GoogleAdsConfig 
  
 config 
  
 = 
  
 new 
  
 GoogleAdsConfig 
 (); 
  
 config 
 . 
 UseGrpcCore 
  
 = 
  
 true 
 ; 
  
 GoogleAdsClient 
  
 client 
  
 = 
  
 new 
  
 GoogleAdsClient 
 ( 
 config 
 ); 
  
 ``` 
 ### 
  
 Use 
  
 the 
  
 asynchronous 
  
 methods 
  
 {: 
  
 # 
 asynchronous 
 } 
 You 
  
 can 
  
 use 
  
 asynchronous 
  
 methods 
  
 to 
  
 keep 
  
 your 
  
 application 
  
 responsive 
 . 
  
 Here 
  
 are 
  
 a 
 couple 
  
 of 
  
 examples 
 . 
 #### 
  
 Retrieve 
  
 the 
  
 list 
  
 of 
  
 campaigns 
 , 
  
 and 
  
 populate 
  
 a 
  
 ` 
 ListView 
 ` 
 ``` 
 c 
 # 
 private 
  
 async 
  
 void 
  
 button1_Click 
 ( 
 object 
  
 sender 
 , 
  
 EventArgs 
  
 e 
 ) 
 { 
  
 // Get the GoogleAdsService. 
  
 GoogleAdsServiceClient 
  
 googleAdsService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V22 
 . 
 GoogleAdsService 
 ); 
  
 // Create a query that will retrieve all campaigns. 
  
 string 
  
 query 
  
 = 
  
 @"SELECT 
 campaign.id, 
 campaign.name, 
 campaign.network_settings.target_content_network 
 FROM campaign 
 ORDER BY campaign.id" 
 ; 
  
 List<ListViewItem> 
  
 items 
  
 = 
  
 new 
  
 List<ListViewItem> 
 (); 
  
 Task 
  
 t 
  
 = 
  
 googleAdsService 
 . 
 SearchStreamAsync 
 ( 
 customerId 
 . 
 ToString 
 (), 
  
 query 
 , 
  
 delegate 
  
 ( 
 SearchGoogleAdsStreamResponse 
  
 resp 
 ) 
  
 { 
  
 foreach 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 in 
  
 resp 
 . 
 Results 
 ) 
  
 { 
  
 ListViewItem 
  
 item 
  
 = 
  
 new 
  
 ListViewItem 
 (); 
  
 item 
 . 
 Text 
  
 = 
  
 googleAdsRow 
 . 
 Campaign 
 . 
 Id 
 . 
 ToString 
 (); 
  
 item 
 . 
 SubItems 
 . 
 Add 
 ( 
 googleAdsRow 
 . 
 Campaign 
 . 
 Name 
 ); 
  
 items 
 . 
 Add 
 ( 
 item 
 ); 
  
 } 
  
 } 
  
 ); 
  
 await 
  
 t 
 ; 
  
 listView1 
 . 
 Items 
 . 
 AddRange 
 ( 
 items 
 . 
 ToArray 
 ()); 
 } 
 ``` 
 #### 
  
 Update 
  
 a 
  
 campaign 
  
 budget 
  
 and 
  
 display 
  
 a 
  
 Message 
  
 box 
  
 alert 
 ``` 
 c 
 # 
 private 
  
 async 
  
 void 
  
 button2_Click 
 ( 
 object 
  
 sender 
 , 
  
 EventArgs 
  
 e 
 ) 
 { 
  
 // Get the BudgetService. 
  
 CampaignBudgetServiceClient 
  
 budgetService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V22 
 . 
 CampaignBudgetService 
 ); 
  
 // Create the campaign budget. 
  
 CampaignBudget 
  
 budget 
  
 = 
  
 new 
  
 CampaignBudget 
 () 
  
 { 
  
 Name 
  
 = 
  
 "Interplanetary Cruise Budget #" 
  
 + 
  
 ExampleUtilities 
 . 
 GetRandomString 
 (), 
  
 DeliveryMethod 
  
 = 
  
 BudgetDeliveryMethod 
 . 
 Standard 
 , 
  
 AmountMicros 
  
 = 
  
 500000 
  
 }; 
  
 // Create the operation. 
  
 CampaignBudgetOperation 
  
 budgetOperation 
  
 = 
  
 new 
  
 CampaignBudgetOperation 
 () 
  
 { 
  
 Create 
  
 = 
  
 budget 
  
 }; 
  
 // Create the campaign budget. 
  
 Task<MutateCampaignBudgetsResponse> 
  
 t 
  
 = 
  
 budgetService 
 . 
 MutateCampaignBudgetsAsync 
 ( 
  
 customerId 
 . 
 ToString 
 (), 
  
 new 
  
 CampaignBudgetOperation 
 [] 
  
 { 
  
 budgetOperation 
  
 }); 
  
 await 
  
 t 
 ; 
  
 MutateCampaignBudgetsResponse 
  
 response 
  
 = 
  
 t 
 . 
 Result 
 ; 
  
 MessageBox 
 . 
 Show 
 ( 
 response 
 . 
 Results 
 [ 
 0 
 ]. 
 ResourceName 
 ); 
 } 
 ``` 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: