This page provides the technical specification and vocabulary reference for
Schema.org hotel structured data markups.

> [!IMPORTANT]
> **Important:** To implement automated price accuracy validation on your website using navigation tagging and microdata, see the [crawler navigation and price tagging guide](https://developers.google.com/hotels/hotel-prices/structured-data/generic-crawler-guide).

## Overview

Hotel price structured data provides a standardized, machine-readable format to
explain, validate, and display hotel prices listed on your website,
regardless of your visual layout. This includes base prices, rates, room
specifications, itemized fees and taxes, and booking policies.

Google recommends that you annotate your webpages with standardized structured
data provided by [Schema.org](https://schema.org/Hotel) to accurately extract
prices from your webpages.

Standard structured data allows for scaling price accuracy validations through
improving the reliability of crawlers, increasing the number of price
accuracy validations, enabling direct debugging of price accuracy issues,
and maintaining a consistent price accuracy score.

> [!NOTE]
> **Note:** For general questions about scraping and indexing, check the [Google Search crawling and indexing FAQ](https://developers.google.com/search/help/crawling-index-faq).

If you're new to structured data, learn more about [structured data vocabulary
and format](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#structured-data-vocabulary-and-format).

Google Hotels recommends **Microdata** format by default to annotate your
webpages for hotel price accuracy checks. The `JSON-LD` format is **deprecated**
for price accuracy validation. Note that this recommendation applies strictly
to hotel price accuracy validation and doesn't affect other usages of
structured data across Google (such as Google Search rich results). To learn
more about formats supported for general Search features, see
[supported formats](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#supported-formats).
This documentation provides detailed reference content specific to structured
data implementation in Hotels.

> [!IMPORTANT]
> **Key Point:** **Microdata** is the default and recommended format specifically for hotel price accuracy validation. `JSON-LD` is deprecated for hotel price validation and retained for legacy reference only.

`Hotel` structured data is used to annotate hotel-specific fields in your
web page. `Hotel` structured data has the following properties:

- [`name` and `address`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#name-address)
  properties

- [`makesOffer`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#makesOffer)
  property

- [`Hotel priceSpecification`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#hotel-price-specification)
  property

- [`hasMerchantReturnPolicy`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#return-policy)
  property

- [`eligibleCustomerType`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#rewards-member)
  property

`HotelRoom` structured data is used to annotate room-specific fields in
your web page.

> [!IMPORTANT]
> **Key Point:** It is recommended that you specify room rates if possible.

`HotelRoom` structured data has the following properties:

- [`offers`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#offers)
  property

- [`bed` and `occupancy`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#bed-and-occupancy) properties

- [`HotelRoom priceSpecification`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#hotelRoom-price-specification) property

- [`includesObject`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#includesObject)
  property

- [`availability`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#availability)
  property

- [`amenityFeature`](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#amenities)
  property

Navigation attributes are used to explain interactive elements and page states
to crawlers. For more information, see
[navigation tagging](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#navigation-tagging).

## Hotel structured data

The following properties apply to the Hotel entity.

### `name` and `address` properties

`name` and `address` properties are used to annotate the hotel's name and
location. The following are the `name` and `address` properties:

      "@type": "Hotel",
        "name": "hotel-name",
        "identifier": "hotel-id-1234",
        "address": {
          "@type": "PostalAddress",
          "addressCountry": "XX",
          "addressLocality": "City Name",
          "addressRegion": "State Name",
          "postalCode": "01234",
          "streetAddress": "1234 Main St."
        },

### Syntax

The `name` and `address` properties uses the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">hotel-name</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <span itemprop="streetAddress">1234 Main St.</span>,
        <span itemprop="addressLocality">City Name</span>,
        <span itemprop="addressRegion">State Name</span>
        <span itemprop="postalCode">01234</span>
        <span itemprop="addressCountry">XX</span>
      </div>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "hotel-name",
      "identifier": "hotel-id-1234",
      "address": {
        "@type": "PostalAddress",
        "addressCountry": "XX",
        "addressLocality": "City Name",
        "addressRegion": "State Name",
        "postalCode": "01234",
        "streetAddress": "1234 Main St."
      },
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"]
        ...
      }
    }

> [!IMPORTANT]
> **Key Point:** `PostalAddress` types such as `addressCountry`, `postalCode`, `streetAddress` and other fields are mandatory if you choose to specify the `address` property.

### Properties

The following are the `name` and `address` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| Hotel.name | Required | string | The name of the hotel |
| Hotel.identifier | Required | string | The partners' hotel ID. Identifier must be a unique string per hotel, and should exactly match with the string used in the price feed. |
| Hotel.address | Optional | [PostalAddress](https://schema.org/PostalAddress) | The address or location of the hotel. |

### Name and address example

The following is a basic example of adding `name` and `address` annotations:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <h1 itemprop="name">Mountain Hotel</h1>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <span itemprop="streetAddress">Technikerstrasse 21</span>,
        <span itemprop="addressLocality">Innsbruck</span>,
        <span itemprop="addressRegion">Tyrol</span>
        <span itemprop="postalCode">6020</span>
        <span itemprop="addressCountry">AT</span>
      </div>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "Mountain Hotel",
      "identifier": "hotel-id-1234",
      "address": {
        "@type": "PostalAddress",
        "addressCountry": "AT",
        "addressLocality": "Innsbruck",
        "addressRegion": "Tyrol",
        "postalCode": "6020",
        "streetAddress": "Technikerstrasse 21"
      },
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD"
        }
      }
    }

### `makesOffer` property

[`makesOffer`](https://schema.org/makesOffer) annotations are used to markup
your hotel itineraries.

      "makesOffer": {
        "@type": \["Offer", "LodgingReservation"\],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "availability": "https://schema.org/InStock",
        ...
      }

### Syntax

The `makesOffer` property uses the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">hotel-name</span>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="YYYY-MM-DDTHH:mm:ss">YYYY-MM-DD[THH:mm:ss]</time>
        Check-out: <time itemprop="checkoutTime" content="YYYY-MM-DDTHH:mm:ss">YYYY-MM-DD[THH:mm:ss]</time>
        <meta itemprop="availability" content="https://schema.org/InStock"/>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          ...
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "hotel-name",
      "identifier": "hotel-id-1234",
      "address": { ... },
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "availability": "https://schema.org/InStock",
        "priceSpecification": { ... }
      }
    }

> [!IMPORTANT]
> **Key Point:** Multiple hotel-level offers can be included in the `makesOffer` property. The Google-displayed rate should be listed first. The price amount specified includes all applicable taxes and fees.

### Properties

The following are the `makesOffer` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| makesOffer | Required | [Offer](https://schema.org/Offer) and [LodgingReservation](https://schema.org/LodgingReservation) | The hotel offer(s) for the given itinerary. The `makesOffer` property can contain an array of offers. |
| LodgingReservation.checkinTime | Required | [DateTime](https://schema.org/DateTime) | The check-in time in the user's timezone. If your timezone isn't mentioned, then the hotel timezone is considered. |
| LodgingReservation.checkoutTime | Required | [DateTime](https://schema.org/DateTime) | The check-out time in the user's timezone. If your timezone isn't mentioned, then the hotel timezone is considered. |

> [!IMPORTANT]
> **Key Point:** The @type value for all offers should be an array containing both `Offer` and `LodgingReservation`.

### `makesOffer` example

The following is a basic example to annotate your hotel offers. You can
specify multiple offers for an itinerary but you should specify the
Google-displayed rate first followed by other rates. The price amount
specified includes all applicable taxes.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">Mountain Hotel</span>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>
      </div>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1200.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "Mountain Hotel",
      "identifier": "hotel-id-1234",
      "address": { ... },
      "makesOffer": [
        {
          "@type": ["Offer", "LodgingReservation"],
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1222.74,
            "priceCurrency": "USD"
          }
        },
        {
          "@type": ["Offer", "LodgingReservation"],
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1200.74,
            "priceCurrency": "USD"
          }
        }
      ]
    }

### `Hotel priceSpecification` property

This property is used to annotate pricing information for your hotel or hotel
rooms. There are two additional properties that are required to annotate your
prices and taxes. You should use [CompoundPriceSpecification](https://schema.org/CompoundPriceSpecification)
to specify the total pricing information such as base rate, taxes and discounts.
Use [UnitPriceSpecification](https://schema.org/UnitPriceSpecification)
to specify additional taxes or special types of charges
such as `ResortFee`, `GenericTax` and `ServiceFee`. `priceSpecification`
property is bundled with the `Offer` property.

> [!IMPORTANT]
> **Key Point:** `potentialAction` property is used when the user has to pay any outstanding amount or other charges at the hotel during check-in.

      {
        ...
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": "float",
          "priceCurrency": "currency",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": "float",
              "priceCurrency": "currency"
            },
            ...
          ]
        }
      }

### Syntax

The `Hotel priceSpecification` property uses the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">hotel-name</span>
      ...
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name"></span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
            <meta itemprop="priceComponentType" content="GenericTax"/>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Discount</span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
            <meta itemprop="priceComponentType" content="Discount"/>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      ...
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        ...
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": "float",
          "priceCurrency": "currency",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "",
              "price": "float",
              "priceCurrency": "currency"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": "float",
              "priceCurrency": "currency",
              "priceComponentType": "GenericTax",
              "potentialAction": {
                "@type": "https://schema.org/PayAction",
                "recipient": {
                  "@type": "OnlineBusiness",
                  "name": "name-of-the-business"
                }
              }
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "Discount",
              "price": "float",
              "priceCurrency": "currency",
              "priceComponentType": "Discount"
            }
          ]
        }
      }
    }

### Properties

The following are the `hotel priceSpecification` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| Hotel.Offer.priceSpecification.price | Required | float | The total price including taxes and fees for the hotel. Google rate should always be annotated on your landing page along with your complete rate details. Annotating rate details lets you complete price accuracy checks. Google accepts both hotel-level and room-level prices. |
| Hotel.Offer.priceSpecification.priceCurrency | Required | currency | A three-letter currency code for the specified price. Eg: `"USD" `. |
| Hotel.Offer.priceSpecification.priceComponent | Optional | UnitPriceSpecification\[\] | The total price breakdown including taxes and fees for the hotel. There are two types of price structured data: - [` CompoundPriceSpecification`](https://schema.org/CompoundPriceSpecification) provides price breakdowns to include the following: - Base rate: The basic price per night - Per-stay taxes: The price per night with taxes. - Per-occupant charges: The price per night per occupancy. - Discount: The deduction amount. - [` UnitPriceSpecification`](https://schema.org/UnitPriceSpecification) is used to specify the type of charges. You should include [`PriceComponentTypeEnumeration`](https://schema.googleapis.com/PriceComponentTypeEnumeration) values for specifying additional charges. The values for `PriceComponentTypeEnumeration` are: - `Discount`: The generic discount towards the price. - `ResortFee`: It is an additional charge that has to be paid at the hotel. It can vary based on the type of lodging property. - `GenericTax`: It is an additional miscellaneous tax. - `ServiceFee`: It is an additional fee that is charged by the booking channel. - `TransferFee`: It is a de-facto mandatory fee for transportation to the hotel, collected either by the hotel or booking channel. You must set the values in the `priceComponentType ` property. All values are required if you choose to include `UnitPriceSpecification` and it must be specified in the `UnitPriceSpecification` property. |
| Hotel.Offer.priceSpecification.priceComponent. potentialAction | Optional | [PayAction](https://schema.org/PayAction) | The hotel point of payment.The hotel payment flows include prices that are charged during check-out time on the booking site and at the hotel during check-in. You should use the `potentialAction ` property which is bundled with the `PayAction`'s "`recipient`" field to indicate the point of payment. Refer to [`PayAction`](https://schema.org/PayAction) to learn more about `recipient` property. Google supports the following two settings for `PayAction`'s recipient: - `recipient.@type = "OnlineBusiness"` refers to payment collected at the time of booking by the online merchant. This is the default setting if `potentialAction` isn't specified. - `recipient.@type = "Hotel"` refers to the payment collected at the hotel. |

### Examples

The following are examples of hotel price specifications.

#### Price

The following is a basic example of adding price structured data to your
web page. Multiple hotel-level offers can be included in the
`makesOffer` property.

`PostalAddress` types such as `addressCountry`, `postalCode`,
`streetAddress` and other fields are mandatory if you choose to specify the
`address` property. The Google-displayed rate should be listed first in the
`makesOffer` property. The price amount specified includes all applicable
taxes.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <span itemprop="streetAddress">Technikerstrasse 21</span>,
        <span itemprop="addressLocality">Innsbruck</span>,
        <span itemprop="addressRegion">Tyrol</span>
        <span itemprop="postalCode">6020</span>
        <span itemprop="addressCountry">AT</span>
      </div>

      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>
      </div>

      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1200.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "address": {
        "@type": "PostalAddress",
        "addressCountry": "AT",
        "addressLocality": "Innsbruck",
        "addressRegion": "Tyrol",
        "postalCode": "6020",
        "streetAddress": "Technikerstrasse 21"
      },
      "makesOffer": [
        {
          "@type": ["Offer", "LodgingReservation"],
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1222.74,
            "priceCurrency": "USD"
          }
        },
        {
          "@type": ["Offer", "LodgingReservation"],
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1200.74,
            "priceCurrency": "USD"
          }
        }
      ]
    }

#### Price breakdown

The following is an example of the `priceSpecification` property with the
price breakdown. The base rate, taxes such as generic tax and discount are
defined using the `UnitPriceSpecification` component. Remember to set the
`priceComponentType` field with the values corresponding to the
`UnitPriceSpecification` component.

The total price for the length of stay should be specified in the
`CompoundPriceSpecification` property. The price breakdown should be
specified in the `priceComponent` property.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <h1 itemprop="name">ACME Hotel</h1>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <span itemprop="streetAddress">123 Main street</span>,
        <span itemprop="addressLocality">Mountain View</span>,
        <span itemprop="addressRegion">Santa Clara</span>
        <span itemprop="postalCode">94040</span>
        <span itemprop="addressCountry">US</span>
      </div>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Total Price: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>

          <!-- Price Components -->
          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Base Rate</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1150</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">172.74</span>
            <meta itemprop="priceComponentType" content="GenericTax" />
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Discount</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">-100</span>
            <meta itemprop="priceComponentType" content="Discount" />
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "address": {...},
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "",
              "price": 1150,
              "priceCurrency": "USD"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": 172.74,
              "priceCurrency": "USD",
              "priceComponentType": "GenericTax"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "Discount",
              "price": -100,
              "priceCurrency": "USD",
              "priceComponentType": "Discount"
            }
          ]
        }
      }
    }

