Last updated

Managing Market insights API

Use this topic to implement the various endpoints in the Market insights API. By implementing Market insights API, you can:

Performance insights reports:

Accessing performance insights needs additional permission

To access the performance data of a property, properties must grant the "Performance data and insights" permission while requesting a new connection via the Extranet.

For existing connections: Providers with individual property accounts can use the Quick connect interface in the Provider portal to request for an additional permission Performance data and insights from the connected partner.

For providers with group accounts: Adding permissions for existing connections is currently not supported.

Retrieving a demand report

GET https://supply-xml.booking.com/market-insights-api/properties/{property_id}/area_demand_data

The area_demand_data endpoint enables you to retrieve demand data for the target property's region.

Path parameters

You must include the following path parameter to specify the property.

ElementDescriptionTypeRequired/OptionalNotes
property_idSpecifies the ID of the property for which you want to retrieve demand data.stringrequired

Response body example

The following is a successful response body example:

{  
    "errors": [],  
    "warnings": [],  
    "data": {  
        "report_area": "Paris",  
        "report_date": "2021-02-06",  
        "demand_data": [  
            {  
                "stats": [  
                    {  
                        "title": "0-1 day",  
                        "key": "bookwindow_0_1",  
                        "formatted_score": "23.32%"  
                    },  
                    {  
                        "title": "2-7 days",  
                        "key": "bookwindow_2_7",  
                        "formatted_score": "19.13%"  
                    },  
                    {  
                        "formatted_score": "20.86%",  
                        "key": "bookwindow_8_30",  
                        "title": "8-30 days"  
                    },  
                    {  
                        "title": "31-90 days",  
                        "key": "bookwindow_31_90",  
                        "formatted_score": "8.88%"  
                    },  
                    {  
                        "key": "bookwindow_91",  
                        "formatted_score": "16.74%",  
                        "title": "90+ days"  
                    },  
                    {  
                        "title": "No dates",  
                        "key": "bookwindow_unknown",  
                        "formatted_score": "11.07%"  
                    }  
                ],  
                "category_name": "book_window",  
                "category_summary": "Most searches were looking for 0-1 day in the future",  
                "title": "Book window"  
            },  
            {  
                "stats": [  
                    {  
                        "formatted_score": "72.11%",  
                        "key": "traveller_couple",  
                        "title": "Couple"  
                    },  
                    {  
                        "title": "Solo traveller",  
                        "key": "traveller_solo",  
                        "formatted_score": "14.38%"  
                    },  
                    {  
                        "title": "Family",  
                        "formatted_score": "7.44%",  
                        "key": "traveller_family"  
                    },  
                    {  
                        "title": "Group",  
                        "formatted_score": "6.07%",  
                        "key": "traveller_group"  
                    }  
                ],  
                "category_summary": "Most searches were from couples",  
                "category_name": "traveller_type",  
                "title": "Traveller type"  
            },  
            {  
                "category_summary": "Most searches were made by domestic travellers",  
                "stats": [  
                    {  
                        "formatted_score": "57.00%",  
                        "key": "origin_domestic",  
                        "title": "Domestic"  
                    },  
                    {  
                        "title": "International",  
                        "key": "origin_international",  
                        "formatted_score": "43.00%"  
                    }  
                ],  
                "category_name": "origin",  
                "title": "Domestic and international travellers"  
            },  
            {  
                "stats": [  
                    {  
                        "title": "Mobile",  
                        "key": "device_mobile",  
                        "formatted_score": "75.17%"  
                    },  
                    {  
                        "title": "Desktop",  
                        "formatted_score": "24.83%",  
                        "key": "device_web"  
                    },  
                    {  
                        "key": "device_other",  
                        "formatted_score": "0.00%",  
                        "title": "Unidentified"  
                    }  
                ],  
                "category_summary": "Most searches were mobile searches",  
                "category_name": "device",  
                "title": "Device"  
            },  
            {  
                "title": "Top 5 countries",  
                "stats": [  
                    {  
                        "title": "France",  
                        "formatted_score": "57.00%",  
                        "key": "fr"  
                    },  
                    {  
                        "title": "United States",  
                        "formatted_score": "5.58%",  
                        "key": "us"  
                    },  
                    {  
                        "title": "Germany",  
                        "formatted_score": "3.29%",  
                        "key": "de"                    },  
                    {  
                        "title": "United Kingdom",  
                        "formatted_score": "3.24%",  
                        "key": "gb"                    },  
                    {  
                        "formatted_score": "3.11%",  
                        "key": "it",  
                        "title": "Italy"  
                    }  
                ],  
                "category_name": "rank",  
                "category_summary": "Most searches were from France"  
            },  
            {  
                "category_name": "policy",  
                "stats": [  
                    {  
                        "formatted_score": "60.29%",  
                        "key": "policy_flexible",  
                        "title": "Free cancellation"  
                    },  
                    {  
                        "formatted_score": "35.65%",  
                        "key": "policy_non_refundable",  
                        "title": "Non-refundable"  
                    },  
                    {  
                        "formatted_score": "4.06%",  
                        "key": "policy_flexible_cost_to_cancel",  
                        "title": "Partially refundable"  
                    }  
                ],  
                "category_summary": "Most guests staying in Paris made free cancellation bookings",  
                "title": "Cancellation policy"  
            },
            {
                "category_summary": "Most searches were looking for a stay of 3-7 nights",
                "category_name": "length_of_stay",
                "title": "Length of stay",
                "stats": [
                    {
                        "key": "3_7_days",
                        "title": "3-7 nights",
                        "formatted_score": "67.38%"
                    },
                    {
                        "key": "8_14_days",
                        "title": "8-14 nights",
                        "formatted_score": "14.56%"
                    },
                    {
                        "key": "1_day",
                        "title": "1 night",
                        "formatted_score": "10.43%"
                    },
                    {
                        "key": "2_days",
                        "title": "2 nights",
                        "formatted_score": "5.34%"
                    },
                    {
                        "key": "15_plus_days",
                        "title": "15+ nights",
                        "formatted_score": "2.29%"
                    }
                ]
            }
        ]  
    },  
    "meta": {  
        "ruid": "UmFuZG9tSVYkc2RlIyh9YWK4dAYm/RbIozfcP2hSPnPAOqhtG+bpYhV/L/tGC7zZG+dij2j4C7a/uJKLKBFjwdaMOm4Zg7OruP7iaM8+h9OG6uhGHIy7zg=="  
    }  
} 

