Booking API endpoint
Returns guest reviews for a Booking.com hotel. `hotel_id` and `hotel_country_code` are required, both from a `booking-search` result. `search_text` filters review content, `page` is 1-based and `limit` is 1 to 25 (default 10). Reviews have `score`, `title`, `positive_text`, `negative_text`, `room_type` and stay dates; `rating_scores` and `reviews_count` summarise the hotel.
/booking/reviewshotel_id (required): Booking.com hotel id, from a prior booking-search call's properties[].id, for example 2845972.destination_id: destination id (ufi), from a prior booking-search call's destination_id.hotel_country_code (required): hotel's country code, from a prior booking-search call's country.hotel_score: hotel's overall review score, from a prior booking-search call's properties[].review_score.search_text: optional free-text search over review content, for example elevator.page: 1-based result page. Defaults to 1.limit: reviews per page, 1-25. Defaults to 10.search_text is a free-text filter over review content, not a review-score-bucket filter. An empty search_text returns the full unfiltered review list.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| score | 10 | 1 to 10, median 9 |
| title | 8 | |
| positive_text | 10 | |
| negative_text | 8 | median 262 characters |
| language | 10 | |
| reviewed_date | 10 | 2024-05-13 to 2026-10-12 |
| reviewer_name | 10 | |
| reviewer_country | 10 | |
| reviewer_review_count | 10 | 1 to 21, median 8 |
| room_type | 10 | |
| checkin_date | 10 | 2024-05-08 to 2026-10-08 |
| checkout_date | 10 | 2024-05-12 to 2026-10-11 |
| num_nights | 10 | 1 to 4, median 3 |
| customer_type | 10 | |
| stay_status | 10 | |
| helpful_votes_count | 2 | 4 to 6, median 4 |
| review_url | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| hotel_id | integer | Yes | Booking.com hotel id, from a prior search's property id | 2845972 | |
| destination_id | integer | No | Destination id (ufi), from a prior search response | -1456928 | |
| hotel_country_code | string | Yes | Hotel's country code, from a prior search response | fr | |
| hotel_score | number | No | Hotel's overall review score | 8.2 | |
| search_text | string | No | Optional free-text search over review content | elevator | |
| page | integer | No | 1-based result page, default 1 | 1 | |
| limit | integer | No | Reviews per page, 1-25, default 10 | 10 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/booking/reviews?hotel_id=2845972&hotel_country_code=fr&page=1&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"hotel_id": 2845972,
"reviews_count": 293,
"rating_scores": {
"Location": 9.49,
"Staff": 8.83,
"Cleanliness": 8.48
},
"page": 1,
"reviews": [
{
"score": 9,
"title": "Great stay",
"positive_text": "Spacious room, central location",
"reviewed_date": "2026-06-01T00:00:00Z",
"reviewer_name": "John",
"reviewer_country": "United Kingdom"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/booking.bookingReviewsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | booking.ReviewsResponse | No | ||||
| data.hotel_id | integer | No | ||||
| data.page | integer | No | ||||
| data.rating_scores | object | No | ||||
| data.reviews | array | No | ||||
| data.reviews[].checkin_date | string | No | ||||
| data.reviews[].checkout_date | string | No | ||||
| data.reviews[].customer_type | string | No | ||||
| data.reviews[].helpful_votes_count | integer | No | ||||
| data.reviews[].language | string | No | ||||
| data.reviews[].negative_text | string | No | ||||
| data.reviews[].num_nights | integer | No | ||||
| data.reviews[].positive_text | string | No | ||||
| data.reviews[].review_url | string | No | ||||
| data.reviews[].reviewed_date | string | No | ||||
| data.reviews[].reviewer_country | string | No | ||||
| data.reviews[].reviewer_name | string | No | ||||
| data.reviews[].reviewer_review_count | integer | No | ||||
| data.reviews[].room_type | string | No | ||||
| data.reviews[].score | number | No | ||||
| data.reviews[].stay_status | string | No | ||||
| data.reviews[].title | string | No | ||||
| data.reviews_count | integer | No | ||||
| data.search_text | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/booking/reviews?hotel_id=2845972&hotel_country_code=fr&page=1&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"