#### Point of payment

The following is an example of `potentialAction` specification in using
`PayAction`'s recipient type.

The total price of the package is $1170 and the online website charges part
of the total price which is $1150 at the time of booking specified using the
`"@type": "OnlineBusiness"` and the user has to pay the remaining $20 at
the time of check-in at the hotel which is specified using the
`@type": "Hotel"`.

You must specify the `potentialAction` component in order to break down
payment at the time of booking and at the hotel. If it isn't specified, then
`payAction` interprets the payment at the time of booking as the default
payment method.

> [!IMPORTANT]
> **Key Point:** You should define `potentialAction` for both payment at the time of booking and at the hotel separately.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Price Due: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1170</span>

          <!-- Paid Online -->
          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1150</span>
            <div itemprop="potentialAction" itemscope itemtype="https://schema.org/PayAction">
              <div itemprop="recipient" itemscope itemtype="https://schema.org/OnlineBusiness">
                <span itemprop="name">myonlinebusiness</span>
              </div>
            </div>
          </div>

          <!-- Paid at Hotel -->
          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">20</span>
            <div itemprop="potentialAction" itemscope itemtype="https://schema.org/PayAction">
              <div itemprop="recipient" itemscope itemtype="https://schema.org/Hotel">
                <span itemprop="name">The Langham, Boston</span>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00]",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1170,
          "priceCurrency": "USD",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "price": 1150,
              "priceCurrency": "USD",
              "potentialAction": {
                "@type": "https://schema.org/PayAction",
                "recipient": {
                  "@type": "OnlineBusiness",
                  "name": "myonlinebusiness"
                }
              }
            },
            {
              "@type": "UnitPriceSpecification",
              "price": 20,
              "priceCurrency": "USD",
              "potentialAction": {
                "@type": "https://schema.org/PayAction",
                "recipient": {
                  "@type": "Hotel",
                  "name": "The Langham, Boston",
                  "address": { ... }
                }
              }
            }
          ]
        }
      }
    }

