Hotel Price Structured Data Reference

This page provides a reference to add structured data markups to your hotels' pricing data.

Overview

Hotel price structured data is used to explain, validate and display in detail the hotel prices listed on your website regardless of the user interface. This also includes base price, rates, rooms, fees & taxes and pricing related fields.

Google recommends partners to annotate their webpages with standardized structured data that are machine readable for crawlers; provided by schema.org, to accurately scrape prices from your webpages.

This allows for scaling price accuracy validations through improving the reliability of crawlers. The benefit to you is an increase in the number of price accuracy validations and the ability to debug price accuracy issues directly, and also to have a consistent price accuracy score.

If you're new to structured data, learn more about Structured data vocabulary and format.

Google Hotels recommends JSON-LD format to annotate your webpages. Refer to Supported formats to learn more about other acceptable formats. This documentation provides detailed reference content specific to structured data implementation in Hotels.

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

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

HotelRoom structured data has the following properties:

Hotel structured data

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:

JSON-LD

{
  "@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"]
    ...
  }
}

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 The address or location of the hotel.

Examples

Name & address

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

{
"@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 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:

JSON-LD

{
  "@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": { ... }
  }
}

Properties

The following are the makesOffer properties:

Property Required? Type Description
makesOffer Required Offer and LodgingReservation

The hotel offer(s) for the given itinerary.

The makesOffer property can contain an array of offers.

LodgingReservation.checkinTime Required DateTime

The check-in time in the user's timezone. If your timezone is not mentioned then the hotel timezone is considered.

LodgingReservation.checkoutTime Required DateTime

The check-out time in the user's timezone. If your timezone is not mentioned then the hotel timezone is considered.

Example

makesOffer

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.

{
  "@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 to specify the total pricing information such as base rate, taxes and discounts. Use UnitPriceSpecification to specify additional taxes or special types of charges such as ResortFee, GenericTax and ServiceFee. priceSpecification property is bundled with the Offer property.

  {
    ...
    "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:

JSON-LD

{
  "@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"
        }
      ]
    }
  }
}

Microdata

  <div itemscope itemtype="https://schema.org/Hotel">
    <meta itemprop="name" content="hotel-name"/>
    ...
    <div itemscope itemtype="https://schema.org/Offer https://schema.org/LodgingReservation" itemprop="makesOffer">
      ...
      <div itemscope itemtype="https://schema.org/CompoundPriceSpecification" itemprop="priceSpecification">
        <meta itemprop="price" content="float"/>
        <meta itemprop="priceCurrency" content="currency"/>
        <div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
          <meta itemprop="name" content=""/>
          <meta itemprop="price" content="float"/>
          <meta itemprop="priceCurrency" content="currency"/>
        </div>
        <div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
          <meta itemprop="name" content="GenericTax" />
          <meta itemprop="price" content="float"/>
          <meta itemprop="priceCurrency" content="currency"/>
          <meta itemprop="priceComponentType" content="GenericTax"/>
        </div>
        <div itemscope itemtype="https://schema.org/UnitPriceSpecification" itemprop="priceComponent">
          <meta itemprop="name" content="Discount"/>
          <meta itemprop="price" content="float"/>
          <meta itemprop="priceCurrency" content="currency"/>
          <meta itemprop="priceComponentType" content="Discount"/>
        </div>
      </div>
    </div>
  </div>

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 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 is used to specify the type of charges. You should include 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

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 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 is not specified.

  • recipient.@type = "Hotel" refers to the payment collected at the hotel.

Examples

JSON-LD examples

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.

{
  "@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.

{
  "@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 is not specified then payAction interprets the payment at the time of booking as the default payment method.

{
  "@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": { ... }
            }
          }
        }
      ]
    }
  }
}

Microdata example

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 name property 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.

