The [`login-customer-id`](https://developers.google.com/search-ads/reporting/concepts/call-structure.md.txt#login_customer_id_header) 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.

![](https://developers.google.com/static/search-ads/images/logincustomerid_ui_corner.png)

> [!NOTE]
> **Note:** The API accepts a 10-digit numeric value for the 'login-customer-id'. The 'login-customer-id' value in the user interface contains dashes. Remove the dashes when passing the value to the API. In this example, you would change the 'login-customer-id', 123-456-7890, to 1234567890.

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](https://developers.google.com/adwords/api/docs/guides/accounts-overview#oauth2_credentials)
of a manager account, follow these steps to obtain the correct
`login-customer-id` value:

1. **List accessible customers**   

   <br />

   ### Java


   ```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());
       }
     }
   }
   ```

   <br />

   [Download GetCustomerClient.java](https://developers.google.com/search-ads/reporting/sample-code/GetCustomerClient.java)

   ### Python


   ```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()
   ```

   <br />

   [Download get_customer_client.py](https://developers.google.com/search-ads/reporting/sample-code/get_customer_client.py)

   <br />

2. **Determine manager account hierarchy**   

   <br />

   ### Java


   ```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());
         }
       }
     }
   }
   ```

   <br />

   [Download GetManagersStream.java](https://developers.google.com/search-ads/reporting/sample-code/GetManagersStream.java)

   ### Python


   ```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()
   ```

   <br />

   [Download get_managers_stream.py](https://developers.google.com/search-ads/reporting/sample-code/get_managers_stream.py)

   <br />

3. **Select the appropriate manager account.**   

   <br />

   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.

<br />