Agoda Hotel Reviews API
Extract comprehensive hotel reviews from Agoda with detailed ratings, guest profiles, and sentiment data from multiple review providers.
Overview
Multi-Provider Reviews
Access reviews from Agoda and partner platforms including Booking.com in a single API call with aggregated ratings.
The Agoda Hotel Reviews endpoint provides access to comprehensive review data including guest ratings, detailed comments, reviewer profiles, stay information, and sub-ratings for various hotel aspects. This endpoint aggregates reviews from multiple providers for a complete view of guest feedback.
Endpoint URL
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
hotel_id | integer | Required | Agoda hotel ID (path parameter, e.g., 319457) |
page | integer | Optional | Page number for pagination (starts at 1, default: 1) |
page_size | integer | Optional | Number of reviews per page (1-20, default: 5) |
sorting | integer | Optional | Sort order: 7 = most recent, 6 = highest rating, 5 = lowest rating (default: 7) |
Response Format
Success Response
Returns a JSON object containing reviews array, pagination details, and hotel metadata.
{
"success": true,
"hotel_id": 319457,
"hotel_name": "Omena Hotel Jyvaskyla",
"reviews": [...],
"pagination": {
"current_page": 1,
"page_size": 5,
"total_count": 1459,
"total_pages": 292
},
"review_score": {
"overall": 7.9,
"score_text": "Very good",
"review_count": 1459
},
"retrieved_at": "2025-09-04T10:30:00Z"
}
Review Object Structure
Core Fields
review_id
- Unique review identifierrating
- Overall rating (1-10 scale)title
- Review title/summarycomment
- Full review textpros
- Positive aspects mentionedcons
- Negative aspects mentioneddate
- Review submission datestay_date
- Guest's stay dateroom_type
- Room type bookedhelpful_count
- Number of helpful voteslanguage
- Review language code
Reviewer Object
name
- Reviewer's display namecountry
- Reviewer's countrylevel
- Reviewer experience levelgroup_type
- Travel group type (Solo, Couple, Family, etc.)
Sub-ratings Object
cleanliness
- Cleanliness ratinglocation
- Location ratingservice
- Service quality ratingfacilities
- Facilities ratingvalue_for_money
- Value ratingcomfort
- Comfort rating
Error Responses
Bad Request
Invalid hotel ID or parameter values
Unauthorized
Missing or invalid API key
Internal Server Error
Failed to fetch reviews from Agoda
Usage Tips
Optimize Pagination
Use smaller page sizes (5-10 reviews) for faster responses. The default of 5 reviews per page provides optimal performance.
Best Practices
- Start with page 1 and increment sequentially for pagination
- Use sorting=7 for most recent reviews to get latest feedback
- Monitor the total_count in pagination to know when to stop
- Cache review data as it doesn't change frequently
- Combine with hotel details endpoint for complete property information
- Reviews include data from multiple providers (Agoda, Booking.com, etc.)
- Sub-ratings provide detailed insights into specific hotel aspects
curl -X GET "https://api.stayapi.com/v1/agoda/hotel/reviews/319457?page=1&page_size=10&sorting=7" \ -H "X-API-Key: YOUR_API_KEY"
const response = await fetch( 'https://api.stayapi.com/v1/agoda/hotel/reviews/319457?page=1&page_size=10', { headers: { 'X-API-Key': 'YOUR_API_KEY' } } ); const data = await response.json(); console.log(`Found ${data.pagination.total_count} reviews`); console.log(`Overall rating: ${data.review_score.overall}`); // Process reviews data.reviews.forEach(review => { console.log(`${review.rating}/10 - ${review.title}`); console.log(`Guest: ${review.reviewer.name} from ${review.reviewer.country}`); });
import requests url = 'https://api.stayapi.com/v1/agoda/hotel/reviews/319457' params = { 'page': 1, 'page_size': 10, 'sorting': 7 # Most recent } headers = { 'X-API-Key': 'YOUR_API_KEY' } response = requests.get(url, params=params, headers=headers) data = response.json() print(f"Total reviews: {data['pagination']['total_count']}") print(f"Overall rating: {data['review_score']['overall']}") # Process reviews for review in data['reviews']: print(f"{review['rating']}/10 - {review['title']}") print(f"Pros: {review.get('pros', 'N/A')}") print(f"Cons: {review.get('cons', 'N/A')}") print('---')
<?php $hotel_id = 319457; $params = http_build_query([ 'page' => 1, 'page_size' => 10, 'sorting' => 7 ]); $ch = curl_init("https://api.stayapi.com/v1/agoda/hotel/reviews/{$hotel_id}?{$params}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'X-API-Key: YOUR_API_KEY' ]); $response = curl_exec($ch); $data = json_decode($response, true); curl_close($ch); echo "Total reviews: " . $data['pagination']['total_count'] . "\n"; echo "Overall rating: " . $data['review_score']['overall'] . "\n"; foreach ($data['reviews'] as $review) { echo $review['rating'] . "/10 - " . $review['title'] . "\n"; echo "Reviewer: " . $review['reviewer']['name'] . "\n"; }
require 'net/http' require 'json' uri = URI('https://api.stayapi.com/v1/agoda/hotel/reviews/319457') params = { page: 1, page_size: 10, sorting: 7 } uri.query = URI.encode_www_form(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Get.new(uri) request['X-API-Key'] = 'YOUR_API_KEY' response = http.request(request) data = JSON.parse(response.body) puts "Total reviews: #{data['pagination']['total_count']}" puts "Overall rating: #{data['review_score']['overall']}" data['reviews'].each do |review| puts "#{review['rating']}/10 - #{review['title']}" puts "Guest type: #{review['reviewer']['group_type']}" puts '---' end
{ "success": true, "hotel_id": 319457, "hotel_name": "Omena Hotel Jyvaskyla", "reviews": [ { "review_id": "1013949992", "rating": 10.0, "title": "Thanks a lot for Omena Call Support", "comment": "Omena Call Support helped me to get my check-in link and access code...", "pros": "", "cons": "", "reviewer": { "name": "Shintaro", "country": "Japan", "level": "", "group_type": "Group" }, "date": "August 22, 2025", "stay_date": "August 2025", "room_type": "Double Room", "helpful_count": 0, "language": "en", "photos": [], "sub_ratings": { "cleanliness": 9.0, "location": 9.5, "service": 8.0, "facilities": 8.5, "value_for_money": 8.5, "comfort": 9.0 } }, { "review_id": "848411361", "rating": 9.2, "title": "Good for short stay in city center", "comment": "The room is spacious and clean. Location is unbeatable...", "pros": "", "cons": "", "reviewer": { "name": "Minjie", "country": "China", "level": "", "group_type": "Solo traveler" }, "date": "August 29, 2024", "stay_date": "August 2024", "room_type": "Double Room", "helpful_count": 0, "language": "en", "photos": [], "sub_ratings": { "cleanliness": 9.0, "location": 10.0, "service": 8.0, "facilities": 8.0, "value_for_money": 9.0, "comfort": 9.0 } } ], "pagination": { "current_page": 1, "page_size": 5, "total_count": 1459, "total_pages": 292 }, "review_score": { "overall": 7.9, "score_text": "Very good", "review_count": 1459 }, "retrieved_at": "2025-09-04T10:30:00Z" }
{ "error": { "code": "INVALID_HOTEL_ID", "message": "The provided hotel ID is invalid or not found", "status": 400 } }