Login customer ID

  • The login-customer-id header is required in the Search Ads 360 Reporting API when using a manager account to access an operating customer account but not when accessing an operating customer account directly.

  • To retrieve the login-customer-id , you can access it from the Search Ads 360 user interface or use provided code samples to list accessible customers and determine manager account hierarchy.

  • When using the login-customer-id value in the API, ensure to remove the dashes present in the user interface display.

  • If an authenticated user has access to both manager and operating customer accounts, specifying login-customer-id is recommended to avoid ambiguity and set the context correctly.

  • For users managing accounts with OAuth2 credentials, obtaining the correct login-customer-id involves listing accessible customers, determining the manager account hierarchy, and selecting the top-level manager account for consistency across calls within the hierarchy.

The login-customer-id is a required header in the Search Ads 360 Reporting API when using a manager account to access an operating customer account. If accessing an operating customer account directly, the login-customer-id header is not required.

One way to get the 'login-customer-id' is through the Search Ads 360 user interface. The 'login-customer-id' for the currently selected client account is displayed in the upper right corner of the screen.

If the authenticated user has access to both the manager and operating customer accounts, then login-customer-id should be specified to avoid any ambiguity. Though not specifying login-customer-id would still work in this case, the context is set to the operating customer account only (which is probably not what is intended).

