Agoda Hotels Reviews Scraper avatar

Agoda Hotels Reviews Scraper

Pricing

from $1.79 / 1,000 results

Go to Apify Store
Agoda Hotels Reviews Scraper

Agoda Hotels Reviews Scraper

Get Agoda hotel search results and guest reviews in structured records. Hotel fields include names, areas, star and review ratings, review counts, prices, currency, coordinates, and image URLs. Search by city or Agoda URL, then choose hotel records with review arrays or separate review rows.

Pricing

from $1.79 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Returns: one row per Agoda hotel with name, city, area, starRating, reviewScore, reviewCount, pricePerNight, currency and an optional reviews array. Input: {"mode": "hotelsWithReviews", "searchQueries": ["Bangkok"], "maxItems": 10, "maxReviewsPerHotel": 5} Best for: hotel price monitoring, guest sentiment analysis, travel lead lists and market research on a city's hotels.

{
"id": "14654101",
"name": "Solaria Nishitetsu Hotel Bangkok",
"city": "Bangkok",
"area": "Sukhumvit",
"starRating": 4,
"reviewScore": 9.2,
"reviewCount": 16009,
"pricePerNight": 169.23,
"currency": "USD"
}

What does Agoda Hotels Reviews Scraper do?

Agoda Hotels Reviews Scraper is an Agoda scraper and unofficial Agoda API for hotel search results and guest reviews. Give it one or more city names, Agoda city ids or Agoda page URLs and it returns the hotels for those cities together with the data shown on Agoda: the hotel name, star rating, guest review score, review count, the price per room per night for the stay you choose, the neighbourhood, coordinates, a main photo and the category scores for cleanliness, facilities, location, staff and value.

It can also collect the guest reviews of each hotel. In hotelsWithReviews mode every hotel row carries a reviews array. In reviews mode the Actor returns one row per review instead, which is easier to load into a spreadsheet or a sentiment model. Each review has the rating, title, text, positives, negatives, date, stay month, reviewer country, traveler type, room type, helpful votes and the reply written by the hotel.

You do not need an Agoda account and you do not need to log in. The Actor reads the same public search and review endpoints that the Agoda website uses in a browser. It works sequentially at about one request per second so that it stays polite to the site.

Typical jobs:

  • Build a list of all hotels in a city with their ratings and nightly prices.
  • Collect recent guest reviews for a set of hotels and analyse what guests praise or complain about.
  • Compare neighbourhoods by review score and price.

What data can you get?

The table lists the fields of a hotel row. Fields are null when Agoda does not show a value, for example the price of a hotel that has no availability for your dates.

FieldTypeDescription
idstringStable record id, the Agoda property id (propertyId-reviewId in reviews mode)
sourceUrlstringAgoda hotel page the row came from
propertyIdnumberAgoda property id
namestringHotel name
urlstringAgoda hotel page URL
citystringCity
countrystringCountry
areastringNeighbourhood or district
propertyTypestringHotel, apartment, hostel and so on
starRatingnumberStar rating, half stars included
reviewScorenumberGuest score out of 10
reviewCountnumberNumber of Agoda guest reviews
pricePerNightnumberTax-inclusive price per room per night for the searched stay
currencystringCurrency of the price
latitude, longitudenumberCoordinates
imageUrlstringMain photo URL
categoryScoresobjectScores for cleanliness, facilities, location, staffPerformance, valueForMoney and roomComfort
checkIn, nightsstring, numberStay dates used for the price
reviewsarrayGuest reviews (see below)

Each entry of the reviews array, and each row in reviews mode, has these fields:

FieldDescription
reviewIdAgoda review id
ratingRating out of 10
titleReview headline
textReview comment, empty when the guest only left a rating
positives, negativesLiked and disliked points when the guest filled them in
reviewDateDate and time the review was posted
stayMonthMonth of the stay
stayCheckIn, stayCheckOutGuest stay timestamps from the review, including the source timezone
lengthOfStayNumber of nights reported for the guest stay
hostResponseDateTimestamp of the visible hotel reply; null if no reply is returned
reviewerNamePublic display name (optional, see the input table)
reviewerCountryCountry of the reviewer
travelerTypeSolo traveler, couple, family and so on
roomTypeRoom the guest stayed in
helpfulVotesVotes that marked the review helpful
hostResponseReply from the hotel when there is one

In reviews mode the row also repeats propertyId, hotelName, url, city and country so that each review can be used on its own.

How to use

  1. Open the Actor in Apify Console and enter at least one city in Cities, for example Lisbon.
  2. Choose a Mode: hotels for hotel rows only, hotelsWithReviews for hotels with their reviews, or reviews for one row per review.
  3. Set Max items. It limits the number of rows returned: hotels in the hotel modes, reviews in reviews mode.
  4. Optionally set the check-in date, number of nights, adults, rooms and currency to get prices for a specific stay.
  5. Press Start. Results appear in the Output tab as they are collected. Download them as JSON, CSV, Excel or HTML, or read them through the API.

A run of 50 hotels without reviews takes well under a minute. Reviews are fetched one page of 20 at a time for every hotel, so runs with many reviews take longer.

You can also paste Agoda URLs into Start URLs. A city URL such as https://www.agoda.com/city/bangkok-th.html is treated like a city name. A hotel URL such as https://www.agoda.com/dewan-bangkok-hotel/hotel/bangkok-th.html returns that hotel and its reviews. For hotel URLs the row contains the hotel id, name, URL and city plus the reviews, because the search listing is not used for a single hotel.

Input

FieldTypeDescription
searchQueriesarray of stringsCity names such as Bangkok. Required; pass an empty list when you use cityIds or startUrls
modestringhotels, hotelsWithReviews or reviews. Default hotels
maxItemsintegerMaximum rows to return, default 50
startUrlsarrayAgoda hotel or city URLs
cityIdsarray of integersAgoda city ids, for example 9395 for Bangkok
maxReviewsPerHotelintegerReviews per hotel, default 20. 0 gives no reviews in hotelsWithReviews mode
reviewSortstringmostRecent, ratingHigh, ratingLow or mostHelpful
minRating / maxRatingnumberKeep only reviews whose rating is within this range (Agoda's 1-10 scale). Optional
reviewsSincestringKeep only reviews with a reviewDate on or after this YYYY-MM-DD day. Optional
travelerTypesarray of stringsKeep only reviews whose travelerType contains one of these words, such as Couple or Family. Optional
reviewKeywordstringKeep only reviews whose title, text, positives or negatives contain this phrase. Optional
includeReviewerNamesbooleanSet to false to leave reviewer names empty. Default true
checkInstringCheck-in date YYYY-MM-DD. Default is 30 days from today
nightsintegerLength of stay for the price, default 2
adultsintegerAdults for the price, default 2
roomsintegerRooms for the price, default 1
currencystringThree-letter currency code, default USD
proxyConfigurationobjectApify Proxy settings, datacenter by default

Example input:

{
"mode": "hotelsWithReviews",
"searchQueries": ["Lisbon"],
"maxItems": 15,
"maxReviewsPerHotel": 10,
"reviewSort": "mostRecent",
"checkIn": "2026-12-01",
"nights": 3,
"adults": 2,
"currency": "EUR"
}

Review filters are applied after each page of reviews is fetched, and maxReviewsPerHotel counts reviews that pass the filters, so a run with filters scans more pages per hotel than it returns. A hotel with no matching reviews returns an empty reviews array. For example, {"mode": "reviews", "searchQueries": ["Bangkok"], "maxRating": 5, "reviewKeyword": "noise"} collects low-rated reviews that mention noise.

Prices depend on the check-in date, the length of stay, the number of guests and the currency. Prices are per room per night and include taxes. The order of hotels follows Agoda's own ranking for the search.

Output

The dataset holds one item per hotel, or one item per review in reviews mode. This is a real item from a run with mode: hotelsWithReviews, shortened to one review:

{
"id": "14654101",
"sourceUrl": "https://www.agoda.com/solaria-nishitetsu-hotel-bangkok/hotel/bangkok-th.html",
"propertyId": 14654101,
"name": "Solaria Nishitetsu Hotel Bangkok",
"url": "https://www.agoda.com/solaria-nishitetsu-hotel-bangkok/hotel/bangkok-th.html",
"city": "Bangkok",
"area": "Sukhumvit",
"propertyType": "Hotel",
"starRating": 4,
"reviewScore": 9.2,
"reviewCount": 16009,
"pricePerNight": 169.23,
"currency": "USD",
"reviews": [
{
"reviewId": 1188226246,
"rating": 10,
"title": "Excellent stay with top service",
"text": "Location was super convenient and room were well maintained and clean.",
"reviewDate": "2026-09-29T12:13:37+07:00",
"stayMonth": "September 2026",
"reviewerCountry": "Singapore",
"travelerType": "Couple",
"roomType": "Standard Twin Room",
"helpfulVotes": 0
}
]
}

About half of Agoda reviews have no comment text because the guest only gave a rating. Those reviews are still returned, with text set to null. Review text can be in the guest's own language or machine-translated by Agoda. The review also includes the guest stay check-in and check-out timestamps and number of nights when Agoda supplies them. These describe the reviewed stay, separately from the hotel search dates. A visible hotel reply includes its response timestamp when available. These four fields appear inside reviews in hotelsWithReviews mode and as columns in reviews mode; missing values remain null.

How much does it cost?

The Actor is charged per result: one result for every hotel row saved, or every review row in reviews mode. There is no charge for a run that returns nothing. See the Pricing tab of the Actor for the current price, since prices can change. Platform usage such as proxy traffic and compute is shown in your Apify usage as usual. Setting maxItems caps the number of results and therefore the cost of a run.

Use with AI agents (MCP)

You can call this Actor from AI agents through the Apify MCP server. Add this to your MCP client configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=axiomworks/agoda-hotels-reviews-scraper"
}
}
}