Response body elements

The following table describes the response elements:

ElementDescriptionTypeNotes
dataContains the response object.object
> report_areaSpecifies the property's region to which the demand data applies.string
> report_dateSpecifies the date on which the demand data is generated.string
> demand_dataContains the demand data objects.array
>> category_nameSpecifies the category of the demand data.stringPossible values are: book_window, device, origin, policy, rank, and traveler_type.
>> category_summarySpecifies the key insight from the demand data in the category it belongs to.string
>> statsContains details of metrics for each category.array
>>> keySpecifies a data point within a specific category.string
>>> formatted_scoreSpecifies the percentage of the data point.string
>>> titleSpecifies a human readable version of the data point.string
>> titleSpecifies a human readable version of the category name.string

For more information on how to handle error responses, see the Troubleshooting section.

Retrieving booking window information

GET https://supply-xml.booking.com/market-insights-api/properties/{propertyId}/book_window_data

The book_window_data endpoint enables you to retrieve booking window information for the target property's region based on historical data. The API uses the reservations based on date of booking minus cancellations.

You can see insights:

  • Filtered by date range. For example, for the last 365 days, last 90 days and so on.
  • Compared to last year, a Booking.com-defined competitive set, a peer group, market value or none. For more information, see analysing the metrics impact.

Path parameters

You can include the following path parameters:

ElementDescriptionTypeRequired/OptionalNotes
property_idSpecifies the ID of the property for which you want to retrieve insight values.stringrequired
date_rangeSpecifies the date range within which you want to see the insight values.enumerated stringrequiredPossible values are:
- LAST_365_DAYS,
- LAST_90_DAYS
- LAST_60_DAYS
- LAST_30_DAYS
- LAST_14_DAYS
- LAST_07_DAYS
compare_withSpecifies the condition to compare the insights with.enumerated stringoptionalPossible values are:
- NONE
- LAST_YEAR: The API compares the report with the values from last year, (365 days earlier than the specified date).
- COMPETITIVE_SET: Includes up to 50 properties selected by Booking.com based on what guests were looking at before booking a specific property.
- PEER_GROUP: Consists of 50 similar properties in a property's area. You can use the peer group to see how a specific property is doing compared to similar properties. The properties in the peer group are chosen by Booking.com based on similarities in conversion, cancellations, property type, and other factors.
- MARKET: All properties in the target property's region.

Response body example

The following is a successful response body example:

{
  "data": {
    "book_window": [
      {
        "value": "0-1 days",
        "percent": 1.3333333333333335,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 128.8,
            "comparison_set": 101.10764705882352,
            "percent_change": 27.3889797129443
          }
        }
      },
      {
        "value": "2-3 days",
        "percent": 0.0,
        "percent_comparison_set": 0.0,
        "report": {}
      },
      {
        "value": "90+ days",
        "percent": 53.333333333333336,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 135.05846153846153,
            "comparison_set": 158.22608870967744,
            "percent_change": -14.64210318294933
          }
        }
      },
      {
        "value": "61-90 days",
        "percent": 10.666666666666668,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 95.75047619047619,
            "comparison_set": 147.8230769230769,
            "percent_change": -35.2263001261284
          }
        }
      },
      {
        "value": "31-60 days",
        "percent": 17.333333333333336,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 149.8385714285714,
            "comparison_set": 152.38607142857146,
            "percent_change": -1.671740714960384
          }
        }
      },
      {
        "value": "8-14 days",
        "percent": 5.333333333333334,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 119.17428571428572,
            "comparison_set": 113.22576923076925,
            "percent_change": 5.25367725379953
          }
        }
      },
      {
        "value": "15-30 days",
        "percent": 8.0,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 102.72133333333333,
            "comparison_set": 125.55599999999998,
            "percent_change": -18.186838276678653
          }
        }
      },
      {
        "value": "4-7 days",
        "percent": 4.0,
        "percent_comparison_set": 0.0,
        "report": {
          "adr": {
            "value": 71.3,
            "comparison_set": 116.91105263157894,
            "percent_change": -39.01346502739374
          }
        }
      }
    ],
    "total_booked_rooms": 113.0
  },
  "warnings": [],
  "errors": [],
  "meta": {
    "ruid": "Um123G9tSVYkc2RlIyh9YQzdwh+280lx897rDZF1JIZYdbF3XplmMYPN87IIbYDpF4gg5ppLWSo9FTHqy5069iHVvB2blrvu"
  }
}

Response body elements

The following table describes the response elements:

ElementDescriptionTypeNotes
dataContains the response object.object
> book_windowContains the insight values by different booking windows.array
>> valueSpecifies the booking window bucket.string
>> percentSpecifies the percentage of all reservations that fall into the booking window bucket.float
>> percent_comparison_setIf the request contains a compare_with filter, then the API returns a percent change in comparison to the value specified in the compare_with filter.float
>> reportContains the various insights.object
>>> adrContains the average daily rate value.object
>>>> valueSpecifies the average rate charged per room per night. It is calculated as the total revenue divided by room nights sold.float
>>>> comparison_setIf compare_with is specified in the request, then this specifies the average rate charged per room per night based on the given input for comparison.float
>>>> percent_changeSpecifies the percent change comparing the two values provided based on the compare_with value.float

For more information on how to handle error responses, see the Troubleshooting section.

Retrieving booker insights data

GET https://supply-xml.booking.com/market-insights-api/properties/{propertyId}/booker_insights_data

The booker_insights_data endpoint enables you to understand which countries your guests are booking from. The API uses the reservations based on date of booking minus cancellations.

You can see insights:

  • Filtered by date range. For example, for the last 365 days, last 90 days and so on.
  • Compared to last year, a Booking.com-defined competitive set, a peer group, market value or none. For more information, see analysing the metrics impact.

Path parameters

You can include the following path parameters:

ElementDescriptionTypeRequired/OptionalNotes
property_idSpecifies the ID of the property for which you want to retrieve insight values.stringrequired
date_rangeSpecifies the date range within which you want to see the insight values.enumerated stringrequiredPossible values are:
- LAST_365_DAYS,
- LAST_90_DAYS
- LAST_60_DAYS
- LAST_30_DAYS
- LAST_14_DAYS
- LAST_07_DAYS
compare_withSpecifies the condition to compare the insights with.enumerated stringoptionalPossible values are:
- NONE
- LAST_YEAR: The API compares the report with the values from last year, (365 days earlier than the specified date).
- COMPETITIVE_SET: Includes up to 50 properties selected by Booking.com based on what guests were looking at before booking a specific property.
- PEER_GROUP: Consists of 50 similar properties in a property's area. You can use the peer group to see how a specific property is doing compared to similar properties. The properties in the peer group are chosen by Booking.com based on similarities in conversion, cancellations, property type, and other factors.
- MARKET: All properties in the target property's region.

