Transaction (Property Data) Message

Overview

The ARI Transaction (Property Data) message defines the information about each property's room types and packages (or rate plans). Each room type data includes a unique identifier (RoomID), localized name, description, and URLs to room photos. Each package data includes a unique identifier (PackageID), localized name, description, occupancy, and value-adds.

You can use a Transaction message to do the following:

  • Define data for one or more properties.
  • Define room type and package information for each property.
  • Control product offerings.

Also, you can set actions to do the following:

  • Add a room type and package to a property.
  • Remove a room type and package from a property.

For examples of transaction messages, see Transaction (Property Data) Examples.

Required and optional elements

The XML Reference provides descriptions of the required and optional elements. For details on attributes and child elements, see Transaction (Property Data) Elements & Attributes.

Syntax and schemas

Use the Transaction (Property Data) Syntax example as a reference when you create the Transaction message to ensure you are following the correct format.

You can use a third-party XML tool such as xmllint to validate your feeds with the published schemas before submitting them to Google. For the Transaction message schema, see Hotel Ads schemas.

Guidelines

Use the following guidelines for a Transaction message:

Actions:

delta: Use to add or update new room types and packages (rate plans).

overlay: Use to replace all room types and packages for a property with a new set. Must include information for all room types and rate plans that you still want to sell.

Language support:

Specify one to two languages (English, and a local language for the property if needed) for the Name, Description, and Caption fields. You can add more than two languages if needed.

Room types and packages:

When updating a room type or package, you must send all of the related information for that room type or package. For example, when you add a photo you must also include the name and description.

<AllowablePackageIDs> and <AllowableRoomIDs> are optional, and if unset, any combination of room type and rate plan can be made. You still have to send availability and rates with the room type and rate plan IDs. These elements let you control products as well as deactivate combinations your system no longer supports.

Send Google a Transaction message update whenever there is a change in room types or packages, or important details about room types or packages that need to be added.

Example

This section provides a basic example of an ARI Transaction message using required and optional elements. To add or update room types and packages, you use an action for either delta to add or update room types and packages, or overlay to replace all room type and package definitions (deletes old entries).

You need to specify one to two languages (English, and a local language for the property if needed) for the Name, Description, and Caption fields. Then, add property data information, including links to photos.

For <PropertyID> and<RoomID>, use the same IDs you use within your system for rate plans and room types (respectively). Consistency with your system is critical for ensuring that Google is correctly displaying your prices and data.

Once you prepare your file, you must send it to Google via a POST message to the following endpoint: https://www.google.com/travel/hotels/uploads/property_data

To learn more about how to push/POST the message, see Pushing messages.

The following example shows how to set the Transaction message using a delta action:

<?xml version="1.0" encoding="UTF-8"?>
<Transaction timestamp="202X-XX-XXT00:00:00-0X:00" id="12345678" partner="partner_key">
  <PropertyDataSet action="delta">
    <Property>PROPERTYID</Property>
      <RoomData>
        <RoomID>ROOMID</RoomID>
        <Name><Text text="ROOM NAME" language="en"/></Name>
        <Description>
          <Text text="ROOM DESCRIPTION TEXT" language="en"/>
        </Description>
        <Capacity>4</Capacity>
        <PhotoURL>
          <Caption><Text text="ROOM PHOTO CAPTION TEXT" language="en"/></Caption>
          <URL>https://LINK TO PHOTO</URL>
        </PhotoURL>
      </RoomData>
      <PackageData>
        <PackageID>BASE</PackageID>
        <Name><Text text="Internet Special" language="en"/></Name>
        <Description><Text text="Direct Booking through Hotel Website" language="en"/></Description>
        <Refundable available="true" refundable_until_days="2" refundable_until_time="12:00"/>
      </PackageData>
  </PropertyDataSet>
</Transaction>

For more examples, such as how to use the overlay action, add a room type and package to existing property data, and remove existing room types and packages, see Transaction (Property Data) Examples.

How-tos

This section provides solutions to scenarios you might encounter while sending Transaction messages.

Scenario 1: How to remove room type data

How do I remove existing room type and/or package data?

Description

You have sent multiple room types, including King and Queen rooms, for the property. All Queen room types are unavailable during a remodel and only King room types are currently available.