If you've been managing accounts with just OAuth2 credentials of a manager account, follow these steps to obtain the correct login-customer-id value:

  1. List accessible customers

    Java

     // Copyright 2022 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 
      
     sample 
     ; 
     import 
      
     com.beust.jcommander.Parameter 
     ; 
     import 
      
     com.google.ads.searchads360.v0.lib.SearchAds360Client 
     ; 
     import 
      
     com.google.ads.searchads360.v0.resources.CustomerClient 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchAds360Row 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchAds360ServiceClient 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchAds360ServiceClient.SearchPagedResponse 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchSearchAds360Request 
     ; 
     /** Get customer client details. */ 
     public 
      
     class 
     GetCustomerClient 
      
     { 
      
     private 
      
     static 
      
     class 
     GetCustomerClientParams 
      
     extends 
      
     CodeSampleParams 
      
     { 
      
     @Parameter 
     ( 
     names 
      
     = 
      
     "--customerId" 
     , 
      
     required 
      
     = 
      
     true 
     ) 
      
     private 
      
     String 
      
     customerId 
     ; 
      
     @Parameter 
     ( 
     names 
      
     = 
      
     "--loginCustomerId" 
     ) 
      
     private 
      
     String 
      
     loginCustomerId 
     ; 
      
     } 
      
     public 
      
     static 
      
     void 
      
     main 
     ( 
     String 
     [] 
      
     args 
     ) 
      
     { 
      
     GetCustomerClientParams 
      
     params 
      
     = 
      
     new 
      
     GetCustomerClientParams 
     (); 
      
     if 
      
     ( 
     ! 
     params 
     . 
     parseArguments 
     ( 
     args 
     )) 
      
     { 
      
     // Optional: You may pass the loginCustomerId on the command line or specify a loginCustomerId 
      
     // here (10 digits, no dashes). If neither are set, customerId will be used as 
      
     // loginCustomerId. 
      
     // params.loginCustomerId = Long.parseLong("INSERT_LOGIN_CUSTOMER_ID_HERE"); 
      
     } 
      
     final 
      
     String 
      
     loginCustomerId 
      
     = 
      
     params 
     . 
     loginCustomerId 
     ; 
      
     final 
      
     String 
      
     customerId 
      
     = 
      
     params 
     . 
     customerId 
     ; 
      
     try 
      
     { 
      
     // Creates a SearchAds360Client with the specified loginCustomerId. If there's 
      
     // no loginCustomerId, customerId will be used instead. 
      
     final 
      
     SearchAds360Client 
      
     searchAds360Client 
      
     = 
      
     SearchAds360Client 
     . 
     newBuilder 
     () 
      
     . 
     setLoginCustomerId 
     ( 
     loginCustomerId 
      
     == 
      
     null 
      
     ? 
      
     customerId 
      
     : 
      
     loginCustomerId 
     ) 
      
     . 
     fromPropertiesFile 
     () 
      
     . 
     build 
     (); 
      
     // Creates the Search Ads 360 Service client. 
      
     SearchAds360ServiceClient 
      
     client 
      
     = 
      
     searchAds360Client 
     . 
     create 
     (); 
      
     new 
      
     GetCustomerClient 
     (). 
     runExample 
     ( 
     client 
     , 
      
     customerId 
     ); 
      
     } 
      
     catch 
      
     ( 
     Exception 
      
     exception 
     ) 
      
     { 
      
     System 
     . 
     err 
     . 
     printf 
     ( 
     "Failed with exception: %s%n" 
     , 
      
     exception 
     ); 
      
     exception 
     . 
     printStackTrace 
     (); 
      
     System 
     . 
     exit 
     ( 
     1 
     ); 
      
     } 
      
     } 
      
     private 
      
     void 
      
     runExample 
     ( 
     SearchAds360ServiceClient 
      
     searchAds360ServiceClient 
     , 
      
     String 
      
     customerId 
     ) 
      
     { 
      
     // Creates a query that retrieves all child accounts of the customerId specified in search 
      
     // calls below. 
      
     String 
      
     query 
      
     = 
      
     """ 
     SELECT 
     customer_client.descriptive_name, customer_client.client_customer, customer_client.status 
     FROM customer_client 
     """ 
     ; 
      
     SearchSearchAds360Request 
      
     request 
      
     = 
      
     SearchSearchAds360Request 
     . 
     newBuilder 
     (). 
     setCustomerId 
     ( 
     customerId 
     ). 
     setQuery 
     ( 
     query 
     ). 
     build 
     (); 
      
     // Issues a search request. 
      
     final 
      
     SearchPagedResponse 
      
     searchPagedResponse 
      
     = 
      
     searchAds360ServiceClient 
     . 
     search 
     ( 
     request 
     ); 
      
     for 
      
     ( 
     SearchAds360Row 
      
     element 
      
     : 
      
     searchPagedResponse 
     . 
     iterateAll 
     ()) 
      
     { 
      
     CustomerClient 
      
     customerClient 
      
     = 
      
     element 
     . 
     getCustomerClient 
     (); 
      
     System 
     . 
     out 
     . 
     printf 
     ( 
      
     "CustomerClient found with name '%s', customer %s, and status: %s.%n" 
     , 
      
     customerClient 
     . 
     getDescriptiveName 
     (), 
      
     customerClient 
     . 
     getClientCustomer 
     (), 
      
     customerClient 
     . 
     getStatus 
     ()); 
      
     } 
      
     } 
     } 
    
    Download GetCustomerClient.java

    Python

     #!/usr/bin/env python 
     # Copyright 2022 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. 
     """Retrieves customer_client for a customer using a pagination search request. 
     """ 
     import 
      
     argparse 
     import 
      
     traceback 
     from 
      
     google.ads.searchads360.v0.services.types.search_ads360_service 
      
     import 
     SearchSearchAds360Request 
     from 
      
     util_searchads360 
      
     import 
     SearchAds360Client 
     def 
      
     main 
     ( 
     client 
     , 
     customer_id 
     ) 
     - 
    > None 
     : 
     search_ads_360_service 
     = 
     client 
     . 
     get_service 
     () 
     query 
     = 
     """ 
     SELECT 
     customer_client.descriptive_name, 
     customer_client.client_customer, 
     customer_client.status 
     FROM customer_client""" 
     request 
     = 
     SearchSearchAds360Request 
     () 
     request 
     . 
     customer_id 
     = 
     customer_id 
     request 
     . 
     query 
     = 
     query 
     # Issues a search request. 
     results 
     = 
     search_ads_360_service 
     . 
     search 
     ( 
     request 
     = 
     request 
     ) 
     for 
     row 
     in 
     results 
     : 
     customer_client 
     = 
     row 
     . 
     customer_client 
     print 
     ( 
     f 
     "CustomerClient found with name 
     { 
     customer_client 
     . 
     descriptive_name 
     } 
     , customer 
     { 
     customer_client 
     . 
     client_customer 
     } 
     , and status: 
     { 
     customer_client 
     . 
     status 
     . 
     name 
     } 
     " 
     ) 
     if 
     __name__ 
     == 
     "__main__" 
     : 
     # SearchAds360Client will read the search-ads-360.yaml configuration file in 
     # the home directory if none is specified. 
     search_ads_360_client 
     = 
     SearchAds360Client 
     . 
     load_from_file 
     () 
     parser 
     = 
     argparse 
     . 
     ArgumentParser 
     ( 
     description 
     = 
     ( 
     "Retrieves customer_client for a customer." 
     )) 
     # Arguments to provide to run the example. 
     parser 
     . 
     add_argument 
     ( 
     "-c" 
     , 
     "--customer_id" 
     , 
     type 
     = 
     str 
     , 
     required 
     = 
     True 
     , 
     help 
     = 
     "The Search Ads 360 customer ID (10 digits, no dashes)." 
     , 
     ) 
     parser 
     . 
     add_argument 
     ( 
     "-l" 
     , 
     "--login_customer_id" 
     , 
     type 
     = 
     str 
     , 
     required 
     = 
     False 
     , 
     help 
     = 
     "The Search Ads 360 login customer ID (10 digits, no dashes)." 
     , 
     ) 
     args 
     = 
     parser 
     . 
     parse_args 
     () 
     search_ads_360_client 
     . 
     set_ids 
     ( 
     args 
     . 
     customer_id 
     , 
     args 
     . 
     login_customer_id 
     ) 
     try 
     : 
     main 
     ( 
     search_ads_360_client 
     , 
     args 
     . 
     customer_id 
     ) 
     except 
     Exception 
     : 
     # pylint: disable=broad-except 
     traceback 
     . 
     print_exc 
     () 
    
    Download get_customer_client.py
  2. Determine manager account hierarchy

    Java

     // Copyright 2022 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 
      
     sample 
     ; 
     import 
      
     com.beust.jcommander.Parameter 
     ; 
     import 
      
     com.google.ads.searchads360.v0.lib.SearchAds360Client 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchAds360Row 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchAds360ServiceClient 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchSearchAds360StreamRequest 
     ; 
     import 
      
     com.google.ads.searchads360.v0.services.SearchSearchAds360StreamResponse 
     ; 
     import 
      
     com.google.api.gax.rpc.ServerStream 
     ; 
     /** Get manager details. */ 
     public 
      
     class 
     GetManagersStream 
      
     { 
      
     private 
      
     static 
      
     class 
     GetManagersParams 
      
     extends 
      
     CodeSampleParams 
      
     { 
      
     @Parameter 
     ( 
     names 
      
     = 
      
     "--customerId" 
     , 
      
     required 
      
     = 
      
     true 
     ) 
      
     private 
      
     String 
      
     customerId 
     ; 
      
     @Parameter 
     ( 
     names 
      
     = 
      
     "--loginCustomerId" 
     ) 
      
     private 
      
     String 
      
     loginCustomerId 
     ; 
      
     } 
      
     public 
      
     static 
      
     void 
      
     main 
     ( 
     String 
     [] 
      
     args 
     ) 
      
     { 
      
     GetManagersParams 
      
     params 
      
     = 
      
     new 
      
     GetManagersParams 
     (); 
      
     if 
      
     ( 
     ! 
     params 
     . 
     parseArguments 
     ( 
     args 
     )) 
      
     { 
      
     // Optional: You may pass the loginCustomerId on the command line or specify a loginCustomerId 
      
     // here ((10 digits, no dashes). If neither are set, customerId will be used as 
      
     // loginCustomerId. 
      
     // params.loginCustomerId = Long.parseLong("INSERT_LOGIN_CUSTOMER_ID_HERE"); 
      
     } 
      
     final 
      
     String 
      
     loginCustomerId 
      
     = 
      
     params 
     . 
     loginCustomerId 
     ; 
      
     final 
      
     String 
      
     customerId 
      
     = 
      
     params 
     . 
     customerId 
     ; 
      
     try 
      
     { 
      
     // Creates a SearchAds360Client with the specified loginCustomerId. If there's 
      
     // no loginCustomerId, customerId will be used instead. 
      
     final 
      
     SearchAds360Client 
      
     searchAds360Client 
      
     = 
      
     SearchAds360Client 
     . 
     newBuilder 
     () 
      
     . 
     setLoginCustomerId 
     ( 
     loginCustomerId 
      
     == 
      
     null 
      
     ? 
      
     customerId 
      
     : 
      
     loginCustomerId 
     ) 
      
     . 
     fromPropertiesFile 
     () 
      
     . 
     build 
     (); 
      
     // Creates the Search Ads 360 Service client. 
      
     SearchAds360ServiceClient 
      
     client 
      
     = 
      
     searchAds360Client 
     . 
     create 
     (); 
      
     new 
      
     GetManagersStream 
     (). 
     runExample 
     ( 
     client 
     , 
      
     customerId 
     ); 
      
     } 
      
     catch 
      
     ( 
     Exception 
      
     exception 
     ) 
      
     { 
      
     System 
     . 
     err 
     . 
     printf 
     ( 
     "Failed with exception: %s%n" 
     , 
      
     exception 
     ); 
      
     exception 
     . 
     printStackTrace 
     (); 
      
     System 
     . 
     exit 
     ( 
     1 
     ); 
      
     } 
      
     } 
      
     private 
      
     void 
      
     runExample 
     ( 
     SearchAds360ServiceClient 
      
     searchAds360ServiceClient 
     , 
      
     String 
      
     customerId 
     ) 
      
     { 
      
     // Creates a query that retrieves manager for the customer. 
      
     String 
      
     query 
      
     = 
      
     """ 
     SELECT customer_manager_link.manager_customer, customer_manager_link.status 
     FROM customer_manager_link 
     """ 
     ; 
      
     SearchSearchAds360StreamRequest 
      
     request 
      
     = 
      
     SearchSearchAds360StreamRequest 
     . 
     newBuilder 
     () 
      
     . 
     setCustomerId 
     ( 
     customerId 
     ) 
      
     . 
     setQuery 
     ( 
     query 
     ) 
      
     . 
     build 
     (); 
      
     // Issues a search stream request. 
      
     ServerStream<SearchSearchAds360StreamResponse> 
      
     stream 
      
     = 
      
     searchAds360ServiceClient 
     . 
     searchStreamCallable 
     (). 
     call 
     ( 
     request 
     ); 
      
     for 
      
     ( 
     SearchSearchAds360StreamResponse 
      
     response 
      
     : 
      
     stream 
     ) 
      
     { 
      
     for 
      
     ( 
     SearchAds360Row 
      
     element 
      
     : 
      
     response 
     . 
     getResultsList 
     ()) 
      
     { 
      
     System 
     . 
     out 
     . 
     printf 
     ( 
      
     "Manager found with customer '%s' and status: %s.%n" 
     , 
      
     element 
     . 
     getCustomerManagerLink 
     (). 
     getManagerCustomer 
     (), 
      
     element 
     . 
     getCustomerManagerLink 
     (). 
     getStatus 
     ()); 
      
     } 
      
     } 
      
     } 
     } 
    
    Download GetManagersStream.java

    Python

     #!/usr/bin/env python 
     # Copyright 2022 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. 
     """Retrieves managers for a customer using a stream request.""" 
     import 
      
     argparse 
     import 
      
     traceback 
     from 
      
     google.ads.searchads360.v0.services.types.search_ads360_service 
      
     import 
     SearchSearchAds360StreamRequest 
     from 
      
     util_searchads360 
      
     import 
     SearchAds360Client 
     def 
      
     main 
     ( 
     client 
     , 
     customer_id 
     ) 
     - 
    > None 
     : 
     search_ads_360_service 
     = 
     client 
     . 
     get_service 
     () 
     query 
     = 
     """ 
     SELECT 
     customer_manager_link.manager_customer, 
     customer_manager_link.status 
     FROM customer_manager_link""" 
     request 
     = 
     SearchSearchAds360StreamRequest 
     () 
     request 
     . 
     customer_id 
     = 
     customer_id 
     request 
     . 
     query 
     = 
     query 
     # Issues a search stream request. 
     results 
     = 
     search_ads_360_service 
     . 
     search_stream 
     ( 
     request 
     = 
     request 
     ) 
     for 
     response 
     in 
     results 
     : 
     for 
     result 
     in 
     response 
     . 
     results 
     : 
     customer_manager_link 
     = 
     result 
     . 
     customer_manager_link 
     print 
     ( 
     f 
     "Manager found with customer 
     { 
     customer_manager_link 
     . 
     manager_customer 
     } 
     and status: 
     { 
     customer_manager_link 
     . 
     status 
     . 
     name 
     } 
     " 
     ) 
     if 
     __name__ 
     == 
     "__main__" 
     : 
     # SearchAds360Client will read the search-ads-360.yaml configuration file in 
     # the home directory if none is specified. 
     search_ads_360_client 
     = 
     SearchAds360Client 
     . 
     load_from_file 
     () 
     parser 
     = 
     argparse 
     . 
     ArgumentParser 
     ( 
     description 
     = 
     ( 
     "Retrieves managers for a customer." 
     )) 
     # Arguments to provide to run the example. 
     parser 
     . 
     add_argument 
     ( 
     "-c" 
     , 
     "--customer_id" 
     , 
     type 
     = 
     str 
     , 
     required 
     = 
     True 
     , 
     help 
     = 
     "The Search Ads 360 customer ID (10 digits, no dashes)." 
     , 
     ) 
     parser 
     . 
     add_argument 
     ( 
     "-l" 
     , 
     "--login_customer_id" 
     , 
     type 
     = 
     str 
     , 
     required 
     = 
     False 
     , 
     help 
     = 
     "The Search Ads 360 login customer ID (10 digits, no dashes)." 
     , 
     ) 
     args 
     = 
     parser 
     . 
     parse_args 
     () 
     search_ads_360_client 
     . 
     set_ids 
     ( 
     args 
     . 
     customer_id 
     , 
     args 
     . 
     login_customer_id 
     ) 
     try 
     : 
     main 
     ( 
     search_ads_360_client 
     , 
     args 
     . 
     customer_id 
     ) 
     except 
     Exception 
     : 
     # pylint: disable=broad-except 
     traceback 
     . 
     print_exc 
     () 
    
    Download get_managers_stream.py
  3. Select the appropriate manager account.

    If there are multiple manager accounts for a given operating customer account, select the manager account at the top of the hierarchy. This lets you maintain the same login-customer-id for multiple calls throughout the hierarchy of accounts and thereby avoid excessive switching.

Design a Mobile Site
View Site in Mobile | Classic
Share by: