Video: Check out the Hotel Ads reporting talk from the 2019 workshop
With the Google Ads API, you can design queries to get the Hotel Ads reports you need. You can then incorporate these queries into your client applications.
Prerequisites
- Learn how reporting and queries work in general.
- Learn how different resources can be queried.
- Learn how to use a query in a client application, as shown in this hotel ads performance example.
Basic queries for Hotel Ads
Check out these example queries to get familiar with using the Google Ads API for Hotel Ads reporting.
Get clicks metrics
The following example query returns the number of clicks from the hotel performance view.
SELECT metrics.clicks
FROM hotel_performance_view
The results from the query would look something like this:
{
"results": [
{
"metrics": {
"clicks": "78090"
},
"hotelPerformanceView": {
"resourceName": "customers/1234567890/hotelPerformanceView"
}
}
],
"totalResultsCount": "1",
"fieldMask": "metrics.clicks"
}
Get segmented clicks metrics
The following example query for hotel performance views gets clicks and segments the results by Hotel ID.
SELECT
segments.partner_hotel_id,
metrics.clicks
FROM hotel_performance_view
The results from the query would look something like the JSON string shown below. The clicks are segmented by partnerHotelID and thus two or more objects can be returned for the same hotelPerformanceView.
{
"results": [
{
"metrics": {
"clicks": "7055"
},
"hotelPerformanceView": {
"resourceName": "customers/1234567890/hotelPerformanceView"
},
"segments": {
"partnerHotelId": "1111"
}
},
{
"metrics": {
"clicks": "3047"
},
"hotelPerformanceView": {
"resourceName": "customers/1234567890/hotelPerformanceView"
},
"segments": {
"partnerHotelId": "1112"
}
},
...
]
}
Get ad group metrics
The following example query for ad groups gets impressions and clicks over the last 30 days, segmented by date.
SELECT
campaign.name,
campaign.status,
ad_group.name,
segments.date,
metrics.impressions,
metrics.clicks
FROM ad_group
WHERE ad_group.type = HOTEL_ADS
AND segments.date DURING LAST_30_DAYS
The results from the query would look something like the JSON string shown below. The response is filtered for only the metrics meeting the WHERE clause conditions. The date field is populated by the last date included in the 30 day period.
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"name": "test campaign",
"status": "ENABLED"
},
"adGroup": {
"resourceName": "customers/123456789/adGroups/11111111",
"name": "test adgroup"
},
"metrics": {
"clicks": "91",
"impressions": "5145"
},
"segments": {
"date": "2020-05-10"
}
}
]
}
Get enabled ad group ads
The following example query for ad group ads gets the ad groups that will serve. For any ad group to serve, the ad group ad, the ad group, and the campaign must all be enabled.
SELECT
ad_group.id,
ad_group.name,
ad_group.status,
campaign.name,
campaign.status,
ad_group_ad.status
FROM ad_group_ad
WHERE ad_group_ad.status = ENABLED
AND campaign.status = ENABLED
AND ad_group.status = ENABLED
The results from the query would look something like the JSON string shown below.
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"name": "test campaign",
"status": "ENABLED"
},
"adGroup": {
"resourceName": "customers/123456789/adGroups/111111111111",
"id": "106121857411",
"name": "test adgroup",
"status": "ENABLED"
},
"adGroupAd": {
"resourceName": "customers/123456789/adGroupAds/111111111111~33333333333",
"status": "ENABLED",
"ad": {
"resourceName": "customers/123456789/ads/77777777777"
}
}
}
]
}
Useful views for Hotel Ads reporting
In prior APIs for Hotel Ads reporting, you could retrieve a specific report,
such as a performance report. In the Google Ads API, this kind of data is
represented in separate *_view
resources, such as hotel_performance_view
and
hotel_group_view
. This section describes the *_view
resources that are
useful for Hotel Ads reporting. Example queries are also provided.
Note that each *_view
resource has specific resource fields,
segments, and metrics. Consult the documentation referenced below for the
specific *_view
resource before constructing your query.
Hotel Group View
The Hotel Group View is a criteria view, so it's useful for retrieving metrics for a specific criteria type of a hotel group.
The following example query for hotel group views gets clicks for each hotel in a listing group for the entire hotel listing group tree, including the root node ("All hotels").
SELECT
metrics.clicks,
ad_group_criterion.listing_group.case_value.hotel_id.value
FROM hotel_group_view
The results from the query would look something like the JSON string below.
Given that case_value
is undefined for the root node ("All hotels"), it's
apparent that the first row represents the metrics for the "All hotels" listing
group, while the second row represents the metrics for the child listing group
representing "Other".
{
"results": [
{
"metrics": {
"clicks": "5"
},
"adGroupCriterion": {
"resourceName": "customers/1234567890/adGroupCriteria/22222222222~111111111111"
},
"hotelGroupView": {
"resourceName": "customers/1234567890/hotelGroupViews/22222222222~111111111111"
}
},
{
"metrics": {
"clicks": "0"
},
"adGroupCriterion": {
"resourceName": "customers/1234567890/adGroupCriteria/22222222222~111111111112"
"listingGroup": {
"caseValue": {
"hotelId": {
}
}
}
},
"hotelGroupView": {
"resourceName": "customers/1234567890/hotelGroupViews/22222222222~111111111112"
}
},
{
"metrics": {
"clicks": "3"
},
"adGroupCriterion": {
"resourceName": "customers/1234567890/adGroupCriteria/22222222222~111111111113"
"listingGroup": {
"caseValue": {
"hotelId": {
"value": "11111111111111111"
}
}
}
}
},
"hotelGroupView": {
"resourceName": "customers/1234567890/hotelGroupViews/22222222222~111111111113"
}
},
{
"metrics": {
"clicks": "2"
},
"adGroupCriterion": {
"resourceName": "customers/1234567890/adGroupCriteria/22222222222~111111111114"
"listingGroup": {
"caseValue": {
"hotelId": {
"value": "11111111111111112"
}
}
}
}
},
"hotelGroupView": {
"resourceName": "customers/1234567890/hotelGroupViews/22222222222~111111111114"
}
},
]
}
Hotel Performance View
The Hotel Performance View is useful if you want to retrieve performance metrics for a hotel using data that does not come from a hotel grouping, even if you have a subdivision based on Hotel ID.
The following example query for hotel performance views gets clicks and segments the results by Hotel ID.
SELECT
segments.partner_hotel_id,
metrics.clicks
FROM hotel_performance_view
The results from the query would look something like the JSON string shown
below. The clicks are segmented by partner_hotel_id
and thus two or more
objects can be returned for the same hotel performance view.
{
"results": [
{
"metrics": {
"clicks": "7055"
},
"hotelPerformanceView": {
"resourceName": "customers/1234567890/hotelPerformanceView"
},
"segments": {
"partnerHotelId": "1111"
}
},
{
"metrics": {
"clicks": "3047"
},
"hotelPerformanceView": {
"resourceName": "customers/1234567890/hotelPerformanceView"
},
"segments": {
"partnerHotelId": "1112"
}
},
...
]
}
Ad Group Audience View
The Ad Group Audience View is useful if you want to retrieve performance metrics for audiences attached at the ad group level.
Note that this is a general view for various types of campaigns, not just hotel
campaigns. This view also provides the ability to segment results by
hotel_date_selection_type
, which can be used to specify whether the hotel date
was selected by the user or was a default date for the search set by Google. If
you segment by hotel_date_selection_type
, only results for hotel campaigns are
returned.
An example query is shown below. The query returns one row per ad_group_criterion.user_list.user_list
.
SELECT
ad_group.id,
campaign.id,
ad_group_criterion.user_list.user_list,
segments.device,
segments.hotel_date_selection_type,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.all_conversions_value
FROM ad_group_audience_view
The results from the query would look something like the JSON string shown below.
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"id": "23456789"
},
"metrics": {
"clicks": "0",
"conversions": "0",
"costMicros": "0",
"impressions": "3",
"allConversionsValue": "0"
},
"adGroupCriterion": {
"resourceName": "customers/123456789/adGroupCriteria/23456789~789456",
"userList": {
"userList": "customers/123456789/userLists/456789"
}
},
"adGroupAudienceView": {
"resourceName": "customers/8005193609/adGroupAudienceViews/23456789~789456"
},
"segments": {
"device": "TABLET",
"hotelDateSelectionType": "USER_SELECTED"
}
}
]
}
Campaign Audience View
The Campaign Audience View is useful if you want to retrieve performance metrics for audiences attached at the campaign level.
Note that this is a general view for various types of campaigns, not just hotel
campaigns. This view also provides the ability to segment results by
hotel_date_selection_type
, which can be used to specify whether the hotel date
was selected by the user or was a default date for the search set by Google. If
you segment by hotel_date_selection_type
, only results for hotel campaigns are
returned.
An example query is shown below. The query returns one row per campaign_criterion.user_list.user_list
.
SELECT
campaign.id,
campaign_criterion.user_list.user_list,
segments.device,
segments.hotel_date_selection_type,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.all_conversions_value
FROM campaign_audience_view
The results from the query would look something like the JSON string shown below.
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"id": "23456789"
},
"metrics": {
"clicks": "0",
"conversions": "0",
"costMicros": "0",
"impressions": "3",
"allConversionsValue": "0"
},
"campaignCriterion": {
"resourceName": "customers/123456789/campaignCriteria/23456789~789456",
"userList": {
"userList": "customers/123456789/userLists/456789"
}
},
"campaignAudienceView": {
"resourceName": "customers/8005193609/campaignAudienceViews/23456789~789456"
},
"segments": {
"device": "TABLET",
"hotelDateSelectionType": "USER_SELECTED"
}
}
]
}
Useful reports for Hotel Ads
This section provides several useful reports designed specifically for Hotel ads.
Performance reports
These queries leverage the Hotel Performance View to get performance data.
Performance
Example query:
SELECT
segments.hotel_center_id,
segments.device,
segments.partner_hotel_id,
segments.hotel_check_in_day_of_week,
segments.hotel_date_selection_type,
segments.hotel_length_of_stay,
segments.hotel_booking_window_days,
metrics.search_top_impression_share,
metrics.search_absolute_top_impression_share,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.all_conversions_value,
metrics.search_impression_share
FROM hotel_performance_view
Example JSON response:
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789"
},
"metrics": {
"clicks": "0",
"conversions": "0.0",
"costMicros": "0",
"impressions": "0",
"searchImpressionShare": "0.0999",
"searchAbsoluteTopImpressionShare": "0.0999",
"searchTopImpressionShare": "0.0999",
"allConversionsValue": "1"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "DESKTOP",
"hotelBookingWindowDays": "3",
"hotelCenterId": "1234",
"hotelCheckInDayOfWeek": "MONDAY",
"hotelDateSelectionType": "USER_SELECTED",
"hotelLengthOfStay": "4",
"partnerHotelId": "123"
}
},
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789"
},
"metrics": {
"clicks": "0",
"conversions": "0.0",
"costMicros": "0",
"impressions": "1",
"searchImpressionShare": "1.0",
"searchAbsoluteTopImpressionShare": "0.0999",
"searchTopImpressionShare": "1.0",
"allConversionsValue": "1"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "DESKTOP",
"hotelBookingWindowDays": "3",
"hotelCenterId": "1234",
"hotelCheckInDayOfWeek": "MONDAY",
"hotelDateSelectionType": "USER_SELECTED",
"hotelLengthOfStay": "4",
"partnerHotelId": "123"
}
}
]
}
Performance with click type
Example query:
SELECT
segments.click_type,
segments.hotel_center_id,
segments.device,
segments.partner_hotel_id,
segments.hotel_check_in_day_of_week,
segments.hotel_date_selection_type,
segments.hotel_length_of_stay,
segments.hotel_booking_window_days,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.all_conversions_value
FROM hotel_performance_view
Example JSON response:
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789"
},
"metrics": {
"clicks": "0",
"conversions": "0.0",
"costMicros": "0",
"impressions": "1",
"allConversionsValue": "0.0"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "DESKTOP",
"hotelBookingWindowDays": "0",
"hotelCenterId": "1234",
"hotelCheckInDayOfWeek": "TUESDAY",
"hotelDateSelectionType": "USER_SELECTED",
"hotelLengthOfStay": "4",
"partnerHotelId": "123",
"clickType": "HOTEL_PRICE"
}
},
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789"
},
"metrics": {
"clicks": "1",
"conversions": "0.0",
"costMicros": "0",
"impressions": "1",
"allConversionsValue": "0.0"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "DESKTOP",
"hotelBookingWindowDays": "0",
"hotelCenterId": "1234",
"hotelCheckInDayOfWeek": "TUESDAY",
"hotelDateSelectionType": "USER_SELECTED",
"hotelLengthOfStay": "4",
"partnerHotelId": "12345",
"clickType": "HOTEL_PRICE"
}
}
]
}
Conditional rates performance report
The report query shown below gets performance metrics segmented by:
campaign
hotel_center_id
hotel_country
hotel_rate_rule_id
hotel_rate_type
device
partner_hotel_id
See HotelRateType
for a
description of the types.
Multiple segments can be included in a query; however, the number of returned rows can increase significantly with additional segments.
SELECT
campaign.id,
segments.hotel_center_id,
segments.hotel_country,
segments.hotel_rate_rule_id,
segments.hotel_rate_type,
segments.device,
segments.partner_hotel_id,
metrics.search_top_impression_share,
metrics.search_absolute_top_impression_share,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM hotel_performance_view
The results from the query would look something like the JSON string shown below.
{
"results": [
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"id": "23456789"
},
"metrics": {
"clicks": "1",
"conversions": "0.0",
"costMicros": "0",
"impressions": "24",
"searchAbsoluteTopImpressionShare": "0.0999",
"searchTopImpressionShare": "0.17073170731707318"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "TABLET",
"hotelCenterId": "1234",
"partnerHotelId": "123",
"hotelRateRuleId": "desktop",
"hotelRateType": "PUBLIC_RATE"
}
},
{
"campaign": {
"resourceName": "customers/123456789/campaigns/23456789",
"id": "23456789"
},
"metrics": {
"clicks": "107",
"conversions": "0.0",
"costMicros": "0",
"impressions": "1668",
"searchAbsoluteTopImpressionShare": "0.0999",
"searchTopImpressionShare": "0.3581201665675193"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"device": "TABLET",
"hotelCenterId": "1234",
"partnerHotelId": "1235",
"hotelRateRuleId": "desktop",
"hotelRateType": "PUBLIC_RATE"
}
}
]
}
Price competitiveness report
You can get insights into how your prices compare to competitors' prices on the same hotel itineraries.
Example query:
SELECT
segments.hotel_center_id,
segments.partner_hotel_id,
segments.hotel_price_bucket,
metrics.hotel_average_lead_value_micros,
metrics.hotel_price_difference_percentage
FROM hotel_performance_view
Example JSON response:
{
"results": [
{
"metrics": {
"hotelAverageLeadValueMicros": "96416341.829268292",
"hotelPriceDifferencePercentage": "-0.014627310872986811"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"hotelCenterId": "1234",
"partnerHotelId": "123",
"hotelPriceBucket": "LOWEST_TIED"
}
}
]
}
Average booked price report
You can get the data needed to calculate the average booked price
(all_conversions_value
divided by conversions
) for hotels.
Example query:
SELECT
segments.hotel_center_id,
segments.partner_hotel_id,
segments.hotel_price_bucket,
metrics.all_conversions_value,
metrics.conversions
FROM hotel_performance_view
Example JSON response:
{
"results": [
{
"metrics": {
"allConversionsValue": "123.5",
"conversions": "1"
},
"hotelPerformanceView": {
"resourceName": "customers/123456789/hotelPerformanceView"
},
"segments": {
"hotelCenterId": "1234",
"partnerHotelId": "123",
"hotelPriceBucket": "LOWEST_TIED"
}
}
]
}
Audience reports
Audience reports show performance of bid multipliers on Google Ads audience lists. For examples of audience reports, see the example queries in Ad Group Audience View and Campaign Audience View.