### `hasMerchantReturnPolicy` property

This property is used to annotate the merchant refund policy in the itineraries.

        "hasMerchantReturnPolicy": {
          "@type": "MerchantReturnPolicy",
          "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
          "refundType": "https://schema.org/FullRefund",
          "merchantReturnDays": "YYYY-MM-DD[THH:mm:ss]",
          "restockingFee": 0
        }

### Syntax

The `hasMerchantReturnPolicy` has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      ...
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <div itemprop="hasMerchantReturnPolicy" itemscope itemtype="https://schema.org/MerchantReturnPolicy">
          <link itemprop="returnPolicyCategory" href="https://schema.org/MerchantReturnFiniteReturnWindow"/>
          <link itemprop="refundType" href="https://schema.org/FullRefund"/>
          <meta itemprop="merchantReturnDays" content="YYYY-MM-DDTHH:mm:ss"/>
          <meta itemprop="restockingFee" content="0"/>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      ...
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "priceSpecification": { ... },
        "hasMerchantReturnPolicy": {
          "@type": "MerchantReturnPolicy",
          "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
          "refundType": "https://schema.org/FullRefund",
          "merchantReturnDays": "YYYY-MM-DD[THH:mm:ss]",
          "restockingFee": 0
        }
      }
    }

### Property

The following is the `hasMerchantReturnPolicy` property:

| Attribute | Required? | Type | Description |
|---|---|---|---|
| Offer.hasMerchantReturnPolicy | Optional | [MerchantReturnPolicy](https://schema.org/MerchantReturnPolicy) | The merchant refund policy. Partners should use `MerchantReturnPolicy.restockingFee` to indicate cancellation policies that don't refund the full amount for the length of stay. If `hasMerchantReturnPolicy` isn't specified or left empty it is assumed that the amount is non-refundable. You can specify the non-refundable policy using the `returnPolicyCategory: MerchantReturnNotPermitted` property. |

### Return policy example

The following is a basic example of structured data for a hotel with room
details and total price with taxes and fees. This example denotes a stay
that can be canceled without any charges until 11 PM (UTC) on
December 18, 2023. Partners should use
`"MerchantReturnPolicy.restockingFee"` to indicate cancellation policies
that don't refund the full amount of the stay. The `restockingFee` defaults
to $0.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <div itemprop="hasMerchantReturnPolicy" itemscope itemtype="https://schema.org/MerchantReturnPolicy">
          <link itemprop="returnPolicyCategory" href="https://schema.org/MerchantReturnFiniteReturnWindow"/>
          <link itemprop="refundType" href="https://schema.org/FullRefund"/>
          Cancellation Deadline: <time itemprop="merchantReturnDays" content="2023-12-18T23:00:00">2023-12-18 23:00:00</time>
          Fee: $<span itemprop="restockingFee">0</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "description": "Beautiful resort in the outskirts of the city",
      "address": {...},
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-12-15 16:00:00",
        "checkoutTime": "2023-12-20 11:00:00",
        "priceSpecification": {...},
        "hasMerchantReturnPolicy": {
          "@type": "MerchantReturnPolicy",
          "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
          "refundType": "https://schema.org/FullRefund",
          "merchantReturnDays": "2023-12-18 23:00:00",
          "restockingFee": 0
        }
      }
    }

### `eligibleCustomerType` property

This property can be used to annotate the rewards programs provided for hotel
membership customers.

    "eligibleCustomerType": "RewardsMember",
    "priceSpecification": {
        "@type": "CompoundPriceSpecification",
        "price": "float",
        "priceCurrency": "currency"
     }

### Syntax

The `eligibleCustomerType` property has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      ...
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <meta itemprop="eligibleCustomerType" content="RewardsMember"/>
        ...
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      ...
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "eligibleCustomerType": "RewardsMember",
        "priceSpecification": { ... }
      }
    }

### Property

The following is the `eligibleCustomerType` property:

| Attribute | Required? | Type | Description |
|---|---|---|---|
| Offer.eligibleCustomerType | Optional | [BusinessEntityType](https://schema.googleapis.com/BusinessEntityType) | The loyalty programs or the member rewards offered for the customers. <br /> Many hotel pages display member rates together with public rates, to encourage users to sign up for their loyalty programs. Rates restricted to particular audiences, such as member rates, can be specified by setting the `Offer.eligibleCustomerType` property. |

### Examples

The following are examples of rewards member rates.

#### Member rates

The following is a basic example of member pricing or fenced rate
specification for loyalty programs. The customer is a "rewards member" of
the hotel.

> [!IMPORTANT]
> **Key Point:** The `name` and `eligibleCustomerType` properties must be specified in the `Offer` property.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <!-- Address details -->
      </div>

      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <span itemprop="name">RewardsMember</span>
        <meta itemprop="eligibleCustomerType" content="RewardsMember"/>

        Check-in: <time itemprop="checkinTime" content="2023-12-15T16:00:00">Dec 15, 2023 4:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-12-20T11:00:00">Dec 20, 2023 11:00 AM</time>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Total: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1342.74</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Base rate</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1069.98</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">172.74</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">ResortFee</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">100</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "address": {...},
      "makesOffer": {
        "@type": ["Offer", "LodgingReservation"],
        "name": "RewardsMember",
        "checkinTime": "2023-12-15 16:00:00",
        "checkoutTime": "2023-12-20 11:00:00",
        "eligibleCustomerType": "RewardsMember",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1342.74,
          "priceCurrency": "USD",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "Base rate",
              "price": 1069.98,
              "priceCurrency": "USD"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": 172.74,
              "priceCurrency": "currency"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "ResortFee",
              "price": 100,
              "priceCurrency": "USD"
            }
          ]
        }
      }
    }

#### Member and regular rates