Solution

  • You don't need to update the nightly availability, rates, or inventory for the room type and package IDs that have been removed or deactivated.
  • If the room type or package has been removed or deactivated, send a new Transaction message with action="overlay" which only includes the room types and packages that are still active and excludes the removed room type or package.

Sample

This XML snippet shows how to use the overlay action to remove a room type.

Here is the original delta action which includes King and Queen room types:

  <PropertyDataSet action="delta">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>King</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Capacity>2</Capacity>
    </RoomData>
    <PackageData>
      <PackageID>Standard</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <Description>
        <Text text="Standard rate" language="en"/>
      </Description>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
      </PackageData>
    <RoomData>
      <RoomID>Queen</RoomID>
      <Name>
        <Text text="Queen" language="en"/>
      </Name>
      <Capacity>2</Capacity>
      <!-- Additional RoomData child elements omitted. -->
    </RoomData>
  </PropertyDataSet>

You can then set overlay to remove the Queen room type and keep the King room type:

  <PropertyDataSet action="overlay">
    <Property>Property_1</Property>
    <RoomData>
      <RoomID>King</RoomID>
      <Name>
        <Text text="King" language="en"/>
      </Name>
      <Capacity>2</Capacity>
    </RoomData>
    <PackageData>
      <PackageID>Standard</PackageID>
      <Name>
        <Text text="Standard" language="en"/>
      </Name>
      <Description>
        <Text text="Standard rate" language="en"/>
      </Description>
      <Refundable available="true" refundable_until_days="7" refundable_until_time="18:00:00"/>
      <BreakfastIncluded>0</BreakfastIncluded>
    </PackageData>
  </PropertyDataSet>

Scenario 2: How to control products using AllowablePackageIDs

How do I control products (combinations of room types and packages) when packages are grouped by room type?

Description

You have certain packages that are only available to certain room types. For example, if your property has four room types (including Presidential suite), and six different packages, but only a few packages are eligible for the presidential suite, you can specify eligibility.

Solution

Send an updated Transaction message that specifies which products are included in the package using <AllowablePackageIDs>.

Sample

This XML snippet shows how to use <AllowablePackageIDs> to specify packages used with a certain room type. Here, the Penthouse suite room type allows only the Penthouse all-inclusive package or the Free breakfast package while the King suite room type allows only the King all-inclusive package or the Pet friendly package.

<RoomData>
  <RoomID>penthouse_suite</RoomID>
  <AllowablePackageIDs>
    <AllowablePackageID>penthouse_all_inclusive</AllowablePackageID>
    <AllowablePackageID>free_breakfast</AllowablePackageID>
  </AllowablePackageIDs>
  <!-- Additional child elements omitted. -->
</RoomData>
<RoomData>
  <RoomID>king_suite</RoomID>
  <AllowablePackageIDs>
    <AllowablePackageID>king_all_inclusive</AllowablePackageID>
    <AllowablePackageID>pet_friendly</AllowablePackageID>
  </AllowablePackageIDs>
  <!-- Additional child elements omitted. -->
</RoomData>
<PackageData>
  <PackageID>penthouse_all_inclusive</PackageID>
</PackageData>
<!-- Additional child elements omitted. -->
<PackageData>
  <PackageID>free_breakfast</PackageID>
</PackageData>
<!-- Additional child elements omitted. -->
<PackageData>
  <PackageID>king_all_inclusive</PackageID>
</PackageData>
<!-- Additional child elements omitted. -->
<PackageData>
  <PackageID>pet_friendly</PackageID>
</PackageData>

Scenario 3: How to control products using AllowableRoomIDs

How do I control products (combinations of room types and packages) when room types are grouped by package?

Description

A room type and package combination is no longer sold as a product or you want to control what is included in a new package. For example, you want to specify only certain room types, such as King and Queen rooms with an ocean view, with a package.

Solution

Send an updated Transaction message that specifies the exact products included with the package using the <AllowableRoomIDs> element.

Sample

This XML snippet shows how to use <AllowableRoomID> to specify oceanview King and Queen room types in the package.

<PackageID>RO</PackageID>
<AllowableRoomIDs>
  <AllowableRoomID>king_oceanview</AllowableRoomID>
  <AllowableRoomID>queen_oceanview</AllowableRoomID>
</AllowableRoomIDs>