Response body example

The following is a successful response body example:

{
  "data": {
    "country": [
      {
        "value": "de",
        "percent": 67.15007332572918,
        "percent_comparison_set": "NaN"
      },
      {
        "value": "nl",
        "percent": 19.912009124979633,
        "percent_comparison_set": "NaN"
      },
      {
        "value": "be",
        "percent": 10.624083428385205,
        "percent_comparison_set": "NaN"
      },
      {
        "value": "gb",
        "percent": 0.6354896529248819,
        "percent_comparison_set": "NaN"
      },
      {
        "value": "lu",
        "percent": 0.5214274075281082,
        "percent_comparison_set": "NaN"
      },
      {
        "value": "other",
        "percent": 1.1569170604529901,
        "percent_comparison_set": "NaN"
      }
    ],
    "total_booked_rooms": 2870.0
  },
  "warnings": [],
  "errors": [],
  "meta": {
    "ruid": "Um123G9tSVYkc2RlIyh9YQzdwh+280lx897rDZF1JIZYdbF3XplmMYPN87IIbYDpF4gg5ppLWSo9FTHqy5069iHVvB2blrvu"
  }
}

Response body elements

The following table describes the response elements:

ElementDescriptionTypeNotes
dataContains the response object.object
> countryContains the insight values by countries.array
>> valueSpecifies the country.string
>> percentSpecifies the percentage of all reservations that were made in properties in the specified country.float
>> percent_comparison_setIf the request contains a compare_with filter, then the API returns a percent change in comparison to the value specified in the compare_with filter.float

For more information on how to handle error responses, see the Troubleshooting section.

Retrieving Pace report data

GET https://supply-xml.booking.com/market-insights-api/properties/{propertyId}/pace_report_data

Use the pace_report_data endpoint to keep track of your future reservations, and compare your performance to previous years. You can also check how the property compares with their peer group, competitive set or the market in general.

The API uses the bookings where the stay date is in the future and not yet cancelled.

You can see insights:

  • Filtered by date range. For example, for the last 365 days, last 90 days and so on.
  • Compared to last year, a Booking.com-defined competitive set, a peer group, market value or none. For more information, see analysing the metrics impact.
  • View by date, week, month or none (aggregates by total).

Path parameters

You can include the following path parameters:

ElementDescriptionTypeRequired/OptionalNotes
property_idSpecifies the ID of the property for which you want to retrieve insight values.stringrequired
date_rangeSpecifies the date range within which you want to see the insight values.enumerated stringrequiredPossible values are:
- LAST_365_DAYS,
- LAST_90_DAYS
- LAST_60_DAYS
- LAST_30_DAYS
- LAST_14_DAYS
- LAST_07_DAYS
compare_withSpecifies the condition to compare the insights with.enumerated stringoptionalPossible values are:
- NONE
- LAST_YEAR: The API compares the report with the values from last year, (365 days earlier than the specified date).
- COMPETITIVE_SET: Includes up to 50 properties selected by Booking.com based on what guests were looking at before booking a specific property.
- PEER_GROUP: Consists of 50 similar properties in a property's area. You can use the peer group to see how a specific property is doing compared to similar properties. The properties in the peer group are chosen by Booking.com based on similarities in conversion, cancellations, property type, and other factors.
- MARKET: All properties in the target property's region.
view_bySpecifies the sorting order to view the insights.stringrequiredSupports the following options:
- NONE: Aggregates by total
- DATE
- WEEK
- MONTH

Response body example

The following is a successful response body example:

{
  "data": {
    "report": {
      "adr": {
        "value": 152.92956521738412
      },
      "room_nights": {
        "value": 138.0
      },
      "revenue": {
        "value": 21104.27999999901
      }
    }
  },
  "warnings": [],
  "errors": [],
  "meta": {
    "ruid": "Um123G9tSVYkc2RlIyh9YQzdwh+280lx897rDZF1JIZYdbF3XplmMYPN87IIbYDpF4gg5ppLWSo9FTHqy5069iHVvB2blrvu"
  }
}

