Conditional Rates

Conditional rates are a type of rate rule that let you offer different rates for your itineraries, based on the end-user's device and country, or whether the end-user is signed in to their Google account.

Overview

Conditional rates show in the standard pricing slots, and are visible only to users whose searches meet the criteria for the associated conditional rate. These criteria can be based on:

To enable conditional rates, modify the following:

  • Rate rules XML file: Define the conditions in which the conditional rates are applied.
  • Price feed: Use the <Rate> element in a Transaction message to set the rates.
  • Landing Page file: Add rate-rule specific values to your deep links.

Device-specific conditional rates

Device-specific rates are hotel rates that are only visible to and bookable by users on a specific device: mobile, tablet, or desktop. The rates are provided by our partners; end-users can see and book the same device-specific rates on the partner’s site. Note that tablet users are eligible for desktop rates.

Country-specific conditional rates

Country-specific rates are hotel rates that are only visible to and bookable by users who are searching for hotels from a specific country. Google determines the country by looking at the end-user's IP address. The rates are provided by Google's partners and users can see and book the same country-specific rates on the partner’s own country-specific site.

Language-specific conditional rates

Language-specific rates are visible only to users who are searching for hotels while utilizing a specific language setting in Google. Language-specific conditions are defined using the <LanguageCode> element.

Downsampled conditional rates

Downsampled conditional rates are visible only to a randomized subset of all eligible users. The sampling rate is defined using the <MaxUsersPercent> element and represents the fraction of (number of users selected to view rate)/(total eligible users).

Signed-in conditional rates

Signed-in rates are visible only to users who have signed in with a Google account. The rates are provided by Google's partners, and users can see and book the rates on the partner’s own site. Signed-in rates are defined using the <UserSignedIn> element.

Create a rate rules XML file

You define rate rules for conditional rates using a rate rules XML file. For more information, see the Rate Rules XML Reference.

Update your price feed

You set conditional rates in a similar way to other rates: using the element in a Transaction message.

The <Rate> element may be used as a repeated child of <Rates> within the <RoomBundle> or <Result> elements. For it to be a conditional rate, you must set the value of the rate_rule_id attribute which matches the rate rule ID that you defined in the rate rules XML file.

If you do not have a default public double occupancy rate, then set the <Baserate> child element of the <Result> message to -1. Any conditional <Rates> that are sent to us in this case will be considered valid.

The following example shows a Transaction message that contains a base rate and a conditional rate:

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">200.00</Baserate>
    <Tax currency="USD">20.00</Tax>
    <OtherFees currency="USD">1.00</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates -->
      <Rate rate_rule_id="mobile">
        <!-- Override base rate and taxes for conditional rates -->
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <!-- NOTE: OtherFees is inherited from the above setting -->
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Rate under a <RoomBundle>

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>

    <Baserate currency="USD">300.00</Baserate>
    <Tax currency="USD">30.00</Tax>
    <OtherFees currency="USD">2.00</OtherFees>

    <RoomBundle>
      <RoomID>single</RoomID>
      <Baserate currency="USD">300.00</Baserate>
      <Tax currency="USD">30.00</Tax>
      <OtherFees currency="USD">2.00</OtherFees>
    </RoomBundle>

    <RoomBundle>
      <RoomID>3</RoomID>  <!-- Links to data in metadata -->
      <RatePlanID>basic</RatePlanID>
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <ChargeCurrency>web</ChargeCurrency>
      <BreakfastIncluded>1</BreakfastIncluded>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">269.00</Baserate>
          <Tax currency="USD">2.69</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
        </Rates>
      </Rates>

    </RoomBundle>
  </Result>
</Transaction>

Multiple Rates under a <RoomBundle>

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">
  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>2</Nights>

    <!-- Any attribute listed below will not be inherited between bundles
         or baserates. -->
    <!-- The baserate attribute is optional. -->
    <!-- If a baserate is provided, the pricing must match a specific roombundle
    price provided below. -->
    <Baserate currency="USD">300.00</Baserate>
    <Tax currency="USD">30.00</Tax>
    <OtherFees currency="USD">2.00</OtherFees>

    <!-- When Google receives new room bundle information for an itinerary, all
    previous room bundle pricing is dropped from Google's cache. Thus, if you
    want to delete a specific room bundle from Google's cache, you may do so
    by simply not providing that specific room bundle in subsequent transaction
    messages. -->
    <RoomBundle>
     ...
      <!-- RoomID is required, PackageID is optional. -->
      <RoomID>5</RoomID>
      <PackageID>ABC</PackageID>
      <!-- Baserate is required. -->
      <Baserate currency="USD">275.00</Baserate>
      <Tax currency="USD">27.50</Tax>
      <OtherFees currency="USD">2.00</OtherFees>

      <!-- RatePlanID is optional and represents the unique identifier for a
      room and package data combination. We strongly recommend using RatePlanID
      as a variable to build your dynamic landing page (formerly Point of Sale)
      URL. For details, see Using Variables and Conditions. -->
      <RatePlanID>5-ABC</RatePlanID>

      <!-- Occupancy is mandatory for RoomBundle elements. Occupancy and elements below do not get inherited between
      rates and other roombundles. -->
      <Occupancy>2</Occupancy>
      <OccupancyDetails>
        <NumAdults>2</NumAdults>
      </OccupancyDetails>
      <InternetIncluded>1</InternetIncluded>

      <!-- Elements below will get inherited between rates and other roombundles
      (and AllowablePOS). -->

      <!-- Rate rule "mobile" overrides chargeCurrency, "us_or_gb" doesn't. -->
      <ChargeCurrency>web</ChargeCurrency>
      <Custom1>ratebasic</Custom1>
      <!-- Neither rate overrides Custom2. -->
      <Custom2>ratebasic</Custom2>

      <Rates>
        <Rate rate_rule_id="mobile">
          <Baserate currency="USD">258.33</Baserate>
          <Tax currency="USD">25.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides ChargeCurrency from roombundle. -->
          <ChargeCurrency>hotel</ChargeCurrency>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode321</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
        <Rate rate_rule_id="us_or_gb">
          <Baserate currency="USD">268.33</Baserate>
          <Tax currency="USD">26.83</Tax>
          <OtherFees currency="USD">1.00</OtherFees>
          <!-- The value below overrides Custom1 from roombundle. -->
          <Custom1>ratecode432</Custom1>
          <!-- Custom2 is inherited from roombundle. -->
        </Rate>
      </Rates>
    </RoomBundle>
  </Result>
</Transaction>

Conditional Rate with no public double occupancy rate

<?xml version="1.0" encoding="UTF-8" ?>
<Transaction timestamp="2017-07-18T16:20:00-04:00" id="42">

  <Result>
    <Property>1234</Property>
    <Checkin>2018-06-10</Checkin>
    <Nights>1</Nights>

    <Baserate currency="USD">-1</Baserate>
    <Tax currency="USD">0</Tax>
    <OtherFees currency="USD">0</OtherFees>

    <Rates>
      <!-- The rate_rule_id is required when using conditional rates. -->
      <Rate rate_rule_id="mobile">
        <Baserate currency="USD">180.00</Baserate>
        <Tax currency="USD">18.00</Tax>
        <OtherFees currency="USD">1.00</OtherFees>
        <Custom1>ratecode123</Custom1>
      </Rate>
    </Rates>

  </Result>
</Transaction>

Update your landing page file

To ensure that eligible end-users can book the discounted rate through a deep link, you might be required to modify your Landing Page file. There may be additional implementation needed on the booking website to properly fulfill the discounted rates so that when the user clicks through, your website shows them the discounted rate.

We expect you to honor the price shown at the conditional rate deep link.

In a dynamic deep link, you can include the rate rule by its name (the id attribute of the <RateRule> element) with the RATE-RULE-ID variable.

The following example adds the rate rule ID:

https://bookingsite.com/landing.do?id=(PARTNER-HOTEL-ID)&arrival=(CHECKINDAY)-(CHECKINMONTH)-(CHECKINYEAR)&departure=(CHECKOUTDAY)-(CHECKOUTMONTH)-(CHECKOUTYEAR)&lang=(USER-LANGUAGE)&currency=(USER-CURRENCY)&prid=(RATE-RULE-ID)

The Landing Page file also supports the IF-RATE-RULE-ID directive that lets you conditionally define parts of the URL, based on whether the rate rule exists, as the following example shows:

https://bookingsite.com/(IF-RATE-RULE-ID)privatelanding.do(RATE-RULE-ID)(ELSE)landing.do(ENDIF)?id=(PARTNER-HOTEL-ID)&arrival=(CHECKINDAY)-(CHECKINMONTH)-(CHECKINYEAR)&departure=(CHECKOUTDAY)-(CHECKOUTMONTH)-(CHECKOUTYEAR)&lang=(USER-LANGUAGE)&currency=(USER-CURRENCY)

This example chooses between two landing pages, depending on whether the rate rule ID is set.

For more information, see Using Variables and Conditions.