Pricing overview

A hotel price is the lowest price for a double-occupancy room for the given itinerary which is a combination of check-in date and nights of stay.

Overview

The prices you define for hotel or itinerary combinations are central to hotel search results. It is very important that you keep your prices fresh, accurate, and competitive.

Google typically uses prices from its price cache when displaying search results. Whenever you send Google a Transaction message that contains pricing updates, Google caches that data.

Google can also request updated prices from you in real time for Hotel Ads accounts. When a user searches for a specific hotel or itinerary combination, Google can send you a "live" request or live Pricing Query message. If you respond within the specified timeframe, then that price can appear in the results of the user requested itinerary. Google also caches the results of Live Pricing Queries so that they can be served for future requests.

Size of pricing updates

When setting prices for a room, you provide advanced booking and length of stay (LoS) values, with prices for each combination of those values and room ID or rate plan ID. The booking and LoS values default to the following:

  • Up to 330 days advanced booking
  • Up to 30-night stays

Based on these general guidelines, a single room's pricing can require up to 9,900 separate entries (330 * 30), one for each combination of the check-in date and number of nights.

The following matrix illustrates part of the itinerary data for a single hotel. Each cell with a price in the matrix represents one itinerary combination of a check-in date and a length of stay; each itinerary represents a separate value that Google requests for the property:

Which hotels and itineraries are repriced

The hotels that Google prices are defined by your Hotel List. Unless they are disabled, all hotels in the Hotel List Feed are repriced with Transaction messages, or, in some cases, Live Pricing Queries.

Update Pricing

The general process for updating prices is:

  1. You define the hotels to be priced in your Hotel List during initial setup and then with periodic updates when your list changes.

  2. Changed Pricing only: Google sends your server a Hint Request messages.

  3. Changed Pricing only: Your server responds with a Hint Response message that defines which hotel or itinerary combinations should be repriced.

  4. Google sends a Query message to your server. The Query message includes hotel IDs and itineraries for which Google needs prices.

  5. For Live Pricing Queries, Google specifies a time limit in which you must respond in order for the hotel or itinerary to appear in the current auction.

  6. Your server responds with a Transaction message that defines the new prices.

  7. Google updates its cache with the pricing data from your Transaction message.

For more information about Pull and Changed Pricing, see Delivery Modes.

Pricing with Transaction messages

To set prices for a hotel or itinerary (a combination of the check-in date plus the number of nights), use a Transaction message with one <Result> for each itinerary.

Use the following guidelines when setting prices:

  • Rates: Provide the lowest available double-occupancy rate for each itinerary. Setting rates with the Hotel Prices API that are different from those that are shown on your site can be confusing to users and result in lost bookings.

  • Number of Nights: Specify the total cost of the stay for each itinerary, along with per-night rate. Google calculates the per-night rate for you.

  • Policies: Adhere to Google's price accuracy policy when setting rates. This requires that the prices that show up in Google's search results are not markedly different from the final booking price.

  • All-inclusive pricing: To be eligible to appear in the listings for US and Canadian end-users, your hotels must typically break out taxes and fees from the base rate. For more information, see Taxes and Fees Policy.

  • Rounding: Don't round values for prices, taxes, and fees.

For information on removing hotels from your inventory, see Removing Inventory.

Pricing messages

When using Transaction messages to reprice itineraries, the following child elements of <Result> are required:

  • <Property>
  • <Baserate>
  • <Tax>
  • <OtherFees>
  • <Checkin> (itinerary)
  • <Nights> (itinerary)

You can optionally include the following child elements of <Result> in your Transaction message:

  • <AllowablePointsOfSale>
  • <ChargeCurrency>
  • <Custom[1-5]>
  • <RoomBundle>
  • <RoomID>

For more information about each of these elements, see <Transaction>.

Pricing example

The following example sets the price for a room (default double occupancy) for 1 through 7 nights with a check-in date of June 7th:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="2017-08-24T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>1</Nights>
    <Baserate currency="USD">209.99</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>2</Nights>
    <Baserate currency="USD">419.98</Baserate>
    <Tax currency="USD">25.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>3</Nights>
    <Baserate currency="USD">614.97</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>4</Nights>
    <Baserate currency="USD">819.96</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>5</Nights>
    <Baserate currency="USD">999.95</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>6</Nights>
    <Baserate currency="USD">1193.94</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-07</Checkin>
    <Nights>7</Nights>
    <Baserate currency="USD">1259.93</Baserate>
    <Tax currency="USD">21.12</Tax>
    <OtherFees currency="USD">2.00</OtherFees>
  </Result>
</Transaction>

Each Transaction message can have any number of <Result> elements, as long as the total size of the message doesn't exceed 100MB.

Frequency of pricing updates

You should plan to update your prices as often as they change. How you do this depends on whether you chose the Pull or Changed Pricing method of updating pricing information. For more information, see choosing a delivery mode.

The frequency and number of Live Pricing Queries that Google sends to you is also configurable. For more information, see Live Pricing Queries.

All-inclusive pricing

Depending on the geographic location of your users, you might consider using all-inclusive pricing instead of itemized pricing.

All-inclusive pricing includes the total value of the base rate of the room plus the taxes and fees in the <Baserate> element in the Transaction message. Itemized pricing separates the price into the <Baserate>, <Taxes>, and <OtherFees> elements.