Bid modifiers let you adjust bids for a specific criterion without changing the
targeting of your campaign or ad group. For example, an ad group bid modifier
for mobile devices doesn't exclude impressions for other device types, but it
lets you raise or lower your bids for mobile impressions.

Modifiers are set as floating-point multipliers on the `bid_modifier` field. For
example, a value of `1.2` increases a bid by 20%, while `0.8` decreases it by
20%. For supported criteria (such as excluding a device type), a value of `0.0`
(equivalent to a -100% bid adjustment in the Google Ads UI) opts out of the
criterion. When multiple bid modifiers apply to an impression, they are
multiplied together to compute the final bid adjustment. Refer to the
[`CampaignBidModifier`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignBidModifier.md.txt) and
[`AdGroupBidModifier`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupBidModifier.md.txt) reference documentation for valid
value ranges.

For more information on how bidding works and how to set bid modifiers, see the
[Bidding overview](https://developers.google.com/google-ads/api/docs/campaigns/bidding/overview.md.txt) and [Manage bid modifiers](https://developers.google.com/google-ads/api/docs/campaigns/bidding/manage-bid-modifiers.md.txt)
guides.

> [!NOTE]
> **Note:** If your campaign uses Smart Bidding (such as Target CPA or Target ROAS), bid modifiers behave differently or may be ignored depending on the strategy type. For example, device bid modifiers with Target CPA adjust the CPA target rather than the bid itself.

## Campaign bid modifiers

You can specify bid modifiers at the campaign level for the following criterion
type using the [`CampaignBidModifierService`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignBidModifierService.md.txt):

[`InteractionTypeInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/InteractionTypeInfo.md.txt)
:   Define `InteractionTypeInfo` criteria using one of the predefined
    [`InteractionType`](https://developers.google.com/google-ads/api/reference/rpc/v26/InteractionTypeEnum.InteractionType.md.txt) enums. `CALL` is the only supported enum
    value for campaign bid modifiers; specifying any other value returns a
    `CriterionError`.

## Ad group bid modifiers

You can specify bid modifiers at the ad group level for the following criterion
types using the [`AdGroupBidModifierService`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupBidModifierService.md.txt):

[`DeviceInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/DeviceInfo.md.txt)
:   Define the `DeviceInfo` criteria using one of the predefined
    [`Device`](https://developers.google.com/google-ads/api/reference/rpc/v26/DeviceEnum.Device.md.txt) enums.

Various travel criteria
:   In **v26 and later** , set modifiers for travel itinerary criteria using
    vertical-agnostic criteria:
    [`UserSetDatesInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/UserSetDatesInfo.md.txt),
    [`AdvanceBookingWindowInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdvanceBookingWindowInfo.md.txt),
    [`LengthOfBookingInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/LengthOfBookingInfo.md.txt),
    [`StartDayOfWeekInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/StartDayOfWeekInfo.md.txt), and
    [`StartDateRangeInfo`](https://developers.google.com/google-ads/api/reference/rpc/v26/StartDateRangeInfo.md.txt). In **v25 and earlier** , set
    hotel-specific modifiers for
    [`HotelDateSelectionTypeInfo`](https://developers.google.com/google-ads/api/reference/rpc/v25/HotelDateSelectionTypeInfo.md.txt),
    [`HotelAdvanceBookingWindowInfo`](https://developers.google.com/google-ads/api/reference/rpc/v25/HotelAdvanceBookingWindowInfo.md.txt),
    [`HotelLengthOfStayInfo`](https://developers.google.com/google-ads/api/reference/rpc/v25/HotelLengthOfStayInfo.md.txt),
    [`HotelCheckInDayInfo`](https://developers.google.com/google-ads/api/reference/rpc/v25/HotelCheckInDayInfo.md.txt), and
    [`HotelCheckInDateRangeInfo`](https://developers.google.com/google-ads/api/reference/rpc/v25/HotelCheckInDateRangeInfo.md.txt). These criteria
    apply only to hotel ads in Hotel campaigns and Search Campaigns for Travel.
    See [Adjust bids with bid modifiers](https://developers.google.com/google-ads/api/docs/hotel-ads/bidding/create-ad-group-bid-modifier.md.txt) for details.

## Criteria-level bid modifiers

In addition to dedicated bid modifier services, certain criteria set on
[`CampaignCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion.md.txt) or
[`AdGroupCriterion`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion.md.txt) resources support setting a
`bid_modifier` field directly
([`CampaignCriterion.bid_modifier`](https://developers.google.com/google-ads/api/reference/rpc/v26/CampaignCriterion.md.txt#bid_modifier) or
[`AdGroupCriterion.bid_modifier`](https://developers.google.com/google-ads/api/reference/rpc/v26/AdGroupCriterion.md.txt#bid_modifier), such as for
location, ad schedule, or demographic criteria).

> [!NOTE]
> **Note:** Starting in **`v25`** , rather than using a multiplicative `bid_modifier`, you can set per-entity manual CPC bids (`cpc_bid_micros`) on specific hotel entities (`entity_bid.item_code`) in Search Campaigns for Travel (Search campaigns with AI Max for Search campaigns enabled and a linked hotel feed) using the [`EntityBid`](https://developers.google.com/google-ads/api/reference/rpc/v26/EntityBid.md.txt) (`CriterionType.VERTICAL_ADS_ITEM_BID`) criterion on `AdGroupCriterion`. This requires `MANUAL_CPC` bidding; see [Per-entity manual
> CPC bidding](https://developers.google.com/google-ads/api/docs/hotel-ads/travel-feeds#entity-bidding) for details.

## Code example

The following code example demonstrates how to add an ad group-level mobile
device bid modifier:


### Java

```java
private void runExample(
    GoogleAdsClient googleAdsClient, long customerId, long adGroupId, double bidModifier) {

  // Creates an ad group bid modifier for mobile devices with the specified ad group ID and
  // bid modifier value.
  AdGroupBidModifier adGroupBidModifier =
      AdGroupBidModifier.newBuilder()
          .setAdGroup(ResourceNames.adGroup(customerId, adGroupId))
          .setBidModifier(bidModifier)
          .setDevice(DeviceInfo.newBuilder().setType(Device.MOBILE))
          .build();

  // Creates an ad group bid modifier operation for creating an ad group bid modifier.
  AdGroupBidModifierOperation adGroupBidModifierOperation =
      AdGroupBidModifierOperation.newBuilder().setCreate(adGroupBidModifier).build();

  // Issues a mutate request to add the ad group bid modifier.
  try (AdGroupBidModifierServiceClient adGroupBidModifierServiceClient =
      googleAdsClient.getLatestVersion().createAdGroupBidModifierServiceClient()) {
    MutateAdGroupBidModifiersResponse response =
        adGroupBidModifierServiceClient.mutateAdGroupBidModifiers(
            Long.toString(customerId), ImmutableList.of(adGroupBidModifierOperation));

    System.out.printf("Added %d ad group bid modifiers:%n", response.getResultsCount());
    for (MutateAdGroupBidModifierResult mutateAdGroupBidModifierResult :
        response.getResultsList()) {
      System.out.printf("\t%s%n", mutateAdGroupBidModifierResult.getResourceName());
    }
  }
}
      
```

### C#

```c#
public void Run(GoogleAdsClient client, long customerId, long adGroupId,
    double bidModifierValue)
{
    // Get the AdGroupBidModifierService.
    AdGroupBidModifierServiceClient adGroupBidModifierService =
        client.GetService(Services.V26.AdGroupBidModifierService);

    // Creates an ad group bid modifier for mobile devices with the specified ad group
    // ID and bid modifier value.
    AdGroupBidModifier adGroupBidModifier = new AdGroupBidModifier()
    {
        AdGroup = ResourceNames.AdGroup(customerId, adGroupId),
        BidModifier = bidModifierValue,
        Device = new DeviceInfo()
        {
            Type = Device.Mobile
        }
    };

    // Creates an ad group bid modifier operation for creating an ad group bid modifier.
    AdGroupBidModifierOperation adGroupBidModifierOperation =
        new AdGroupBidModifierOperation()
        {
            Create = adGroupBidModifier
        };

    // Send the operation in a mutate request.
    try
    {
        MutateAdGroupBidModifiersResponse response =
            adGroupBidModifierService.MutateAdGroupBidModifiers(customerId.ToString(),
                new AdGroupBidModifierOperation[] { adGroupBidModifierOperation });
        Console.WriteLine("Added {0} ad group bid modifiers:", response.Results.Count);
        foreach (MutateAdGroupBidModifierResult result in response.Results)
        {
            Console.WriteLine($"\t{result.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
    public static function runExample(
        GoogleAdsClient $googleAdsClient,
        int $customerId,
        int $adGroupId,
        float $bidModifierValue
    ) {
        // Creates an ad group bid modifier for mobile devices with the specified ad group ID and
        // bid modifier value.
        $adGroupBidModifier = new AdGroupBidModifier(
            [
            'ad_group' => ResourceNames::forAdGroup($customerId, $adGroupId),
            'bid_modifier' => $bidModifierValue,
            'device' => new DeviceInfo(['type' => Device::MOBILE])
            ]
        );

        // Creates an ad group bid modifier operation for creating an ad group bid modifier.
        $adGroupBidModifierOperation = new AdGroupBidModifierOperation();
        $adGroupBidModifierOperation->setCreate($adGroupBidModifier);

        // Issues a mutate request to add the ad group bid modifier.
        $adGroupBidModifierServiceClient = $googleAdsClient->getAdGroupBidModifierServiceClient();
        $response = $adGroupBidModifierServiceClient->mutateAdGroupBidModifiers(
            MutateAdGroupBidModifiersRequest::build($customerId, [$adGroupBidModifierOperation])
        );

        printf("Added %d ad group bid modifier:%s", $response->getResults()->count(), PHP_EOL);

        foreach ($response->getResults() as $addedAdGroupBidModifier) {
            /**
 * @var AdGroupBidModifier $addedAdGroupBidModifier
*/
            print $addedAdGroupBidModifier->getResourceName() . PHP_EOL;
        }
    }
      
```

### Python

```python
def main(
    client: GoogleAdsClient,
    customer_id: str,
    ad_group_id: str,
    bid_modifier_value: float,
) -> None:
    ad_group_service: AdGroupServiceClient = client.get_service(
        "AdGroupService"
    )
    ad_group_bm_service: AdGroupBidModifierServiceClient = client.get_service(
        "AdGroupBidModifierService"
    )

    # Create ad group bid modifier for mobile devices with the specified ad
    # group ID and bid modifier value.
    ad_group_bid_modifier_operation: AdGroupBidModifierOperation = (
        client.get_type("AdGroupBidModifierOperation")
    )
    ad_group_bid_modifier: AdGroupBidModifier = (
        ad_group_bid_modifier_operation.create
    )

    # Set the ad group.
    ad_group_bid_modifier.ad_group = ad_group_service.ad_group_path(
        customer_id, ad_group_id
    )

    # Set the bid modifier.
    ad_group_bid_modifier.bid_modifier = bid_modifier_value

    # Sets the device.
    device_enum: DeviceEnum = client.enums.DeviceEnum
    ad_group_bid_modifier.device.type_ = device_enum.MOBILE

    # Add the ad group bid modifier.
    ad_group_bm_response: MutateAdGroupBidModifiersResponse = (
        ad_group_bm_service.mutate_ad_group_bid_modifiers(
            customer_id=customer_id,
            operations=[ad_group_bid_modifier_operation],
        )
    )
      
```

### Ruby

```ruby
def add_ad_group_bid_modifier(customer_id, ad_group_id, bid_modifier_value)
  # GoogleAdsClient will read a config file from
  # ENV['HOME']/google_ads_config.rb when called without parameters
  client = Google::Ads::GoogleAds::GoogleAdsClient.new

  # Creates an ad group bid modifier for mobile devices with the specified
  # ad group ID and bid modifier value.
  ad_group_bid_modifier = client.resource.ad_group_bid_modifier do |mod|
    # Sets the ad group.
    mod.ad_group = client.path.ad_group(customer_id, ad_group_id)

    # Sets the Bid Modifier.
    mod.bid_modifier = bid_modifier_value

    # Sets the Device.
    mod.device = client.resource.device_info do |device|
      device.type = :MOBILE
    end
  end

  # Create the operation.
  operation = client.operation.create_resource.ad_group_bid_modifier(ad_group_bid_modifier)

  # Add the ad group ad.
  response = client.service.ad_group_bid_modifier.mutate_ad_group_bid_modifiers(
    customer_id: customer_id,
    operations: [operation]
  )

  puts "Added #{response.results.size} ad group bid modifiers:"
  response.results.each do |added_ad_group_bid_modifier|
    puts "\t#{added_ad_group_bid_modifier.resource_name}"
  end
end
      
```

### Perl

```perl
sub add_ad_group_bid_modifier {
  my ($api_client, $customer_id, $ad_group_id, $bid_modifier_value) = @_;

  # Create an ad group bid modifier for mobile devices with the specified ad group ID and
  # bid modifier value.
  my $ad_group_bid_modifier =
    Google::Ads::GoogleAds::V26::Resources::AdGroupBidModifier->new({
      adGroup => Google::Ads::GoogleAds::V26::Utils::ResourceNames::ad_group(
        $customer_id, $ad_group_id
      ),
      bidModifier => $bid_modifier_value,
      device      => Google::Ads::GoogleAds::V26::Common::DeviceInfo->new({
          type => MOBILE
        })});

  # Create an ad group bid modifier operation.
  my $ad_group_bid_modifier_operation =
    Google::Ads::GoogleAds::V26::Services::AdGroupBidModifierService::AdGroupBidModifierOperation
    ->new({
      create => $ad_group_bid_modifier
    });

  # Add the ad group bid modifier.
  my $ad_group_bid_modifiers_response =
    $api_client->AdGroupBidModifierService()->mutate({
      customerId => $customer_id,
      operations => [$ad_group_bid_modifier_operation]});

  printf "Created ad group bid modifier '%s'.\n",
    $ad_group_bid_modifiers_response->{results}[0]{resourceName};

  return 1;
}
      
```

### curl

> [!NOTE]
> **Note:** While a direct REST code sample for this step isn't provided here, you can achieve this using a manual REST request.   
>
> Refer to the Google Ads API REST interface documentation and the method-specific reference pages. You will need to construct the JSON payload based on the proto definitions.   
>
> Key Resources:
>
> - [Using REST](https://developers.google.com/google-ads/api/rest/overview.md.txt)
> - [REST Interface Structure](https://developers.google.com/google-ads/api/rest/design/overview.md.txt)
> - [JSON Field Mappings](https://developers.google.com/google-ads/api/rest/design/json-mappings.md.txt)
> - Consult the [REST API Reference](https://developers.google.com/google-ads/api/reference/rpc/latest/overview) for the specific service and method.

<br />