The Java client library looks for a configuration file named `ads.properties` in
your home directory (`System.getProperty("user.home") + "/ads.properties"`, or
`~/ads.properties`). You can override this path and filename at runtime when
constructing the `GoogleAdsClient` using either of the following mechanisms:

- Call `fromPropertiesFile(PATH_TO_CONFIG_FILE)`, where `PATH_TO_CONFIG_FILE` is the `File` path and filename of your configuration file.
- Set the environment variable `GOOGLE_ADS_CONFIGURATION_FILE_PATH` to the path and filename of your configuration file, and then call `fromPropertiesFile()`.

The format of the configuration file is a standard Java
[Properties](https://docs.oracle.com/javase/tutorial/essential/environment/properties.html) file of key-value pairs. The supported keys vary
depending on the chosen authentication flow.

## Supported keys for desktop and web application flows

If you are using the [single-user](https://developers.google.com/google-ads/api/docs/client-libs/java/authentication#single-user) or
[multi-user](https://developers.google.com/google-ads/api/docs/client-libs/java/authentication#multi-user) application flow, the supported keys are as
follows:

    # Credential for accessing Google's OAuth servers.
    # Provided by console.cloud.google.com.
    api.googleads.clientId=INSERT_CLIENT_ID_HERE

    # Credential for accessing Google's OAuth servers.
    # Provided by console.cloud.google.com.
    api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE

    # Renewable OAuth credential associated with 1 or more Google Ads accounts.
    api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE

    # Required for manager accounts only: Specify the login customer ID used to
    # authenticate API calls. This will be the customer ID of the authenticated
    # manager account. You can also specify this later in code if your application
    # uses multiple manager account + OAuth pairs.
    #
    # api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

    # Only required if explicitly instructed by the service documentation.
    # api.googleads.linkedCustomerId=INSERT_LINKED_CUSTOMER_ID_HERE

    # Maximum allowed response payload size, in bytes.
    # Customize this to allow response sizes for GoogleAdsService.search and
    # GoogleAdsService.searchStream API calls to exceed the default limit of 64MB.
    # api.googleads.maxInboundMessageBytes=INSERT_MAX_INBOUND_MESSAGE_BYTES_HERE

    # Specifies whether to use Application Default Credentials.
    api.googleads.useApplicationDefaultCredentials=false

## Supported keys for service accounts

If you are using the [service account](https://developers.google.com/google-ads/api/docs/client-libs/java/authentication#service-account) flow, the
supported keys are as follows:

    # Path to the service account secrets file in JSON format.
    # Provided by console.cloud.google.com.
    api.googleads.serviceAccountSecretsPath=INSERT_PATH_TO_JSON_HERE

    # Optional: Email address of the user to impersonate when using Google Workspace
    # domain-wide delegation. This should be a user who has access to your Google Ads
    # account and is in the same Google Workspace domain as the service account.
    # api.googleads.serviceAccountUser=INSERT_USER_EMAIL_ADDRESS_HERE

    # Required for manager accounts only: Specify the login customer ID used to
    # authenticate API calls. This will be the customer ID of the authenticated
    # manager account. You can also specify this later in code if your application
    # uses multiple manager account + OAuth pairs.
    #
    # api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

## Use environment variables

The library supports all of the
[standard Google Ads API client library environment variables](https://developers.google.com/google-ads/api/docs/client-libs#configuration). The
following table shows the environment variable that corresponds to each
configuration file property:

| Configuration file property | Environment variable |
|---|---|
| `api.googleads.clientId` | `GOOGLE_ADS_CLIENT_ID` |
| `api.googleads.clientSecret` | `GOOGLE_ADS_CLIENT_SECRET` |
| `api.googleads.refreshToken` | `GOOGLE_ADS_REFRESH_TOKEN` |
| `api.googleads.serviceAccountSecretsPath` | `GOOGLE_ADS_JSON_KEY_FILE_PATH` |
| `api.googleads.serviceAccountUser` | `GOOGLE_ADS_IMPERSONATED_EMAIL` |
| `api.googleads.loginCustomerId` | `GOOGLE_ADS_LOGIN_CUSTOMER_ID` |
| `api.googleads.linkedCustomerId` | `GOOGLE_ADS_LINKED_CUSTOMER_ID` |
| `api.googleads.maxInboundMessageBytes` | `GOOGLE_ADS_MAX_INBOUND_MESSAGE_BYTES` |
| `api.googleads.useApplicationDefaultCredentials` | `GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS` |

Once you have set the appropriate environment variables, configure your
`GoogleAdsClient` by calling `fromEnvironment()` on the builder:

    GoogleAdsClient googleAdsClient =
        GoogleAdsClient.newBuilder()
            .fromEnvironment()
            .build();

## Combine configuration approaches

The `GoogleAdsClient` and its builder support combining different configuration
strategies. For example, you can use environment variables to configure the
credentials of the instance and a properties file for other attributes using
the following snippet:

    GoogleAdsClient googleAdsClient =
        GoogleAdsClient.newBuilder()
            .fromEnvironment()
            .fromPropertiesFile()
            .build();

> [!NOTE]
> **Note:** Builder configuration methods apply settings in the order they are called, where later calls override earlier calls. In the preceding example, the client library uses the value from the properties file for any attribute defined in both the environment and the properties file. To let environment variables override the properties file, call `fromPropertiesFile()` before `fromEnvironment()`.

You can make further changes at runtime using the builder's other configuration
methods before calling `build()`.