Response body elements

The following table describes the response elements:

ElementDescriptionTypeNotes
dataContains the response object.object
> reportContains the report detailsobject
>> adrContains the average daily rate value.object
>>> valueSpecifies the average rate charged per room per night, calculated as the total revenue divided by room nights sold.float
>> room_nightsContains the room nights value.object
>>> valueSpecifies the number of room nights stayed.float
>> revenueContains the revenue value.object
>>> valueSpecifies the total amount of revenue earned in a certain time period, minus cancellations.float

For more information on how to handle error responses, see the Troubleshooting section.

Retrieving Sales statistics report data

GET https://supply-xml.booking.com/market-insights-api/properties/{propertyId}/sales_statistics_report_data

Use the sales_statistics_report_data endpoint to view the reservations from guests who have booked or stayed at the property, and compare it to the previous year. You can compare the past performance with the property’s peer group, competitive set or the market in general. You can also specify which bookings to take into consideration.

You can see insights:

  • Filtered by date range.
  • Based on reservations:
    • Books date gross: Takes all reservations based on the date of the booking (rather than the stay), even if cancelled.
    • Book date net: Takes all reservations based on the date of the booking (rather than the stay), excluding cancelled reservations.
    • Stay date net: Takes all reservations based on the stay date, net of any cancellations - therefore all stayed bookings.
  • Comparing the results with values from last year or with the Booking.com-defined competitive set, peer group or market.
  • View by date, week, month or none (aggregates by total).

Path parameters

You can include the following path parameters:

ElementDescriptionTypeRequired/OptionalNotes
property_idSpecifies the ID of the property for which you want to retrieve insight values.stringrequired
start_dateSpecifies the start date.stringrequiredThe API considers bookings within the start_date and end_date.
end_dateSpecifies the end date.stringrequiredThe API considers bookings within the start_date and end_date.
include_reservationsSpecifies the booking category for which you want to retrieve insight values.stringrequiredSupports the following options:
- BOOK_DATE_GROSS: All reservations based on book date, including cancelled bookings.
- BOOK_DATE_NET: All reservations based on book date, excluding cancelled bookings.
- STAY_DATE_NET: All stayed reservations based on stay date, excluding cancelled bookings.
view_bySpecifies the sorting order to view the insights.stringoptionalSupports the following options:
- NONE: Aggregates by total
- DATE
- WEEK
- MONTH
compare_withSpecifies the condition to compare the insights with.enumerated stringoptionalPossible values are:
- NONE
- LAST_YEAR: The API compares the report with the values from last year, (365 days earlier than the specified date).
- COMPETITIVE_SET: Includes up to 50 properties selected by Booking.com based on what guests were looking at before booking a specific property.
- PEER_GROUP: Consists of 50 similar properties in the target property's area. You can use the peer group to see how a specific property is doing compared to similar properties. The properties in the peer group are chosen by Booking.com based on similarities in conversion, cancellations, property type, and other factors.
- MARKET: All properties in the target property's region.

Response body example

The following is a successful response body example:

{
  "data": {
    "report": {
      "adr": {
        "value": 147.1306211792597
      },
      "room_nights": {
        "value": 5071.0
      },
      "revenue": {
        "value": 746099.380000026
      }
    }
  },
  "warnings": [],
  "errors": [],
  "meta": {
    "ruid": "Um123G9tSVYkc2RlIyh9YQzdwh+280lx897rDZF1JIZYdbF3XplmMYPN87IIbYDpF4gg5ppLWSo9FTHqy5069iHVvB2blrvu"
  }
}

Response body elements

The following table describes the response elements:

ElementDescriptionTypeNotes
dataContains the response object.object
> reportContains the report detailsobject
>> adrContains the average daily rate value.object
>>> valueSpecifies the average rate charged per room per night, calculated as the total revenue divided by room nights sold.float
>> room_nightsContains the room nights value.object
>>> valueSpecifies the number of room nights stayed.float
>> revenueContains the revenue value.object
>>> valueSpecifies the total amount of revenue earned in a certain time period, minus cancellations.float

For more information on how to handle error responses, see the Troubleshooting section.

Going live

Before you go live with your API integration, take a look at Going Live.