Hotel Reviews Scraper (Booking.com & Agoda) avatar

Hotel Reviews Scraper (Booking.com & Agoda)

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Hotel Reviews Scraper (Booking.com & Agoda)

Hotel Reviews Scraper (Booking.com & Agoda)

Scrape guest reviews for a hotel from Booking.com or Agoda — rating, review text, author nationality, stay date, room type, and the hotel's response. No login.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Share

Extract guest reviews for a hotel from Booking.com or Agoda — rating, review text, the guest's nationality, stay dates, room type, and the hotel's written response. No account or login required.

Why use this actor

  • No account, login, or API key required.
  • Two sources, one actor — pick Booking.com or Agoda per run.
  • Rich per-review detail — rating, title, what the guest liked/disliked, room booked, stay dates, traveler type, and helpful-vote count.
  • The hotel's reply is included — when a hotel responds to a review, that response text and date come through too.
  • Agoda reviews are pre-aggregated across Agoda's own guests and reviews originally left on Booking.com, so you get broader coverage from a single call.
  • Stable JSON output ready for spreadsheets, dashboards, databases, or sentiment pipelines.
  • Runs on a schedule, retries automatically, and exports to JSON, CSV, or Excel.

How it works

  1. Pick a source (Booking.com or Agoda) and paste the hotel's page URL — for Agoda you can paste the URL or just its numeric property ID.
  2. Choose how you want reviews sorted (newest, oldest, highest/lowest rating, most relevant) and set a cap per hotel and for the whole run.
  3. Run it. The actor opens each hotel's review list and pushes one clean record per review, working through pages until it hits your cap or runs out of reviews.

You do not manage any scrapers, browsers, or blocks — the actor handles that automatically and returns clean records.

Input

Booking.com:

{
"source": "booking",
"hotels": ["https://www.booking.com/hotel/id/ktm-resort-batam.html"],
"sortBy": "newest",
"maxReviewsPerHotel": 100,
"maxReviews": 500,
"solveAttempts": 5,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Agoda (URL or numeric property ID both work):

{
"source": "agoda",
"hotels": ["11295575"],
"sortBy": "highest_rating",
"maxReviewsPerHotel": 100,
"maxReviews": 500,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
FieldTypeDescription
sourcestringbooking or agoda.
hotelsarrayBooking: the hotel's Booking.com page URL(s). Agoda: the hotel's Agoda page URL(s), or its numeric Agoda property ID.
sortBystringnewest, oldest, highest_rating, lowest_rating, or most_relevant. Agoda has no separate "oldest first", so it falls back to newest.
maxReviewsPerHotelintegerCap on reviews pulled per hotel. 0 = all available.
maxReviewsintegerOverall cap for the run, across all hotels. 0 = no limit.
solveAttemptsintegerBooking.com only — how many times to retry the initial unlock on a fresh IP. More = more reliable.
proxyConfigurationobjectResidential is recommended (default).

Output

One record per review.

Booking.com:

{
"_input": "https://www.booking.com/hotel/id/ktm-resort-batam.html",
"_source": "S1-booking-reviewlist",
"_scrapedAt": "2026-08-06T10:05:23Z",
"recordType": "REVIEW",
"source": "booking",
"hotelName": "KTM Resort Batam",
"hotelUrl": "https://www.booking.com/hotel/id/ktm-resort-batam.html",
"reviewId": "63a25c73ebdad386",
"authorName": "Poovendran",
"authorNationality": "Malaysia",
"authorCountryCode": "my",
"rating": 8.0,
"reviewTitle": "Stay in Ktm Resort",
"positiveText": "Breakfast buffet and friendly staff",
"negativeText": "A bit far from the main city, distance wise it's near but too many cars in the road making it more than half an hour to go to the city",
"reviewText": null,
"roomType": "Deluxe Villa",
"travelerType": "Solo traveler",
"stayCheckIn": "2026-07-23",
"stayCheckOut": "2026-07-26",
"numNights": 3,
"reviewDate": "2026-07-30T02:00:28Z",
"hotelResponse": null,
"hotelResponseDate": null,
"helpfulVotes": 0,
"language": "en"
}

Agoda (with a hotel response):

{
"_input": "11295575",
"_source": "S1-agoda-hotelreviews",
"_scrapedAt": "2026-08-06T10:05:59Z",
"recordType": "REVIEW",
"source": "agoda",
"hotelName": "Desa Potato Head Bali",
"hotelUrl": null,
"reviewId": 1127366899,
"authorName": "Rebecca",
"authorNationality": "Australia",
"authorCountryCode": "au",
"rating": 10.0,
"reviewTitle": "Fantastic stay",
"positiveText": null,
"negativeText": null,
"reviewText": "We had a great stay at potato head, staying in one of their ocean front rooms. The staff and service were wonderful and really attentive. Will be back! ",
"roomType": "Oceanfront Studio",
"travelerType": "Couple",
"stayCheckIn": "2026-05-30T00:00:00+07:00",
"stayCheckOut": "2026-06-01T00:00:00+07:00",
"numNights": 2,
"reviewDate": "2026-06-03T05:00:00+07:00",
"hotelResponse": "Dear Rebecca, \n\nThank you for your wonderful review! We are delighted to hear that you had a great stay with us and enjoyed your Ocean Front room... (truncated)",
"hotelResponseDate": "2026-06-03T18:55:13.253+07:00",
"helpfulVotes": 0,
"language": null,
"reviewSourceProvider": "Agoda"
}
FieldTypeDescription
hotelNamestringHotel name.
hotelUrlstringThe Booking.com page URL you provided (null for Agoda, which is looked up by numeric ID).
reviewIdstring/numberUnique id for the review.
authorNamestringReviewer's display name (null if they reviewed anonymously).
authorNationalitystringReviewer's country, as shown on the review.
authorCountryCodestringTwo-letter country code for the flag icon shown next to the reviewer.
ratingnumberScore out of 10.
reviewTitlestringHeadline the guest gave their review, if any.
positiveTextstringWhat the guest liked (Booking splits pros/cons this way; Agoda only for reviews written that way).
negativeTextstringWhat the guest disliked.
reviewTextstringFree-form review body, used when the source doesn't split it into pros/cons (mainly Agoda).
roomTypestringRoom type the guest stayed in, when the source records it.
travelerTypestringe.g. "Solo traveler", "Couple", "Family".
stayCheckIn / stayCheckOutstringDates of the reviewed stay.
numNightsintegerLength of stay in nights.
reviewDatestringWhen the review was posted.
hotelResponsestringThe hotel's written reply to the review, if any.
hotelResponseDatestringWhen the hotel replied (Agoda only).
helpfulVotesinteger"Helpful" votes the review received, if the source shows one.
reviewSourceProviderstringAgoda only — which platform the review was originally posted on (Agoda's aggregated reviews include ones sourced from Booking.com and other channels).

Notes & limits

  • Booking.com unlocks the hotel's page once per run and reuses that unlock for every additional Booking hotel URL you add — only the first hotel (or a re-check after a long gap) pays the full unlock cost.
  • Sorting on Agoda: there's no dedicated "oldest first" option on Agoda's side, so choosing oldest there falls back to the same ordering as newest.
  • Volume: both sources page through as many reviews as are available, up to your caps. Very large hotels (thousands of reviews) will take longer and use more proxy bandwidth the higher you set maxReviewsPerHotel.
  • Proxy: Residential is recommended and set as the default.

Other actors

See the sibling scrapers in this collection — booking-hotels-scraper and agoda-hotels-scraper — for hotel search results and live room rates from the same two sites.