This is an example of both regular and member rate prices annotations. The
member pricing is listed first followed by regular rates.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
        <!-- Address details -->
      </div>

      <!-- Member Rate -->
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <span itemprop="name">RewardsMember</span>
        <meta itemprop="eligibleCustomerType" content="RewardsMember"/>

        Check-in: <time itemprop="checkinTime" content="2023-12-15T16:00:00">Dec 15, 2023 4:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-12-20T11:00:00">Dec 20, 2023 11:00 AM</time>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Total: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1342.74</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Base rate</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1069.98</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>: <span itemprop="priceCurrency" content="currency">$</span><span itemprop="price">172.74</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">ResortFee</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">100</span>
          </div>
        </div>
      </div>

      <!-- Regular Rate -->
      <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <span itemprop="name">regularRate</span>

        Check-in: <time itemprop="checkinTime" content="2023-12-15T16:00:00">Dec 15, 2023 4:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-12-20T11:00:00">Dec 20, 2023 11:00 AM</time>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Total: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1572.24</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Base rate</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1369.98</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>: <span itemprop="priceCurrency" content="currency">$</span><span itemprop="price">202.26</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">ResortFee</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">100</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "identifier": "hotel-id-1234",
      "address": {...},
      "makesOffer": [
        {
          "@type": ["Offer", "LodgingReservation"],
          "name": "RewardsMember",
          "checkinTime": "2023-12-15 16:00:00",
          "checkoutTime": "2023-12-20 11:00:00",
          "eligibleCustomerType": "RewardsMember",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1342.74,
            "priceCurrency": "USD",
            "priceComponent": [
              {
                "@type": "UnitPriceSpecification",
                "name": "Base rate",
                "price": 1069.98,
                "priceCurrency": "USD"
              },
              {
                "@type": "UnitPriceSpecification",
                "name": "GenericTax",
                "price": 172.74,
                "priceCurrency": "currency"
              },
              {
                "@type": "UnitPriceSpecification",
                "name": "ResortFee",
                "price": 100,
                "priceCurrency": "USD"
              }
            ]
          }
        },
        {
          "@type": ["Offer", "LodgingReservation"],
          "name": "regularRate",
          "checkinTime": "2023-12-15 16:00:00",
          "checkoutTime": "2023-12-20 11:00:00",
          "priceSpecification": {
            "price": 1572.24,
            "priceCurrency": "USD",
            "priceComponent": [
              {
                "@type": "UnitPriceSpecification",
                "name": "Base rate",
                "price": 1369.98,
                "priceCurrency": "USD"
              },
              {
                "@type": "UnitPriceSpecification",
                "name": "GenericTax",
                "price": 202.26,
                "priceCurrency": "currency"
              },
              {
                "@type": "UnitPriceSpecification",
                "name": "ResortFee",
                "price": 100,
                "priceCurrency": "USD"
              }
            ]
          }
        }
      ]
    }

## `HotelRoom` structured data

The following properties apply to the `HotelRoom` entity.

### `offers` property

[`offers`](https://schema.org/offers) annotations are used to markup your room
itineraries. You should use the `offers` property for `HotelRoom` specification.

    "offers": {
      "@type": \["Offer", "LodgingReservation"\],
      "identifier": "hotel-room-id-1234",
      "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
      "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
      "priceSpecification": {...}
    }

### Syntax

The `offers` property has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom">
      <meta itemprop="identifier" content="hotel-room-id-1234"/>
      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="YYYY-MM-DDTHH:mm:ss">YYYY-MM-DD[THH:mm:ss]</time>
        Check-out: <time itemprop="checkoutTime" content="YYYY-MM-DDTHH:mm:ss">YYYY-MM-DD[THH:mm:ss]</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
          ...
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "HotelRoom",
      "identifier": "hotel-room-id-1234",
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": "float",
          "priceCurrency": "currency",
          ...
        }
      }
    }

### Properties

The following are the `offers` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| offers | Required | [Offer](https://schema.org/Offer) and [LodgingReservation](https://schema.org/LodgingReservation) | The room price specification for the given itinerary. The `offers` property can contain an array of offers. |
| LodgingReservation.checkinTime | Required | [DateTime](https://schema.org/DateTime) | The check-in time in the user's timezone. If your timezone isn't mentioned, then the hotel timezone is considered. |
| LodgingReservation.checkoutTime | Required | [DateTime](https://schema.org/DateTime) | The check-out time in the user's timezone. If your timezone isn't mentioned, then the hotel timezone is considered. |

> [!IMPORTANT]
> **Key Point:** `LodgingReservation` check-in and check-out time should be specified in an additional `@type` property on all offers.

### `offers` example

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom">
      <meta itemprop="identifier" content="hotel-room-id-1234"/>
      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "HotelRoom",
      "identifier": "hotel-room-id-1234",
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "identifier": "rate-plan-id-of-member-rate",
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD"
        }
      }
    }

### `bed` and `occupancy` property

The `bed` property is used to annotate the bed type and the number of beds
available in the room. The `occupancy` property is used to annotate the number
of guests in the room. `bed` and `occupancy` properties can be specified using
the `HotelRoom` property.

    "@type": "Hotel",
    "identifier": "hotel-id-1234",
    "containsPlace": {
        "@type": \["HotelRoom", "Product"\],
        "identifier": "hotel-room-id",
      "bed": {
        "@type": "BedDetails",
        "numberOfBeds": "integer",
        "typeOfBed": "KING"
      },
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": "integer"
      }
    }

### Syntax

The `bed` and `occupancy` properties has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">hotel-name</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>
      <div itemprop="containsPlace" itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
        <span itemprop="name">room-name</span>
        <meta itemprop="identifier" content="hotel-room-id-1234"/>

        <!-- Bed Details -->
        <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
          <span itemprop="numberOfBeds">integer</span>
          <span itemprop="typeOfBed">KING</span>
        </div>

        <!-- Occupancy -->
        <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
          Occupancy: <span itemprop="value">integer</span>
        </div>

        <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
          ...
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "hotel-name",
      "identifier": "hotel-id-1234",
      "containsPlace": {
        "@type": ["HotelRoom", "Product"],
        "name": "room-name",
        "identifier": "hotel-room-id-1234",
        "bed": {
          "@type": "BedDetails",
          "numberOfBeds": "integer",
          "typeOfBed": "KING"
        },
        "occupancy": {
          "@type": "QuantitativeValue",
          "value": "integer"
        },
        "offers": {
          "@type": ["Offer", "LodgingReservation"],
          "identifier": "rate-plan-id-of-member-rate",
          "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
          "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": "float",
            "priceCurrency": "currency",
            "priceComponent": {
              "@type": "UnitPriceSpecification",
              "name": "",
              "price": "float",
              "priceCurrency": "currency"
            },
            ...
          }
        }
      }
    }

