Controls and inventory filtering for vertical ads

Vertical ads provide specialized features for AI Max for Search campaigns-enabled Search campaigns that are linked to a vertical feed, such as hotels. You can control which vertical ad formats are served at the ad group level, and you can control which feed entities are targeted using vertical ads item group rules.

Overview

This guide covers two main features for managing vertical ads:

  1. Format controls: Opt in or opt out of specific ad formats (text ads, booking links, and vertical promotion ads) at the ad group level.
  2. Vertical ads items management: Filter and target specific inventory from your linked vertical (formerly called travel) feed using a rule-based system that involves SharedSet and SharedCriterion.

Prerequisites

Before you implement these features, make sure your campaign meets the following requirements:

  • Campaign type: Must be a Search campaign.
  • Vertical feed: An active vertical data feed must be linked at the customer or campaign level. Reference Link vertical data feeds at the campaign level to link a feed at the campaign level. Linking a vertical data feed activates Travel Feeds in Search Ads (TFSA) and enables vertical ads controls for the campaign.
  • AI Max for Search campaigns: The AI Max for Search campaigns setting must be enabled on the campaign.

To activate Travel Feeds in Search Ads (TFSA) and enable vertical ads controls within your campaign, you can link your vertical data feed asset set at the campaign level using the following steps. Alternatively, to enable these features for all campaigns in your account, you can link the feed at the customer level by following the customer-level linking instructions in the Travel Feeds in Search Ads guide.

  1. Create a CampaignAssetSet object, setting asset_set to the resource name of your vertical feed asset set and campaign to the resource name of your campaign.
  2. Create a CampaignAssetSetOperation with create set to the CampaignAssetSet.
  3. Submit the operation using CampaignAssetSetService.MutateCampaignAssetSets.

For more details on managing travel feeds at scale, refer to the Travel Feeds in Search Ads documentation.

Ad group format controls

You can configure which vertical ad formats are active for a specific ad group. This is managed through the vertical_ads_format_setting (VerticalAdsFormatSetting) field on the AdGroup resource.

Available formats

Validation rules

Example: Update format settings

The following Java example demonstrates how to disable text ads and enable vertical promotion ads for an existing ad group:

// Assuming 'adGroup' is an existing AdGroup object.
// Example resource name: "customers/{customer_id}/adGroups/{ad_group_id}"
AdGroup adGroupToUpdate = AdGroup.newBuilder()
    .setResourceName(adGroup.getResourceName())
    .setVerticalAdsFormatSetting(
        VerticalAdsFormatSetting.newBuilder()
            .setDisableTextAds(true)
            .setEnableBookingLinks(false)
            .setEnableVerticalPromotionAds(true)
    )
    .build();

AdGroupOperation operation = AdGroupOperation.newBuilder()
    .setUpdate(adGroupToUpdate)
    .setUpdateMask(FieldMasks.allSetFieldsOf(adGroupToUpdate))
    .build();

// Submit the operation using AdGroupService...

Vertical ads items management

To target a specific subset of your feed inventory, such as "Hotels in Boston" or "Exclude 1-star hotels", you must use vertical ads item group rules.

How the data model works

The data model uses a shared criteria approach:

  1. SharedSet: Create a SharedSet with type VERTICAL_ADS_ITEM_GROUP_RULE_LIST.
  2. SharedCriterion: Add rules (criteria) to this set. Each rule specifies a dimension, such as City or Hotel Class, and a value. You can also create negative criteria to exclude items.
  3. AdGroupCriterion: Link the SharedSet to your AdGroup using an AdGroupCriterion (vertical_ads_item_group_rule_list).

Supported dimensions

You can filter entities based on the following dimensions in SharedCriterion (VerticalAdsItemGroupRuleInfo):

  • item_code: Specific listing ID.
  • city_criterion_id, region_criterion_id, country_criterion_id: Geo Target Constant resource names (geoTargetConstants/{id}).
  • hotel_class: Star rating (1-5).
  • user_rating, venue, event_participant_display_name (starting in v24): Event and vertical listing rating, venue, and participant name filters.

This Python example creates a rule to include items in "Boston" or "San Francisco" and exclude "1-star" and "2-star" hotels:

# 1. Create the SharedSet
shared_set_operation = client.get_type("SharedSetOperation")
shared_set = shared_set_operation.create
shared_set.name = "Boston/SF Premium Hotels"
shared_set.type_ = (
    client.enums.SharedSetTypeEnum.VERTICAL_ADS_ITEM_GROUP_RULE_LIST
)
shared_set.vertical_ads_item_vertical_type = (
    client.enums.VerticalAdsItemVerticalTypeEnum.HOTELS
)
shared_set_service = client.get_service("SharedSetService")
shared_set_response = shared_set_service.mutate_shared_sets(
    customer_id=customer_id, operations=[shared_set_operation]
)
shared_set_resource_name = shared_set_response.results[0].resource_name

# 2. Add Criteria (Rules) to the SharedSet
shared_criteria_operations = []

# Rule A: Include Boston and SF
geo_target_constant_service = client.get_service("GeoTargetConstantService")
included_city_ids = [1006543, 1014221]  # Geo Target Constant IDs
for city_id in included_city_ids:
  op = client.get_type("SharedCriterionOperation")
  criterion = op.create
  criterion.shared_set = shared_set_resource_name
  criterion.vertical_ads_item_group_rule.city_criterion_id = (
      geo_target_constant_service.geo_target_constant_path(city_id)
  )
  shared_criteria_operations.append(op)

# Rule B: Exclude 1 and 2 Star Hotels
excluded_stars = [1, 2]
for star_rating in excluded_stars:
  op = client.get_type("SharedCriterionOperation")
  criterion = op.create
  criterion.shared_set = shared_set_resource_name
  criterion.vertical_ads_item_group_rule.hotel_class = star_rating
  criterion.negative = True  # Mark as exclusion
  shared_criteria_operations.append(op)

# Submit SharedCriterionOperations...

# 3. Link to AdGroup
ad_group_service = client.get_service("AdGroupService")
ad_group_resource_name = ad_group_service.ad_group_path(
    customer_id, ad_group_id
)
agc_operation = client.get_type("AdGroupCriterionOperation")
agc = agc_operation.create
agc.ad_group = ad_group_resource_name
agc.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
agc.vertical_ads_item_group_rule_list.shared_set = shared_set_resource_name

# Submit AdGroupCriterionOperation...

Performance reports

You can retrieve performance metrics for vertical ads using the GoogleAdsService.SearchStream or GoogleAdsService.Search methods.

Vertical ads segments

Itinerary dimension segments

Starting in v25, for vertical ads linked to travel and accommodation feeds, you can segment performance reports using itinerary dimensions:

Vertical ads metrics

Starting in v25, you can retrieve the following vertical ads metrics:

Sample GAQL query

SELECT
  campaign.id,
  ad_group.id,
  segments.vertical_ads_listing_city,
  segments.advance_booking_window,
  segments.length_of_booking,
  segments.start_date,
  metrics.impressions,
  metrics.vertical_ads_potential_impressions,
  metrics.clicks,
  metrics.all_conversions_value,
  metrics.vertical_ads_average_booking_value_micros,
  metrics.vertical_ads_price_difference_percentage
FROM
  ad_group
WHERE
  segments.date DURING LAST_30_DAYS

Error handling

These are common errors you may encounter when configuring vertical ads:

Error code Cause Recommended action
AdGroupError.INVALID_VERTICAL_ADS_FORMAT_SETTING All three ad formats (text, booking link, promotion ads) were disabled simultaneously. Ensure at least one format is enabled in VerticalAdsFormatSetting.
AdGroupError.VERTICAL_ADS_FORMAT_SETTING_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_AI_MAX The campaign does not have AI Max for Search campaigns enabled. Enable AI Max for Search campaigns in campaign settings.
AdGroupError.VERTICAL_ADS_FORMAT_SETTING_NOT_SUPPORTED_FOR_CAMPAIGNS_WITHOUT_ENABLED_TRAVEL_FEED The campaign lacks an active vertical data feed. Ensure a valid vertical feed is linked at the customer or campaign level.
CriterionError.VERTICAL_ADS_ITEM_GROUP_RULE_LIST_DOES_NOT_EXIST The SharedSet resource name provided in the AdGroupCriterion does not exist. Verify the shared_set resource name matches a created set.
CriterionError.VERTICAL_ADS_ITEM_GROUP_RULE_NOT_SUPPORTED_FOR_THE_VERTICAL_TYPE The criterion dimension used is not supported for the specific vertical, such as hotel class for car rentals. Check that the vertical_ads_item_group_rule dimension matches your vertical type.