Page Summary
-
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
CustomerAssetSetresources of typeTRAVEL_FEED. -
Opting out at the campaign level requires first excluding the overridden opt-in status from the customer level and then removing
CampaignAssetSetresources of typeTRAVEL_FEEDfor the specific campaign. -
You can identify performance data for ads served as Travel Feeds in Search Ads using the
ClickType.TRAVEL_ASSETSin 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
CustomerAssetSetlinked, and ensureCampaign.excluded_parent_asset_set_typesdoesn't containTRAVEL_FEED. - Opt out at the customer level: Remove the customer-level
CustomerAssetSetassociation, and don't link a campaign-levelCampaignAssetSet. - Opt out a specific campaign: Add
TRAVEL_FEEDtoCampaign.excluded_parent_asset_set_types, and remove any campaign-levelCampaignAssetSetassociations. - Opt in a specific campaign only: Remove the customer-level
CustomerAssetSetassociation, then create a campaign-levelCampaignAssetSetlink for that campaign. - Use campaign-specific feeds while other campaigns keep inheriting: Add
TRAVEL_FEEDto the campaign'sCampaign.excluded_parent_asset_set_types, and create a campaign-levelCampaignAssetSetlink 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:
Retrieve both
customer_asset_set.resource_nameandasset_set.resource_namefor allCustomerAssetSetlinks whose type isTRAVEL_FEEDusing thecustomer_asset_setreport:SELECT customer_asset_set.resource_name, asset_set.resource_name, asset_set.name FROM customer_asset_set WHERE asset_set.type = 'TRAVEL_FEED'For each
customer_asset_set.resource_name, create aCustomerAssetSetOperationand setremoveto thecustomer_asset_set.resource_nameretrieved in the previous step.Submit a request to
CustomerAssetSetService.MutateCustomerAssetSetsusing the createdCustomerAssetSetOperationobjects.
If you want to opt in to this feature at the customer level again:
- For each underlying
AssetSet(asset_set.resource_name) that you want to link, create a newCustomerAssetSetwithasset_setset to theasset_set.resource_nameandcustomerset to the resource name of your customer. - For each
CustomerAssetSetcreated in the previous step, create aCustomerAssetSetOperationwithcreateset to theCustomerAssetSet. - Submit a request to
CustomerAssetSetService.MutateCustomerAssetSetsusing the createdCustomerAssetSetOperationobjects.
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:
Retrieve
excluded_parent_asset_set_typesusing thecampaignreport:SELECT campaign.excluded_parent_asset_set_types FROM campaign WHERE campaign.id = 'INSERT_YOUR_CAMPAIGN_ID'Create a new
Campaignobject withexcluded_parent_asset_set_typesset to the previous values plusTRAVEL_FEEDandresource_nameset to your campaign's resource name.Create a
CampaignOperationand setupdateto the previously createdCampaignandupdate_maskaccordingly.Submit a request to
CampaignService.MutateCampaignsusing theCampaignOperationcreated in the previous step.
Then, remove any campaign-level travel feed associations:
For the campaign you want to opt out, retrieve both
campaign_asset_set.resource_nameandasset_set.resource_namefor allCampaignAssetSetlinks whose type isTRAVEL_FEEDusing thecampaign_asset_setreport: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'For each
campaign_asset_set.resource_name, create aCampaignAssetSetOperationand setremoveto thecampaign_asset_set.resource_nameretrieved in the previous step.Submit a request to
CampaignAssetSetService.MutateCampaignAssetSetsusing the createdCampaignAssetSetOperationobjects.
If you want to opt in to this feature at the campaign level again:
- For each underlying
AssetSet(asset_set.resource_name) that you want to opt in, create a newCampaignAssetSetwithasset_setset to theasset_set.resource_nameandcampaignset to the resource name of your campaign. - For each
CampaignAssetSetcreated in the previous step, create aCampaignAssetSetOperationwithcreateset to theCampaignAssetSet. - Submit a request to
CampaignAssetSetService.MutateCampaignAssetSetsusing the createdCampaignAssetSetOperationobjects.
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:
- Create a new
Campaignobject withexcluded_parent_asset_set_typeswithoutTRAVEL_FEEDin the list andresource_nameset to your campaign's resource name. - Create a
CampaignOperationand setupdateto the previously createdCampaignandupdate_maskaccordingly. - Submit a request to
CampaignService.MutateCampaignsusing theCampaignOperationcreated 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 enabledCampaign.ai_max_setting.enable_ai_maxand an associated hotel feed [TRAVEL_FEEDasset 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:
negativemust be set tofalse. Negative entity bids are not supported. - Required entity identifier and bid:
entity_bid.item_codeandcpc_bid_microsare required when creating an entity bid criterion.
Schema and field definitions
- Resource:
AdGroupCriterion(ad_group_criterion) - Resource name format:
customers/{customer_id}/adGroupCriteria/{ad_group_id}~{criterion_id} - Criterion type enum:
CriterionType.VERTICAL_ADS_ITEM_BID - Message:
EntityBid(ad_group_criterion.entity_bid)
| 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:
segments.advance_booking_window: The advance booking window for the itinerary in days.segments.length_of_booking: The length of booking for the itinerary in days.segments.start_date: The start date of the booking formatted asyyyy-MM-dd.segments.start_day_of_week: The start day of week of the booking.segments.user_set_dates: Indicates whether user-specified dates were selected (USER_SELECTEDorDEFAULT_SELECTION).
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