Creating a Hotel Ad Group Ad

  • Creating a Hotel ad requires two steps: creating an Ad with hotel_ad set to a HotelAdInfo instance, and then creating an AdGroupAd associated with that Ad.

  • To serve Hotel Ads, you need at least one AdGroupAd with its ad set and its status set to ENABLED.

  • It is recommended to create only one AdGroupAd per ad group for easier metric distinction, as impressions are shared among multiple ad group ads within the same ad group.

Creating a Hotel ad involves two steps:

  1. Creating an Ad and setting its hotel_ad to an instance of HotelAdInfo.

  2. Creating an AdGroupAd and associating the previously created Ad to it.

Java

private String addHotelAdGroupAd(  GoogleAdsClient googleAdsClient, long customerId, String adGroupResourceName) {  // Creates a new hotel ad.  Ad ad = Ad.newBuilder().setHotelAd(HotelAdInfo.newBuilder().build()).build();  // Creates a new ad group ad and sets the hotel ad to it.  AdGroupAd adGroupAd =  AdGroupAd.newBuilder()  // Sets the ad to the ad created above.  .setAd(ad)  // Set the ad group ad to enabled. Setting this to paused will cause an error  // for hotel campaigns. For hotels pausing should happen at either the ad group or  // campaign level.  .setStatus(AdGroupAdStatus.ENABLED)  // Sets the ad group.  .setAdGroup(adGroupResourceName)  .build();  // Creates an ad group ad operation.  AdGroupAdOperation operation = AdGroupAdOperation.newBuilder().setCreate(adGroupAd).build();  // Issues a mutate request to add an ad group ad.  try (AdGroupAdServiceClient adGroupAdServiceClient =  googleAdsClient.getLatestVersion().createAdGroupAdServiceClient()) {  MutateAdGroupAdResult mutateAdGroupAdResult =  adGroupAdServiceClient  .mutateAdGroupAds(Long.toString(customerId), Collections.singletonList(operation))  .getResults(0);  System.out.printf(  "Added a hotel ad group ad with resource name: '%s'%n",  mutateAdGroupAdResult.getResourceName());  return mutateAdGroupAdResult.getResourceName();  } }  

C#

private static void AddHotelAdGroupAd(GoogleAdsClient client, long customerId,  string adGroupResourceName) {  // Get the AdGroupAdService.  AdGroupAdServiceClient service = client.GetService(Services.V22.AdGroupAdService);  // Create a new ad group ad and sets the hotel ad to it.  AdGroupAd adGroupAd = new AdGroupAd()  {  // Create a new hotel ad.  Ad = new Ad()  {  HotelAd = new HotelAdInfo(),  },  // Set the ad group.  AdGroup = adGroupResourceName,  // Set the ad group ad to enabled. Setting this to paused will cause an error  // for hotel campaigns. For hotels pausing should happen at either the ad group or  // campaign level.  Status = AdGroupAdStatus.Enabled  };  // Create an ad group ad operation.  AdGroupAdOperation adGroupAdOperation = new AdGroupAdOperation()  {  Create = adGroupAd  };  // Issue a mutate request to add an ad group ad.  MutateAdGroupAdsResponse response = service.MutateAdGroupAds(customerId.ToString(),  new AdGroupAdOperation[] { adGroupAdOperation });  MutateAdGroupAdResult addedAdGroupAd = response.Results[0];  Console.WriteLine($"Added a hotel ad group ad with resource name " +  $"{addedAdGroupAd.ResourceName}."); }  

PHP

private static function addHotelAdGroupAd(  GoogleAdsClient $googleAdsClient,  int $customerId,  string $adGroupResourceName ) {  // Creates a new hotel ad.  $ad = new Ad([  'hotel_ad' => new HotelAdInfo(),  ]);  // Creates a new ad group ad and sets the hotel ad to it.  $adGroupAd = new AdGroupAd([  'ad' => $ad,  // Set the ad group ad to enabled. Setting this to paused will cause an error  // for hotel campaigns. For hotels pausing should happen at either the ad group or  // campaign level.  'status' => AdGroupAdStatus::ENABLED,  // Sets the ad group.  'ad_group' => $adGroupResourceName  ]);  // Creates an ad group ad operation.  $adGroupAdOperation = new AdGroupAdOperation();  $adGroupAdOperation->setCreate($adGroupAd);  // Issues a mutate request to add an ad group ad.  $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();  $response = $adGroupAdServiceClient->mutateAdGroupAds(  MutateAdGroupAdsRequest::build($customerId, [$adGroupAdOperation])  );  /** @var AdGroupAd $addedAdGroupAd */  $addedAdGroupAd = $response->getResults()[0];  printf(  "Added a hotel ad group ad with resource name '%s'.%s",  $addedAdGroupAd->getResourceName(),  PHP_EOL  ); }  

Python

def add_hotel_ad( client: GoogleAdsClient, customer_id: str, ad_group_resource_name: str ) -> str: ad_group_ad_service: AdGroupAdServiceClient = client.get_service( "AdGroupAdService" ) # Creates a new ad group ad and sets the hotel ad to it. ad_group_ad_operation: AdGroupAdOperation = client.get_type( "AdGroupAdOperation" ) ad_group_ad: AdGroupAd = ad_group_ad_operation.create ad_group_ad.ad_group = ad_group_resource_name # Set the ad group ad to enabled. Setting this to paused will cause an error # for hotel campaigns. For hotels pausing should happen at either the ad group or # campaign level. ad_group_ad.status = client.enums.AdGroupAdStatusEnum.ENABLED client.copy_from(ad_group_ad.ad.hotel_ad, client.get_type("HotelAdInfo")) # Add the ad group ad. ad_group_ad_response: MutateAdGroupAdsResponse = ( ad_group_ad_service.mutate_ad_group_ads( customer_id=customer_id, operations=[ad_group_ad_operation] ) ) ad_group_ad_resource_name: str = ad_group_ad_response.results[ 0 ].resource_name print(f"Created hotel ad with resource name '{ad_group_ad_resource_name}'.") return ad_group_resource_name 

Ruby

def add_hotel_ad_group_ad(client, customer_id, ad_group_resource)  # Create a new hotel ad.  ad_group_ad_operation = client.operation.create_resource.ad_group_ad do |aga|  # Create a new ad group ad and sets the hotel ad to it.  aga.ad = client.resource.ad do |ad|  ad.hotel_ad = client.resource.hotel_ad_info  end  # Set the ad group ad to enabled. Setting this to paused will cause an error  # for hotel campaigns. For hotels pausing should happen at either the ad group or  # campaign level.  aga.status = :ENABLED  # Set the ad group.  aga.ad_group = ad_group_resource  end  # Issue a mutate request to add the ad group ad.  ad_group_ad_service = client.service.ad_group_ad  response = ad_group_ad_service.mutate_ad_group_ads(  customer_id: customer_id,  operations: [ad_group_ad_operation],  )  # Fetch the new ad group ad's resource name.  ad_group_ad_resource = response.results.first.resource_name  puts "Added hotel ad group ad with resource name '#{ad_group_ad_resource}'." end  

Perl

sub add_hotel_ad_group_ad {  my ($api_client, $customer_id, $ad_group_resource_name) = @_;  # Create an ad group ad and set a hotel ad to it.  my $ad_group_ad = Google::Ads::GoogleAds::V22::Resources::AdGroupAd->new({  # Set the ad group.  adGroup => $ad_group_resource_name,  # Set the ad to a new shopping product ad.  ad => Google::Ads::GoogleAds::V22::Resources::Ad->new({  hotelAd => Google::Ads::GoogleAds::V22::Common::HotelAdInfo->new()}  ),  status => Google::Ads::GoogleAds::V22::Enums::AdGroupAdStatusEnum::ENABLED  });  # Create an ad group ad operation.  my $ad_group_ad_operation =  Google::Ads::GoogleAds::V22::Services::AdGroupAdService::AdGroupAdOperation  ->new({create => $ad_group_ad});  # Add the ad group ad.  my $ad_group_ad_resource_name = $api_client->AdGroupAdService()->mutate({  customerId => $customer_id,  operations => [$ad_group_ad_operation]})->{results}[0]{resourceName};  printf "Added a hotel ad group ad with resource name: '%s'.\n",  $ad_group_ad_resource_name;  return $ad_group_ad_resource_name; }