<div itemscope itemtype="https://schema.org/Hotel">
  <meta itemprop="name" content="ACME Hotel"/>
  <meta itemprop="identifier" content="hotel-id-1234"/>
  <div itemscope itemtype="https://schema.org/PostalAddress" itemprop="address">
    <meta itemprop="addressCountry" content="US" />
    <meta itemprop="addressLocality" content="Mountain View" />
    <meta itemprop="addressRegion" content="Santa Clara" />
    <meta itemprop="postalCode" content="94040" />
    <meta itemprop="streetAddress" content="123 Main street" />
  </div>
  <div itemscope itemtype="https://schema.org/Offer   https://schema.org/LodgingReservation"  itemprop="makesOffer">
    <meta itemprop="checkinTime" content="2023-03-10 15:00:00" />
    <meta itemprop="checkoutTime" content="2023-03-16 10:00:00"/>
    <div itemscope itemtype="https://schema.org/CompoundPriceSpecification"   itemprop="priceSpecification">
    <meta itemprop="price" content="1222.74" />
    <meta itemprop="priceCurrency" content="USD" />
      <div itemscope itemtype="https://schema.org/UnitPriceSpecification"    itemprop="priceComponent">
        <meta itemprop="name" content="" />
        <meta itemprop="price" content="1150" />
        <meta itemprop="priceCurrency" content="USD" />
      </div>
      <div itemscope itemtype="https://schema.org/UnitPriceSpecification"  itemprop="priceComponent">
        <meta itemprop="name" content="GenericTax" />
        <meta itemprop="price" content="172.74" />
        <meta itemprop="priceCurrency" content="USD" />
        <meta itemprop="priceComponentType" content="GenericTax" />
      </div>
      <div itemscope itemtype="https://schema.org/UnitPriceSpecification"   itemprop="priceComponent">
        <meta itemprop="name" content="Discount" />
        <meta itemprop="price" content="-100" />
        <meta itemprop="priceCurrency" content="USD" />
        <meta itemprop="priceComponentType" content="Discount" />
      </div>
    </div>
  </div>
</div>

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:

JSON-LD

{
  "@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

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 is not 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.

Example

Return policy

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.

{
  "@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:

JSON-LD

{
  "@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

The loyalty programs or the member rewards offered for the customers.

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

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.

{
  "@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 & regular rates

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

{
  "@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

offers property

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:

JSON-LD

{
  "@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 and LodgingReservation

The room price specification for the given itinerary.

The offers property can contain an array of offers.

LodgingReservation.checkinTime Required DateTime

The check-in time in the user's timezone. If your timezone is not mentioned then the hotel timezone is considered.

LodgingReservation.checkoutTime Required DateTime

The check-out time in the user's timezone. If your timezone is not mentioned then the hotel timezone is considered.

Example

offers

The following is a basic example for specifying offers in HotelRoom property.

{
  "@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:

JSON-LD

{
  "@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.

Properties

The following are the bed and occupancy properties:

Property Required? Type Description
HotelRoom.bed Optional (Recommended) 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

The number of guests in the hotel room. The type for occupancy is a QuantitativeValue.

Occupancy is an explicit property of HotelRoom, not for a specific Offer. Rates should only be tagged for the requested occupancy.

containsPlace Optional (Recommended) 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 property.

Examples

HotelRoom

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

{
  "@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

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

{
  "@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:

JSON-LD

{
  "@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"
        }
      ]
    }
  }
}

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 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, not for a specific Offer. Rates should only be tagged for the requested occupancy.

    • Discount: The deduction amount.

  • UnitPriceSpecification is used to specify the type of charges. You should include 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.

    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

Total room price

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

{
  "@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

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.

{
  "@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:

JSON-LD

{
  "@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"
        }
      }
    ]
  }
}

Property

The includesObject has the following property:

Attribute Required? Type Description
Offer.includesObject Optional 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

Example

Services

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.

{
  "@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:

JSON-LD

{
  "@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

The availability of the hotel or room.

Rates are extracted from schema.org/Offer and the rate information is not created using schema.org/Hotel or 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.

Example

Availability

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.

{
  "@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": {...}
  }
}

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:

JSON-LD

{
  "@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

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

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.

Example

Amenities in hotel and room

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

{
  "@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"
      }
    }
  }
}