Travel Feeds in Search Ads

  • Google Ads automatically enhances existing Search campaigns with prices and images from linked Hotels, Vacation Rental, or Things To Do product feeds, a feature called Travel Feeds in Search Ads.

  • You can opt out of the Travel Feeds in Search Ads feature using the Google Ads API at either the customer or campaign level.

  • Opting out at the customer level involves removing CustomerAssetSet resources of type TRAVEL_FEED.

  • Opting out at the campaign level requires first excluding the overridden opt-in status from the customer level and then removing CampaignAssetSet resources of type TRAVEL_FEED for the specific campaign.

  • You can identify performance data for ads served as Travel Feeds in Search Ads using the ClickType.TRAVEL_ASSETS in reporting.

With your Hotels, Vacation Rental, or Things To Do product feeds linked to your Google Ads account, Google Ads automatically enriches existing Search campaigns with prices and images drawn from your feeds. This feature is known as Travel Feeds in Search Ads.

How customer settings and campaign settings interact

By default, campaigns inherit travel feed links (TRAVEL_FEED asset sets) from the customer level through CustomerAssetSet associations. To override customer-level settings for a specific campaign, you must add TRAVEL_FEED to the campaign's excluded_parent_asset_set_types field and manage campaign-specific links using CampaignAssetSet.

  • Inherit customer feeds (default): Keep the customer-level CustomerAssetSet linked, and ensure Campaign.excluded_parent_asset_set_types doesn't contain TRAVEL_FEED.
  • Opt out at the customer level: Remove the customer-level CustomerAssetSet association, and don't link a campaign-level CampaignAssetSet.
  • Opt out a specific campaign: Add TRAVEL_FEED to Campaign.excluded_parent_asset_set_types, and remove any campaign-level CampaignAssetSet associations.
  • Opt in a specific campaign only: Remove the customer-level CustomerAssetSet association, then create a campaign-level CampaignAssetSet link for that campaign.
  • Use campaign-specific feeds while other campaigns keep inheriting: Add TRAVEL_FEED to the campaign's Campaign.excluded_parent_asset_set_types, and create a campaign-level CampaignAssetSet link for it.

Opt out of Travel Feeds in Search Ads

If you prefer not to use this feature, you can use the Google Ads API to opt out of Travel Feeds in Search Ads at the customer and campaign levels.

Opt out at the customer level

To opt out of Travel Feeds in Search Ads at the customer level, do the following:

  1. Retrieve both customer_asset_set.resource_name and asset_set.resource_name for all CustomerAssetSet links whose type is TRAVEL_FEED using the customer_asset_set report:

    SELECT
      customer_asset_set.resource_name,
      asset_set.resource_name,
      asset_set.name
    FROM customer_asset_set
    WHERE asset_set.type = 'TRAVEL_FEED'
    
  2. For each customer_asset_set.resource_name, create a CustomerAssetSetOperation and set remove to the customer_asset_set.resource_name retrieved in the previous step.

  3. Submit a request to CustomerAssetSetService.MutateCustomerAssetSets using the created CustomerAssetSetOperation objects.

If you want to opt in to this feature at the customer level again:

  1. For each underlying AssetSet (asset_set.resource_name) that you want to link, create a new CustomerAssetSet with asset_set set to the asset_set.resource_name and customer set to the resource name of your customer.
  2. For each CustomerAssetSet created in the previous step, create a CustomerAssetSetOperation with create set to the CustomerAssetSet.
  3. Submit a request to CustomerAssetSetService.MutateCustomerAssetSets using the created CustomerAssetSetOperation objects.

Opt out at the campaign level

To opt out of Travel Feeds in Search Ads at the campaign level, you must first exclude the inherited opt-in status from the customer level:

  1. Retrieve excluded_parent_asset_set_types using the campaign report:

    SELECT
      campaign.excluded_parent_asset_set_types
    FROM campaign
    WHERE campaign.id = 'INSERT_YOUR_CAMPAIGN_ID'
    
  2. Create a new Campaign object with excluded_parent_asset_set_types set to the previous values plus TRAVEL_FEED and resource_name set to your campaign's resource name.

  3. Create a CampaignOperation and set update to the previously created Campaign and update_mask accordingly.

  4. Submit a request to CampaignService.MutateCampaigns using the CampaignOperation created in the previous step.

Then, remove any campaign-level travel feed associations:

  1. For the campaign you want to opt out, retrieve both campaign_asset_set.resource_name and asset_set.resource_name for all CampaignAssetSet links whose type is TRAVEL_FEED using the campaign_asset_set report:

    SELECT
      campaign_asset_set.resource_name,
      asset_set.resource_name,
      asset_set.name
    FROM campaign_asset_set
    WHERE campaign_asset_set.campaign =
        'INSERT_YOUR_CAMPAIGN_RESOURCE_NAME'
      AND asset_set.type = 'TRAVEL_FEED'
    
  2. For each campaign_asset_set.resource_name, create a CampaignAssetSetOperation and set remove to the campaign_asset_set.resource_name retrieved in the previous step.

  3. Submit a request to CampaignAssetSetService.MutateCampaignAssetSets using the created CampaignAssetSetOperation objects.

If you want to opt in to this feature at the campaign level again:

  1. For each underlying AssetSet (asset_set.resource_name) that you want to opt in, create a new CampaignAssetSet with asset_set set to the asset_set.resource_name and campaign set to the resource name of your campaign.
  2. For each CampaignAssetSet created in the previous step, create a CampaignAssetSetOperation with create set to the CampaignAssetSet.
  3. Submit a request to CampaignAssetSetService.MutateCampaignAssetSets using the created CampaignAssetSetOperation objects.

Restore customer-level opt-in status for a campaign

To make a campaign's opt-in status inherit the customer-level setting again, follow these steps:

  1. Create a new Campaign object with excluded_parent_asset_set_types without TRAVEL_FEED in the list and resource_name set to your campaign's resource name.
  2. Create a CampaignOperation and set update to the previously created Campaign and update_mask accordingly.
  3. Submit a request to CampaignService.MutateCampaigns using the CampaignOperation created in the previous step.

Per-entity manual CPC bidding

Starting in Google Ads API v25, you can configure per-entity manual CPC bid overrides for hotels in Search Campaigns for Travel using the AdGroupCriterion resource with criterion type CriterionType.VERTICAL_ADS_ITEM_BID (ad_group_criterion.entity_bid).

Prerequisites and compatibility requirements

To create and manage VERTICAL_ADS_ITEM_BID criteria, the following conditions must be met:

  • Campaign type: Search Campaigns for Travel (Search campaigns, AdvertisingChannelType.SEARCH, with AI Max for Search campaigns enabled Campaign.ai_max_setting.enable_ai_max and an associated hotel feed [TRAVEL_FEED asset set]; only hotel feeds are supported).
  • Bidding strategy: Manual CPC (BiddingStrategyType.MANUAL_CPC) only.
    • Not supported on automated or Smart Bidding strategies (such as Maximize Conversions, Maximize Conversion Value, Target CPA, or Target ROAS).
  • Positive criteria only: negative must be set to false. Negative entity bids are not supported.
  • Required entity identifier and bid: entity_bid.item_code and cpc_bid_micros are required when creating an entity bid criterion.

Schema and field definitions

Field Type Behavior Description
entity_bid EntityBid IMMUTABLE Criterion representing a manual bid override for a single item.
entity_bid.item_code string IMMUTABLE, required The ID or code specifying a particular hotel entity (hotel listing ID) matching the partner hotel feed (1 to 256 characters, trimmed).
cpc_bid_micros int64 Read/Write The manual CPC bid amount in micros (for example, 1000000 equals $1.00).
negative bool IMMUTABLE Must be false.

Supported services and operations

Service Method Supported actions
AdGroupCriterionService MutateAdGroupCriteria create, update (cpc_bid_micros), remove
GoogleAdsService Search / SearchStream Query criteria attributes, item codes, and bid values

Code and payload examples

The following examples show how to read, create, update, and remove VERTICAL_ADS_ITEM_BID criteria.

Read entity bids using GAQL

Use GoogleAdsService.Search or GoogleAdsService.SearchStream to query VERTICAL_ADS_ITEM_BID criteria:

SELECT
  ad_group_criterion.resource_name,
  ad_group_criterion.ad_group,
  ad_group_criterion.criterion_id,
  ad_group_criterion.type,
  ad_group_criterion.cpc_bid_micros,
  ad_group_criterion.entity_bid.item_code
FROM ad_group_criterion
WHERE ad_group_criterion.type = 'VERTICAL_ADS_ITEM_BID'

Create an entity bid

Send a create operation to AdGroupCriterionService.MutateAdGroupCriteria:

{
  "customerId": "1234567890",
  "operations": [
    {
      "create": {
        "adGroup": "customers/1234567890/adGroups/987654321",
        "negative": false,
        "cpcBidMicros": "1500000",
        "entityBid": {
          "itemCode": "hotel_nyc_12345"
        }
      }
    }
  ]
}

Update an existing entity bid amount

Send an update operation with an updateMask to AdGroupCriterionService.MutateAdGroupCriteria:

{
  "customerId": "1234567890",
  "operations": [
    {
      "updateMask": "cpcBidMicros",
      "update": {
        "resourceName": "customers/1234567890/adGroupCriteria/987654321~555444333",
        "cpcBidMicros": "2000000"
      }
    }
  ]
}

Remove an entity bid

Send a remove operation to AdGroupCriterionService.MutateAdGroupCriteria:

{
  "customerId": "1234567890",
  "operations": [
    {
      "remove": "customers/1234567890/adGroupCriteria/987654321~555444333"
    }
  ]
}

Validation rules and error handling

Scenario Trigger / condition Returned error code
Non-Manual CPC campaign Attempting to create an entity bid on a campaign with automated or Smart Bidding. ContextError.OPERATION_NOT_PERMITTED_FOR_CONTEXT
Invalid campaign type Adding an entity bid to a non-Search campaign (for example, a Display campaign). ContextError.OPERATION_NOT_PERMITTED_FOR_CONTEXT
Negative criterion Setting negative = true for VERTICAL_ADS_ITEM_BID. ContextError.OPERATION_NOT_PERMITTED_FOR_CONTEXT
Missing item code or bid Attempting to create entity_bid without providing item_code or cpc_bid_micros. RequestError.REQUIRED_FIELD_MISSING / FieldError.REQUIRED
Mutating item code Attempting to update entity_bid.item_code on an existing criterion. RequestError.IMMUTABLE_FIELD / FieldError.IMMUTABLE_FIELD

Performance reports

You can use ClickType.TRAVEL_ASSETS to identify performance data for ads served as Travel Feeds in Search Ads, such as fetching performance data for the ads across all your campaigns:

SELECT
  campaign.name,
  segments.click_type,
  metrics.impressions,
  metrics.clicks
FROM campaign
WHERE segments.click_type = 'TRAVEL_ASSETS'

Itinerary dimension segments

You can also segment performance reports for campaigns with linked travel feeds by itinerary dimensions:

Sample query

SELECT
  campaign.name,
  segments.advance_booking_window,
  segments.length_of_booking,
  segments.start_date,
  segments.start_day_of_week,
  segments.user_set_dates,
  metrics.impressions,
  metrics.clicks
FROM campaign
WHERE segments.date DURING LAST_30_DAYS