`bed` and `occupancy` properties can only be set by using the `HotelRoom`
property. Room-specific information, including room-level rates, can be included
to the `Hotel` property through the `containsPlace` property. Refer to the
[`Hotel` and `HotelRoom` specification example](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#room-example).

> [!IMPORTANT]
> **Key Point:** It is recommended that you include annotations for room-level rates if possible.

### Properties

The following are the `bed` and `occupancy` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| HotelRoom.bed | Optional (Recommended) | [bed](https://schema.org/bed) | The type of bed(s) included in the accommodation and the number of occupants in the room. The supported values are: - `CALIFORNIA_KING` - `KING` - `QUEEN` - `FULL` - `DOUBLE` - `SEMI_DOUBLE` - `SINGLE` |
| HotelRoom.occupancy | Optional (Recommended) | [QuantitativeValue](https://schema.org/QuantitativeValue) | The number of guests in the hotel room. The type for occupancy is a `QuantitativeValue`. Occupancy is an explicit property of [`HotelRoom`](https://schema.org/HotelRoom), not for a specific [`Offer`](https://schema.org/Offer). Rates should only be tagged for the requested occupancy. |
| containsPlace | Optional (Recommended) | [LocationFeatureSpecification](https://schema.org/LocationFeatureSpecification) | It is used to annotate the room-level rates associated with specific rooms. It can also be used to specify the amenities in the room. Learn more on how to use `containsPlace` in [amenityFeature](https://developers.google.com/hotels/hotel-prices/structured-data/hotel-price-structured-data#amenities) property. |

### Examples

The following are examples of bed and occupancy specifications.

#### `HotelRoom` example

The following is a basic example of beds and occupancies for a room
specification.

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      <meta itemprop="identifier" content="hotel-room-id-1234"/>
      <span itemprop="name">Deluxe Room, 1 King Bed</span>

      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">KING</span>
      </div>
      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">SINGLE</span>
      </div>

      <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
        Occupancy: <span itemprop="value">2</span>
      </div>

      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      "name": "Deluxe Room, 1 King Bed",
      "identifier": "hotel-room-id-1234",
      "bed": [
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "KING"
        },
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "SINGLE"
        }
      ],
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": 2
      },
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "identifier": "rate-plan-id-of-member-rate",
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD"
        }
      }
    }

#### `Hotel` and `HotelRoom` example

The following is an example of annotating the `Hotel` and `HotelRoom`
properties along with `bed`, `occupancy` and `priceSpecification`.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">hotel-name</span>
      <meta itemprop="identifier" content="hotel-id-1234"/>

      <div itemprop="containsPlace" itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
        <span itemprop="name">Deluxe Room, 1 King Bed</span>
        <meta itemprop="identifier" content="hotel-room-id"/>

        <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
          <span itemprop="numberOfBeds">1</span>
          <span itemprop="typeOfBed">KING</span>
        </div>

        <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
          Occupancy: <span itemprop="value">2</span>
        </div>

        <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
          <span itemprop="name">Minibar</span>
          <meta itemprop="value" content="true"/>
        </div>

        <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
          <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
          Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
          Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
          <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "hotel-name",
      "identifier": "hotel-id-1234",
      "containsPlace": {
        "@type": ["HotelRoom", "Product"],
        "name": "Deluxe Room, 1 King Bed",
        "identifier": "hotel-room-id",
        "bed": {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "KING"
        },
        "occupancy": {
          "@type": "QuantitativeValue",
          "value": 2
        },
        "amenityFeature": {
          "@type": "LocationFeatureSpecification",
          "name": "Minibar",
          "value": true
        },
        "offers": {
          "@type": ["Offer", "LodgingReservation"],
          "identifier": "rate-plan-id-of-member-rate",
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1222.74,
            "priceCurrency": "USD"
          }
        }
      }
    }

### `HotelRoom priceSpecification` property

Hotel room price specification is similar to hotel price specification.The
difference is that room prices are specified using the `Product.offers` property
instead of the `Hotel.makesOffer` property.

    "priceSpecification": {
      "@type": "CompoundPriceSpecification",
      "price": "float",
      "priceCurrency": "currency",
      "priceComponent": {
        "@type": "UnitPriceSpecification",
        "name": "GenericTax",
        "price": "float",
        "priceCurrency": "currency"
      }
      ...
    }

### Syntax

The `priceSpecification` property for hotel rooms has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      ...
      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name"></span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
            <meta itemprop="priceComponentType" content="GenericTax"/>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Discount</span>
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">float</span>
            <meta itemprop="priceComponentType" content="Discount"/>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      ...
      "bed": {
        "@type": "BedDetails",
        "numberOfBeds": "integer",
        "typeOfBed": "KING"
      },
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": "integer"
      },
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        ...
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": "float",
          "priceCurrency": "currency",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "",
              "price": "float",
              "priceCurrency": "currency"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": "float",
              "priceCurrency": "currency",
              "priceComponentType": "GenericTax"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "Discount",
              "price": "float",
              "priceCurrency": "currency",
              "priceComponentType": "Discount"
            }
          ]
        }
      }
    }

> [!IMPORTANT]
> **Key Point:** When hotel rooms are specified, the partner should annotate the rates on the rooms and not on the hotel.

### Properties

The following are the `HotelRoom priceSpecification` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| Hotel.Offer.priceSpecification.price | Required | float | The price per room including the taxes and fees for the `Product`. Google rate should always be annotated on your landing page along with your complete rate details. Annotating rate details lets you complete price accuracy checks. Google accepts both hotel-level and room-level prices. |
| Hotel.Offer.priceSpecification.priceCurrency | Required | currency | A three-letter currency code for the specified price. Eg: `"USD" `. |
| Hotel.Offer.priceSpecification.priceComponent | Optional | UnitPriceSpecification\[\] | The total price breakdown including taxes and fees for the hotel room and the occupancy with offers linked to `HotelRoom` and `Product`. There are two types of price structured data: - [` CompoundPriceSpecification`](https://schema.org/CompoundPriceSpecification) provides price breakdowns to include the following: - Base rate: The basic price per night - Per-stay taxes: The price per night with taxes. - Per-occupant charges: The price per night per occupancy. `occupancy` is an explicit property of [`HotelRoom`](https://schema.org/HotelRoom), not for a specific [`Offer`](https://schema.org/Offer). Rates should only be tagged for the requested occupancy. - Discount: The deduction amount. - [` UnitPriceSpecification`](https://schema.org/UnitPriceSpecification) is used to specify the type of charges. You should include [`PriceComponentTypeEnumeration`](https://schema.googleapis.com/PriceComponentTypeEnumeration) values for specifying additional charges. The values for `PriceComponentTypeEnumeration` are: - `Discount`: The generic discount towards the price. - `ResortFee`: It's an additional charge that has to be paid at the hotel. It can vary based on the type of lodging property. - `GenericTax`: It's an additional miscellaneous tax. - `ServiceFee`: It's an additional fee that is charged by the booking channel. You must set the values in the `name` property of `UnitPriceSpecification`. All values are required if you choose to include price breakdown and it must be specified in the `UnitPriceSpecification` component. |

### Examples

The following are examples of `HotelRoom` price specifications.

#### Total room price example

The following is a basic example of defining the total price for the length
of stay and price per occupancy.

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      <span itemprop="name">Deluxe Room King, 1 Single Bed</span>
      <meta itemprop="identifier" content="hotel-room-id-1234"/>

      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">KING</span>
      </div>
      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">SINGLE</span>
      </div>

      <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
        Occupancy: <span itemprop="value">2</span>
      </div>

      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1232.74</span>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      "name": "Deluxe Room King, 1 Single Bed",
      "identifier": "hotel-room-id-1234",
      "bed": [
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "KING"
        },
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "SINGLE"
        }
      ],
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": 2
      },
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1232.74,
          "priceCurrency": "USD"
        }
      }
    }

#### Room price breakdown example

