Tax and Fee Message

Overview

The TaxFeeInfo message defines the taxes and fees that are applicable to a user when booking a property and based on the property's tax regulations outlined on the website. To add tax and fee data, you use the Rate message (OTA_HotelRateAmountNotifRQ).

The only supported action for this message is overlay which is used to replace the tax and fee data for each property. It's important to send tax and fee updates whenever there are changes.

Methods to add taxes and fees

There are two general ways to add taxes and fees:

In the first method, you specify AmountAfterTax in the Rate message; you add the taxes and fees by sending rate messages that contain both the base nightly rates (exclusive of all taxes and fees) and the total nightly rates (inclusive of all taxes and fees). Because these rates are nightly, this approach only works for percentage-based taxes and fees or flat amounts that are nightly, and per-stay taxes and fees can't be used.

The second (preferred) method is to only send tax and fee-exclusive base nightly rates in the rate messages, and use TaxFeeInfo to convey taxes and fees at a property level. The individual taxes and fees can still be scoped to specific room types and rate plans, that are applicable to certain date ranges.

This page describes and refers only to the preferred method of using TaxFeeInfo and not the method of specifying AmountAfterTax in the Rate message (OTA_HotelRateAmountNotifRQ).

Methods to set taxes

You have the following options to set taxes:

  • Basis = [room|person]
  • Period = [stay|night]
  • Type = [percent|amount]

When Period is stay and Type is percent, Google applies taxes and fees for the entire stay even if a single date in the itinerary overlaps with the StayDates range. You can't specify applying a tax and fee only if ALL dates in the itinerary overlap with the stay-dates date-range.

For examples of various tax-related scenarios, see How-tos. The examples cover some of the top tax scenarios, including How-tos for:

  • Percentage tax
  • Flat tax applied per property
  • Percentage tax applied only to nights after the first night
  • Method to replace old with new taxes
  • Include or exclude taxes for countries
  • Set slab tax with brackets
  • Set tax and taxable fee

The following sections cover general guidelines, a basic example, and how-to scenarios to get you started with adding and updating your tax information.

Required and optional elements

The XML reference provides descriptions of the required and optional elements. For details on attributes and child elements, see TaxFeeInfo Elements & Attributes.

Syntax and schemas

Use the TaxFeeInfo Syntax example as a reference when you create the 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 TaxFeeinfo message schema, see Hotel ads schemas.

Guidelines

This section covers the common guidelines and special instructions for setting taxes and fees.

Actions

Overlay
Use the overlay action to replace all of the taxes for a property. The overlay action is the default and the only action that is supported. Any previous taxes and fees for this property will be cleared once this update is applied.

General

  • Each Tax is evaluated and, if applicable, computed based on the AmountBeforeTax amount that was specified in BaseByGuestAmt.

  • After all applicable taxes and fees are computed, they are added to the base price to form the total price.

  • Syntax for <Tax> and <Fee> are the same.

  • Taxes and fees can have constraints, such as:

    • Only applies to specific room types and rate plans.
    • Only applies to specific stay dates.

    These constraints are optional and you don't have to set every type of constraint; you can leave these empty if it's applicable to all.

  • Send a TaxFeeInfo update whenever there's a change to taxes or fees.

Example

This section provides a basic example of a TaxFeeInfo message using required and optional elements. Once you prepare your file, you will need to send it to Google using a POST message to this endpoint:

https://www.google.com/travel/hotels/uploads/taxes

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

For the hotel_id attribute, use the unique Hotel ID you used within your system for identifying the property. This value must match the Hotel ID specified using <id> in the <listing> element in the Hotel List feed. Consistency with your system is critical for ensuring that Google is correctly displaying your data.

This example shows how to set a 10% tax percentage and $50 fee amount for a property for the total stay (not per night):

<?xml version="1.0" encoding="UTF-8"?>
<TaxFeeInfo timestamp="2022-08-20T16:20:00-04:00"
            partner="partner_key"
            id="12345678">
  <Property>
    <ID>HOTELID</ID>
    <Taxes>
      <Tax>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>10</Amount>
      </Tax>
    </Taxes>
    <Fees>
      <Fee>
        <Type>amount</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>50</Amount>
        <Currency>USD</Currency>
      </Fee>
    </Fees>
  </Property>
</TaxFeeInfo>

For examples of adding age-related taxes and other examples, see Tax examples.

How-tos

This section provides solutions to scenarios you might encounter while setting taxes and fees.

Scenario 1: How to add a flat tax

This tax example shows how to set a flat tax per property.

Description

You want to apply a flat tax for the room or stay per property rather than a percentage tax.

Solution

Use amount rather than percentage to add the flat tax option.

Sample

This sample shows how to add a flat tax by using amount rather than percentage:

<?xml version="1.0" encoding="UTF-8"?>
<TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
            id="12345678"
            partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>amount</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>30</Amount>
      </Tax>
    </Taxes>
  </Property>
</TaxFeeInfo>

Scenario 2: How to target taxes using ApplicableNights

Description

You want to apply a flat fee tax only to nights after the first night. For example, there is a mandatory fee for daily use of a certain amenity that is excluded from the first night, where the guest(s) wouldn't have had the chance to use that particular amenity.

Solution

Use <ApplicableNights excluded="1"/> to control which nights have taxes applied.

Sample

This sample shows how to use ApplicableNights:

<?xml version="1.0" encoding="UTF-8"?>
<TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
            id="12345678"
            partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>amount</Type>
        <Basis>room</Basis>
        <Period>night</Period>
        <Amount>50</Amount>
        <ApplicableNights excluded="1"/>
      </Tax>
    </Taxes>
  </Property>
</TaxFeeInfo>

Scenario 3: How to replace old with new taxes and fees

Description

The current taxes and fees have changed and need to be replaced with new ones.

Solution

Use the overlay action to remove all of the existing taxes and fees.

Sample

The following sample shows how to remove all taxes and fees for a property:

    <?xml version="1.0" encoding="UTF-8"?>
    <TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
                id="12345678"
                partner="partner_key">
      <Property action="overlay">
        <ID>Property_1</ID>
      </Property>
    </TaxFeeInfo>

Scenario 4: How to include or exclude taxes for countries

Description

You need to include the tax for certain countries while excluding the tax from another. For example, you need to exclude taxes for a smaller confederation with non-EU taxes while taxing all other countries.

Solution

Use the include or exclude options for UserCountries type. Use include to apply the tax only to the country listed or use exclude to apply the tax to all countries except the one listed.

Sample

The following sample shows how to set taxes for users outside of the hotel country (Israel):

<?xml version="1.0" encoding="UTF-8"?>
<TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
            id="12345678"
            partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>night</Period>
        <UserCountries type="exclude">
          <Country code="IL"/>
        </UserCountries>
      </Tax>
    </Taxes>
  </Property>
</TaxFeeInfo>

Scenario 5: How to set slab tax with brackets

Description

You want to add a GST slab tax applied based on nightly rates.

Solution

For this scenario, suppose the target country's GST tax brackets are:

  • No tax if the nightly rate is less than or equal to 1000.
  • 12% tax if the nightly rate is greater than 1000 and less than or equal to 7500.
  • 18% tax if the nightly rate is greater than 7500.

Sample

The following sample shows how to set a slab tax with brackets:

<?xml version="1.0" encoding="UTF-8"?>
<TaxFeeInfo timestamp="2022-08-28T16:20:00-04:00"
            id="12345678"
            partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>night</Period>
        <Brackets base_amount="0">
          <Bracket starts_at="1000.01" amount="12"/>
          <Bracket starts_at="7500.01" amount="18"/>
        </Brackets>
      </Tax>
    </Taxes>
  </Property>
</TaxFeeInfo>

Scenario 6: How to set tax and taxable fee

Description

You want to add a tax such as VAT, and another service fee which is also applicable to that tax.

Solution

This scenario considers two example use cases of taxable fees:

  • Both the tax and the taxable fee are defined as percentage charges.
  • The tax is a percentage charge, while the taxable fee is a flat amount per stay.

Examples

Taxable fee as percent

This example has an AmountBeforeTax of $100, a GST tax of 18%, and an additional 5% service charge—making the total taxable fee percentage of 5.9% (5*1.18), and the total rate amount of $123.90 [= $118 (18% GST) + $5.9 (5.9% service charge)].

The following snippet defines the tax (GST) and taxable fee (service charge) as percentages:

<TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
  id="12345678"
  partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>18</Amount>
      </Tax>
    </Taxes>
    <Fees>
      <Fee>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>5.9</Amount>
      </Fee>
    </Fees>
  </Property>
</TaxFeeInfo>

Taxable fee as amount

This example has an AmountBeforeTax of $100, a GST tax of 18%, and an additional $20 flat rate fee—making the total taxable fee of $23.60 ($20*1.18), and the total rate amount of $141.60 [= $118 (18% GST) + $23.60 ($20 flat rate)].

The following snippet defines the tax (GST) in percentage and taxable fee (service charge) as a flat rate amount:

<TaxFeeInfo timestamp="2022-08-16T16:20:00-04:00"
  id="12345678"
  partner="partner_key">
  <Property>
    <ID>Property_1</ID>
    <Taxes>
      <Tax>
        <Type>percent</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>18</Amount>
      </Tax>
    </Taxes>
    <Fees>
      <Fee>
        <Type>amount</Type>
        <Basis>room</Basis>
        <Period>stay</Period>
        <Amount>23.6</Amount>
      </Fee>
    </Fees>
  </Property>
</TaxFeeInfo>