Example prompts:

  • "List 20 hotels in Lisbon on Agoda with their review score and price per night in EUR."
  • "Get the 10 most recent guest reviews for the top 5 hotels in Bangkok on Agoda and summarise the complaints."
  • "Find Agoda hotels in Bangkok with a review score above 9 and a nightly price under 60 USD."
  • "Fetch the reviews of https://www.agoda.com/dewan-bangkok-hotel/hotel/bangkok-th.html sorted by lowest rating."

Integrations and API

Run the Actor from code with the Apify API clients.

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("axiomworks/agoda-hotels-reviews-scraper").call(run_input={
"mode": "hotelsWithReviews",
"searchQueries": ["Bangkok"],
"maxItems": 10,
"maxReviewsPerHotel": 5,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["reviewScore"], item["pricePerNight"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('axiomworks/agoda-hotels-reviews-scraper').call({
mode: 'hotels',
searchQueries: ['Lisbon'],
maxItems: 50,
currency: 'EUR',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const count = items.length;

cURL:

curl -X POST "https://api.apify.com/v2/acts/axiomworks~agoda-hotels-reviews-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "hotels", "searchQueries": ["Bangkok"], "maxItems": 20}'

You can schedule runs, send results to Google Sheets, Slack or a webhook, and connect the dataset to tools such as Make or Zapier through the Apify integrations.

FAQ

How many hotels can I get for one city? As many as Agoda lists for the search, up to your maxItems. Large cities have thousands of properties. The Actor pages through the results and stops at maxItems or at the end of the list.

Why is the price empty for some hotels? Agoda only shows a price when the hotel has availability for the dates you chose. Hotels that are sold out are skipped in the results, and a few listed hotels have no quote for the stay. Try a different checkIn date.

Why do prices differ from the website? Agoda prices depend on dates, number of guests, currency and the visitor's country. The Actor returns the tax-inclusive price per room per night for the stay you ask for, as shown to a visitor without an account.

Can I get only reviews? Yes. Use mode: reviews to get one row per review, or paste hotel URLs into startUrls. Use maxReviewsPerHotel and reviewSort to control which reviews you get.

Why does a review have no text? Many guests rate a stay without writing a comment. These reviews keep their rating, date and reviewer country and have a null text.

Can I leave out reviewer names? Yes. Set includeReviewerNames to false and the reviewerName field stays empty.

The run returned zero items. Why? Check the spelling of the city. If no Agoda city matches the name, the Actor logs a warning and finishes with no items. If Agoda blocks the requests, the Actor retries with a new proxy session and fails with a clear message if it cannot get through; switch the proxy to residential in that case.

Does it need cookies or a login? No. Only public search and review data is used.

This Actor collects publicly visible information, such as hotel details, prices and guest reviews that anyone can see without logging in. It does not access accounts, bookings or private data. Laws differ by country, and the terms of the website may restrict automated access, so you are responsible for how you use the data.

Guest reviews contain public display names and countries of the reviewers, which can count as personal data under rules such as the GDPR. Use the data only for a lawful purpose, keep it secure, and set includeReviewerNames to false if you do not need names. This Actor is an independent tool and is not affiliated with or endorsed by Agoda. If you are unsure whether your use case is allowed, ask a legal professional.

Feedback

If a field is missing, a city is not found or something looks wrong, open an issue from the Actor page in Apify Console and describe the input you used. Feature requests are welcome too.