The following is an example of price per room or plan. The price breakdown
is defined for room type such as `Deluxe` room and the `bed` and `occupancy`
type such as `KING` and `SINGLE` beds and an occupancy of 2 guests.

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      <span itemprop="name">Deluxe Room King, 1 Single Bed</span>
      <meta itemprop="identifier" content="hotel-room-id-1234"/>

      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>

        <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
          <span itemprop="numberOfBeds">1</span>
          <span itemprop="typeOfBed">KING</span>
        </div>
        <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
          <span itemprop="numberOfBeds">1</span>
          <span itemprop="typeOfBed">SINGLE</span>
        </div>

        <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
          Occupancy: <span itemprop="value">2</span>
        </div>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          Total: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Base rate</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1150</span>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">GenericTax</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">172.74</span>
            <meta itemprop="priceComponentType" content="GenericTax"/>
          </div>

          <div itemprop="priceComponent" itemscope itemtype="https://schema.org/UnitPriceSpecification">
            <span itemprop="name">Discount</span>: <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">-100</span>
            <meta itemprop="priceComponentType" content="Discount"/>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      "name": "Deluxe Room King, 1 Single Bed",
      "identifier": "hotel-room-id-1234",
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "identifier": "rate-plan-id-of-member-rate",
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "bed": [
          {
            "@type": "BedDetails",
            "numberOfBeds": 1,
            "typeOfBed": "KING"
          },
          {
            "@type": "BedDetails",
            "numberOfBeds": 1,
            "typeOfBed": "SINGLE"
          }
        ],
        "occupancy": {
          "@type": "QuantitativeValue",
          "value": 2
        },
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD",
          "priceComponent": [
            {
              "@type": "UnitPriceSpecification",
              "name": "Base rate",
              "price": 1150,
              "priceCurrency": "USD"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "GenericTax",
              "price": 172.74,
              "priceCurrency": "USD",
              "priceComponentType": "GenericTax"
            },
            {
              "@type": "UnitPriceSpecification",
              "name": "Discount",
              "price": -100,
              "priceCurrency": "USD",
              "priceComponentType": "Discount"
            }
          ]
        }
      }
    }

### `includesObject` property

This property is used to annotate rate-specific services provided in the hotel
or room such as meal options and valet service. You can annotate
`includesObject` in either `Hotel` or `HotelRoom` property.

    {
      "includesObject": [
        {
          "@type": "TypeAndQuantityNode",
          "typeOfGood": {
            "@type": "Service",
            "name": "Valet"
          }
        },
        {
          "@type": "TypeAndQuantityNode",
          "amountOfThisGood": "float",
          "unitText": "currency",
          "typeOfGood": {
            "@type": "FoodService",
            "name": "MealCredit"
          }
        }
      ]
    }

### Syntax

The `includesObject` has the following syntax for rate-specific services
available in the room:

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      ...
      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <div itemprop="includesObject" itemscope itemtype="https://schema.org/TypeAndQuantityNode">
          <div itemprop="typeOfGood" itemscope itemtype="https://schema.org/Service">
            <span itemprop="name">Valet</span>
          </div>
        </div>

        <div itemprop="includesObject" itemscope itemtype="https://schema.org/TypeAndQuantityNode">
          <meta itemprop="amountOfThisGood" content="float"/>
          <meta itemprop="unitText" content="currency"/>
          <div itemprop="typeOfGood" itemscope itemtype="https://schema.org/FoodService">
            <span itemprop="name">MealCredit</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      ...
      "@type": ["HotelRoom", "Product"],
      ...
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        ...
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": "float",
          "priceCurrency": "currency"
        },
        "includesObject": [
          {
            "@type": "TypeAndQuantityNode",
            "typeOfGood": {
              "@type": "Service",
              "name": "Valet"
            }
          },
          {
            "@type": "TypeAndQuantityNode",
            "amountOfThisGood": "float",
            "unitText": "currency",
            "typeOfGood": {
              "@type": "FoodService",
              "name": "MealCredit"
            }
          }
        ]
      }
    }

> [!IMPORTANT]
> **Key Point:** When hotel rooms are specified, you should annotate the rates on the rooms and not on the hotel.

### Property

The `includesObject` has the following property:

| Attribute | Required? | Type | Description |
|---|---|---|---|
| Offer.includesObject | Optional | [TypeAndQuantityNode](https://schema.org/TypeAndQuantityNode) | The services provided in the hotel or room. Rate-specific features are included with the `includesObject` property. The name field on `"TypeAndQuantityNode.typeOfGood"` should be used to indicate the type of service such as valet or meal service. Rate-specific features may also be included within base level offers, or may be specified as add-ons for an additional price. The `includesObject` requires a value of type `TypeAndQuantityNode` as follows: - `BreakfastIncluded` - `DinnerIncluded` - `Valet` - `MealCredit` |

### `includesObject` example

The following is a basic example of rate-specific features for valet parking
and food services. Rate-specific features should be specified with the
`Offer.includesObject` property. The name field on
`TypeAndQuantityNode.typeOfGood` should be used to indicate the type of
service.

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      <span itemprop="name">Deluxe Room, 1 King Bed</span>
      <meta itemprop="identifier" content="hotel-room-id-1234"/>

      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
        </div>

        <!-- Included Services -->
        <div itemprop="includesObject" itemscope itemtype="https://schema.org/TypeAndQuantityNode">
          <div itemprop="typeOfGood" itemscope itemtype="https://schema.org/Service">
            <span itemprop="name">Valet</span>
          </div>
        </div>

        <div itemprop="includesObject" itemscope itemtype="https://schema.org/TypeAndQuantityNode">
          <meta itemprop="amountOfThisGood" content="50"/>
          <meta itemprop="unitText" content="USD"/>
          <div itemprop="typeOfGood" itemscope itemtype="https://schema.org/FoodService">
            <span itemprop="name">MealCredit</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      "name": "Deluxe Room, 1 King Bed",
      "identifier": "hotel-room-id-1234",
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "identifier": "rate-plan-id-of-member-rate",
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "priceSpecification": {
          "@type": "CompoundPriceSpecification",
          "price": 1222.74,
          "priceCurrency": "USD"
        },
        "includesObject": [
          {
            "@type": "TypeAndQuantityNode",
            "typeOfGood": {
              "@type": "Service",
              "name": "Valet"
            }
          },
          {
            "@type": "TypeAndQuantityNode",
            "amountOfThisGood": 50,
            "unitText": "USD",
            "typeOfGood": {
              "@type": "FoodService",
              "name": "MealCredit"
            }
          }
        ]
      }
    }

### `availability` property

The `offer.availability` property is used to annotate the sold out itineraries
for the hotel rooms.

    "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "availability": "https://schema.org/SoldOut"
    }

### Syntax

The `availability` property has the following syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      ...
      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        ...
        <meta itemprop="availability" content="https://schema.org/SoldOut"/>
        Sold Out
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      ...
      "@type": ["HotelRoom", "Product"],
      "name": "room-type",
      "identifier": "hotel-room-id-1234",
      "bed": {
        "@type": "BedDetails",
        "numberOfBeds": "integer",
        "typeOfBed": "KING"
      },
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": "integer"
      },
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "YYYY-MM-DD[THH:mm:ss]",
        "checkoutTime": "YYYY-MM-DD[THH:mm:ss]",
        "availability": "https://schema.org/SoldOut"
      }
    }

### Property

The following are the `availability` property:

| Attribute | Required? | Type | Description |
|---|---|---|---|
| Offer.availability | Optional | [ItemAvailability](https://schema.org/ItemAvailability) | The availability of the hotel or room. Rates are extracted from [`schema.org/Offer`](http://schema.org/Offer) and the rate information isn't created using [`schema.org/Hotel`](https://schema.org/Hotel) or [`schema.org/HotelRoom`](https://schema.org/HotelRoom). This means that even sold out itineraries must have an offer. An offer without a `priceSpecification` is considered as unavailable. Unavailable offers should be specified as `"Offer.availability=https://schema.org/SoldOut"`. `Offer.availability` doesn't need to be specified if the offer is annotated with a valid `priceSpecification.` |

### `availability` example

The following is a basic example to show hotel room unavailability. You
should include the bed type, the number of beds and the occupancy details
for the specified room.

### Microdata

    <div itemscope itemtype="https://schema.org/HotelRoom https://schema.org/Product">
      <span itemprop="name">Deluxe Room, 1 King Bed</span>
      <meta itemprop="identifier" content="hotel-room-id-1234"/>

      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">KING</span>
      </div>
      <div itemprop="bed" itemscope itemtype="https://schema.org/BedDetails">
        <span itemprop="numberOfBeds">1</span>
        <span itemprop="typeOfBed">SINGLE</span>
      </div>

      <div itemprop="occupancy" itemscope itemtype="https://schema.org/QuantitativeValue">
        Occupancy: <span itemprop="value">2</span>
      </div>

      <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
        Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
        Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
        <meta itemprop="availability" content="https://schema.org/SoldOut"/>
        Sold Out

        <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
          <!-- Price Specification details -->
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": ["HotelRoom", "Product"],
      "name": "Deluxe Room, 1 King Bed",
      "identifier": "hotel-room-id-1234",
      "bed": [
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "KING"
        },
        {
          "@type": "BedDetails",
          "numberOfBeds": 1,
          "typeOfBed": "SINGLE"
        }
      ],
      "occupancy": {
        "@type": "QuantitativeValue",
        "value": 2
      },
      "offers": {
        "@type": ["Offer", "LodgingReservation"],
        "checkinTime": "2023-03-10 15:00:00",
        "checkoutTime": "2023-03-16 10:00:00",
        "availability": "https://schema.org/SoldOut",
        "priceSpecification": {...}
      }
    }

> [!IMPORTANT]
> **Key Point:** `Offers` must be specified for sold out itineraries.

### `amenityFeature` property

Amenities can be specified in either `Hotel` or `HotelRoom` type using the
`amenityFeature` property. You should use `containsPlace` property to specify
amenities provided in the room.

    {
      "@type": "Hotel",
      "amenityFeature": [
        {
          "@type": "LocationFeatureSpecification",
          "name": "HotTub",
          "hoursAvailable": {
            "@type": "OpeningHoursSpecification",
            "opens": "HH:mm:ss",
            "closes": "HH:mm:ss"
          }
        },
        {
          "@type": "LocationFeatureSpecification",
          "name": "GymFitnessEquipment",
          "value": "boolean"
        }
      ],
      "containsPlace": {
        "@type": "HotelRoom",
        "amenityFeature": [
          {
            "@type": "LocationFeatureSpecification",
            "name": "Minibar",
            "value": true
          },
          {
            "@type": "LocationFeatureSpecification",
            "name": "Smoking",
            "value": false
          }
        ]
      }
    }

### Syntax

The `amenityFeature` and the `containsPlace` properties has the following
syntax:

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      ...
      <!-- Hotel Amenity -->
      <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
        <span itemprop="name">HotTub</span>
        <div itemprop="hoursAvailable" itemscope itemtype="https://schema.org/OpeningHoursSpecification">
          <time itemprop="opens" content="HH:mm:ss">HH:mm:ss</time>
          <time itemprop="closes" content="HH:mm:ss">HH:mm:ss</time>
        </div>
      </div>

      <div itemprop="containsPlace" itemscope itemtype="https://schema.org/HotelRoom">
        <!-- Room Amenity -->
        <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
          <span itemprop="name">Minibar</span>
          <meta itemprop="value" content="boolean"/>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      ...
      "amenityFeature": {
        "@type": "LocationFeatureSpecification",
        "name": "HotTub",
        "hoursAvailable": {
          "@type": "OpeningHoursSpecification",
          "opens": "HH:mm:ss",
          "closes": "HH:mm:ss"
        }
      },
      "containsPlace": {
        "@type": "HotelRoom",
        "amenityFeature": {
          "@type": "LocationFeatureSpecification",
          "name": "Minibar",
          "value": "boolean"
        }
      }
    }

### Amenities

The following amenities are allowed and defined in the `name` property.

| Attribute | Required? | Type | Description |
|---|---|---|---|
| amenityFeature.AC | Optional | boolean | Whether the property has air conditioning. |
| amenityFeature.AirportShuttle | Optional | boolean | Whether the host provides transportation to and from the airport or other terminals. |
| amenityFeature.Balcony | Optional | boolean | Whether the accommodation has a balcony. |
| amenityFeature.BeachAccess | Optional | boolean | Whether the property has access to a public beach close to the property. |
| amenityFeature.ChildFriendly | Optional | boolean | Whether the property is suitable for children. |
| amenityFeature.Crib | Optional | boolean | Whether the property provides a crib. |
| amenityFeature.Elevator | Optional | boolean | Whether the property has an elevator. |
| amenityFeature.FirePlace | Optional | boolean | Whether the accommodation has a fireplace. |
| amenityFeature.FreeBreakfast | Optional | boolean | Whether the property has free breakfast included for all guests. Use rate features to indicate if breakfast is included only for specific rate plans. |
| amenityFeature.GymFitnessEquipment | Optional | boolean | Whether the property has a gym or any fitness equipment. |
| amenityFeature.Heating | Optional | boolean | Whether the accommodation has heating. |
| amenityFeature.HotTub | Optional | boolean | Whether the property has a hot tub. |
| amenityFeature.InstantBookable | Optional | boolean | Whether the property is instantly bookable through the checkout process. The alternative is waiting for approval. |
| amenityFeature.IroningBoard | Optional | boolean | Whether the property has ironing boards available. |
| amenityFeature.Kitchen | Optional | boolean | Whether the accommodation has a kitchen. |
| amenityFeature.Microwave | Optional | boolean | Whether the accommodation has a microwave available. |
| amenityFeature.OpenAirBath(Hotels only) | Optional | boolean | Whether the accommodation has an open air bath attached. If specified at the room level, the bath should be private for room occupants only. |
| amenityFeature.OutdoorGrill | Optional | boolean | Whether the property has a grill. |
| amenityFeature.OvenStove | Optional | boolean | Whether the property has a stove. |
| amenityFeature.Patio | Optional | boolean | Whether the property has a patio. |
| amenityFeature.Pool | Optional | boolean | Whether the accommodation has a pool. |
| amenityFeature.PrivateBeachAccess | Optional | boolean | Whether the property has dedicated access to a non-public beach. |
| amenityFeature.SelfCheckinCheckout | Optional | boolean | Whether the property supports self check-in and check-out. |
| amenityFeature.WasherDryer | Optional | boolean | Whether the accommodation has laundry appliances. |
| amenityFeature.Wifi | Optional | boolean | Whether the property has Wifi. |
| amenityFeature.Smoking | Optional | boolean | Whether the accommodation allows smoking. |
| amenityFeature.InternetType | Optional | Enum | The type of internet available on the property. Supported values are: - `FREE` - `PAID` - `NONE` |
| amenityFeature.ParkingType | Optional | Enum | The type of parking available on the property. Supported values are: - `FREE` - `PAID` - `NONE` |
| amenityFeature.PoolType | Optional | Enum | The type of pool available on the property. Supported values are: - `INDOOR` - `OUTDOOR` - `NONE` |
| amenityFeature.RoomStyle | Optional | Enum | Indicates whether the room is a Japanese style design. Supported values are: - `WESTERN` - `JAPANESE` - `JAPANESE_WESTERN` |
| amenityFeature.LicenseNum | Required | string | License number of the business that is to be shown on the property in certain regions of the world. It can be repeated and if multiple licenses exist then it is recommended to add the owner or authority of the license. For example, `"Paris: 123456ABC"` |

### Properties

The following are the `amenityFeature` properties:

| Property | Required? | Type | Description |
|---|---|---|---|
| amenityFeature | Optional | [LocationFeatureSpecification](https://schema.org/LocationFeatureSpecification) | The amenities provided in the hotel or room. It can be specified using the `amenityFeature` property . Amenities should be available to all guests in the hotel irrespective of selected rate plan. `amenityFeature` is specified using the `LocationFeatureSpecification` property value. Amenities can be specified at either the `Hotel` or `HotelRoom` level. |
| containsPlace | Optional | [LocationFeatureSpecification](https://schema.org/LocationFeatureSpecification) | The amenities provided in the hotel or room to all hotel guests. It can be specified using the `amenityFeature` . Amenities should be available to all guests in the hotel room irrespective of selected rate plan. `Hotel.containsPlace.amenityFeature` are the amenities provided in the hotel. `HotelRoom.containsPlace.amenityFeature` are the amenities provided in the room. |

### Amenities example

The following is a basic example of a hotel with a pool open from 10 AM to 10 PM
and no gym availability at the property. The hotel room is non-smoking
and has a minibar.

### Microdata

    <div itemscope itemtype="https://schema.org/Hotel">
      <span itemprop="name">ACME Hotel</span>

      <!-- Amenities -->
      <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
        <span itemprop="name">HotTub</span>
        <div itemprop="hoursAvailable" itemscope itemtype="https://schema.org/OpeningHoursSpecification">
          Open from <time itemprop="opens" content="10:00:00">10:00</time>
          to <time itemprop="closes" content="22:00:00">22:00</time>
        </div>
      </div>

      <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
        <span itemprop="name">GymFitnessEquipment</span>:
        <meta itemprop="value" content="false"/> No
      </div>

      <div itemprop="containsPlace" itemscope itemtype="https://schema.org/HotelRoom">
        <!-- Room Amenities -->
        <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
          <span itemprop="name">Minibar</span>:
          <meta itemprop="value" content="true"/> Yes
        </div>
        <div itemprop="amenityFeature" itemscope itemtype="https://schema.org/LocationFeatureSpecification">
          <span itemprop="name">Smoking</span>:
          <meta itemprop="value" content="false"/> No
        </div>

        <div itemprop="offers" itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation">
          <meta itemprop="identifier" content="rate-plan-id-of-member-rate"/>
          Check-in: <time itemprop="checkinTime" content="2023-03-10T15:00:00">Mar 10, 2023 3:00 PM</time>
          Check-out: <time itemprop="checkoutTime" content="2023-03-16T10:00:00">Mar 16, 2023 10:00 AM</time>
          <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
            <span itemprop="priceCurrency" content="USD">$</span><span itemprop="price">1222.74</span>
          </div>
        </div>
      </div>
    </div>

### JSON-LD (Deprecated)

    {
      "@context": "https://schema.org",
      "@type": "Hotel",
      "name": "ACME Hotel",
      "address": { ... },
      "amenityFeature": [
        {
          "@type": "LocationFeatureSpecification",
          "name": "HotTub",
          "hoursAvailable": {
            "@type": "OpeningHoursSpecification",
            "opens": "10:00:00",
            "closes": "22:00:00"
          }
        },
        {
          "@type": "LocationFeatureSpecification",
          "name": "GymFitnessEquipment",
          "value": false
        }
      ],
      "containsPlace": {
        "@type": "HotelRoom",
        "amenityFeature": [
          {
            "@type": "LocationFeatureSpecification",
            "name": "Minibar",
            "value": true
          },
          {
            "@type": "LocationFeatureSpecification",
            "name": "Smoking",
            "value": false
          }
        ],
        "offers": {
          "@type": ["Offer", "LodgingReservation"],
          "identifier": "rate-plan-id-of-member-rate",
          "checkinTime": "2023-03-10 15:00:00",
          "checkoutTime": "2023-03-16 10:00:00",
          "priceSpecification": {
            "@type": "CompoundPriceSpecification",
            "price": 1222.74,
            "priceCurrency": "USD"
          }
        }
      }
    }

## Navigation tagging

Custom HTML5 attributes with the `data-nav-` prefix are used to annotate
interactive elements and declare page states, allowing the crawler to navigate
through the booking flow.

### Syntax

The navigation tagging uses the following attribute syntax:

### Attributes

    <body data-nav-stage="stage_name">
      ...
      <button data-nav-criticalpath="true"
              data-nav-interactiontype="CLICK"
              data-nav-interactionorder="1">
        Action
      </button>
      ...
      <button data-nav-close="true">Dismiss</button>
    </body>

### Properties

The following are the navigation attributes:

| Attribute | Values | Description |
|---|---|---|
| data-nav-stage | landing, room-selection, checkout, confirmation | Declares active funnel state for crawlers. Attached to `<body>` or high-level wrapper. |
| data-nav-stage-final | true, false | Indicator for the last page of the flow (default `false`). If no elements with `data-nav-criticalpath="true"` are present on a page, the crawler automatically considers it the final page of the flow. |
| data-nav-criticalpath | true, false | Marks an element that the crawler MUST interact with to reach the final booking page. If no elements with `data-nav-criticalpath="true"` are present on a page, the crawler automatically considers it the final page of the flow. |
| data-nav-interactiontype | CLICK, SELECT | Specifies the interaction action. `CLICK` is for buttons/links. `SELECT` is for dropdowns/radio groups. |
| data-nav-interactionorder | integer | Provides an execution sequence for multi-step navigation. Lower numbers execute first. |
| data-nav-close | true | Marks dismissal buttons on popups, cookie banner overlays, or upsell modals. |

### Navigation example

The following are examples of navigation tagging.

#### Click navigation

The following is a basic example of click navigation declaring the funnel stage.

    <body data-nav-stage="room-selection" data-nav-stage-final="false">
      <h1>Select Your Room</h1>
      
      <!-- Crawler needs to click this to proceed -->
      <button data-nav-criticalpath="true"
              data-nav-interactiontype="CLICK"
              data-nav-interactionorder="1">
        Select & Proceed
      </button>
    </body>

#### Multi-step navigation

The following is an example of multi-step navigation including a cookie banner,
accordion reveal, and click.

    <div data-nav-stage="landing" data-nav-stage-final="false">
      <!-- Hotel, LodgingReservation info, and Offer price are expected to be included in this page -->

      <!-- Step 1: Accept cookies -->
      <div class="cookie-banner">
        <p>We use cookies to improve your experience.</p>
        <button data-nav-close="true"
                data-nav-criticalpath="true"
                data-nav-interactiontype="CLICK"
                data-nav-interactionorder="1">Accept cookies</button>
      </div>

      <!-- Step 2: Open accordion to reveal pricing (Crucial for making prices visible in Mobile UIs) -->
      <div data-nav-criticalpath="true"
           data-nav-interactiontype="CLICK"
           data-nav-interactionorder="2"
           class="accordion-header">
        <span>View Room Rates</span>
      </div>


      <!-- Step 3: Book the room -->
      <div class="accordion-content">
        <button data-nav-criticalpath="true"
                data-nav-interactiontype="CLICK"
                data-nav-interactionorder="3">
          Book Now
        </button>
      </div>
    </div>

#### Final page declaration

The following is an example of declaring the final page of the booking flow.

    <!-- Marks this as the final confirmation page where price is extracted -->
    <!-- Hotel, LodgingReservation info, and Offer price are expected to be included in this page -->
    <div data-nav-stage="confirmation" data-nav-stage-final="true">
      <h1>Grand View Hotel</h1>
      <!-- Price and other details here -->
    </div>