Disclosure: I build TubeText. This post uses our Agoda reviews Actor on Apify. The output examples below are from the original October 2026 article. Pricing and coverage notes were rechecked on 23 October 2026; this update does not report a new test run.
If you build a hotel reputation dashboard or a guest-feedback report, you need review text and source labels, not just an overall score. This Agoda reviews API returns Agoda reviews plus the Booking.com reviews that Agoda displays for the property. It does not read every Booking.com review directly, guarantee both sources for every hotel, or post replies.
Export Agoda reviews and Booking.com reviews shown on Agoda
The Agoda & Booking.com Hotel Reviews Scraper takes Agoda hotel links (or hotel IDs, or names) and returns one row per review, plus a hotel summary row. From a back end it's a single HTTP call to the Apify API:
curl -X POST "https://api.apify.com/v2/acts/tubetext~agoda-reviews-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"hotels":["https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html"],"sources":["agoda","booking"],"sort":"recent","maxReviewsPerHotel":15}'
What comes back
The hotel summary row (shortened) has the score breakdown that dashboards usually chart:
{
"type": "hotel",
"hotelName": "The Peninsula Bangkok",
"reviewScore": 9.2,
"reviewsCount": 5314,
"subScores": {"Cleanliness": 9.6, "Service": 9.5, "Facilities": 9.4, "Room comfort and quality": 9.3, "Location": 9, "Value for money": 9},
"reviewSources": ["Agoda", "Booking.com"]
}
An Agoda review row:
{
"type": "review",
"source": "Agoda",
"rating": 9.2,
"title": "Always a great option",
"text": "We have visited the Peninsula Bangkok multiple times as it never fails in quality...",
"reviewDate": "2026-09-30T18:16:09Z",
"stayMonth": "September 2026",
"nights": 3,
"travelerType": "Group",
"roomType": "Grand Deluxe Room",
"reviewerCountry": "Australia",
"charged": true
}
A Booking.com review displayed on Agoda comes out in the same schema. Booking's "liked" and "disliked" fields are kept separately, which is handy for sentiment work:
{
"type": "review",
"source": "Booking.com",
"rating": 10,
"title": "Exceptional",
"liked": "Complimentary boat ride to ICONSIAM every 30 minutes was so convenient",
"reviewDate": "2026-09-16T17:00:00Z",
"travelerType": "Solo traveler",
"charged": true
}
Reviewer names aren't collected. You get the review content, the trip context (traveler type, room, nights, country) and the hotel's reply when there is one.
Cost breakdown: reviews, hotel summaries and optional AI
At the Apify Free-plan event rates checked on 23 October 2026:
- Reviews: $1 per 1,000 delivered review rows.
- Hotel summary: $0.003 per delivered hotel summary row.
- Optional AI report: $0.05 per hotel, only when requested and delivered.
- Actor Start: $0.00005 per event, with one event per GB of Actor memory and a minimum of one.
The original 15-review example corresponds to $0.015 for reviews + $0.003 for the hotel summary = $0.018 in result events, before the separate start event(s). Its reported 20-second runtime was one historical observation, not a speed guarantee.
For a volume example, 1,000 hotels × 20 returned reviews = 20,000 reviews, or $20. If each hotel also returns one summary, add $3: $23 in result events, before optional AI and start events. Enabling a delivered AI report for all 1,000 hotels would add $50. Higher Apify plans have different event rates; check the current pricing and the run's charge summary.
A status row marked charged: false has no result-event charge for that item. The separate start event may still apply, so an empty or unsuccessful result is not a promise that the total run bill is zero.
Turning reviews into a report
If you don't want to run your own LLM step, set aiInsights: true. It adds one English report per hotel (top complaints, praise and suggested actions) for $0.05 at the Free-plan event rate, using up to 300 reviews. The report describes the selected sample; complaint shares are not hotel-wide prevalence, and suggested actions need human review. For dashboards I'd still store the raw rows and summarize on your side, but it's a quick way to see whether the data answers your question before you build anything.
Scheduling it
On Apify you can save the input as a task, put it on a schedule, and add a webhook that calls your endpoint when the run finishes. Your service then fetches the dataset items by run ID. Keep the raw source, property identifier, review identifier when present, review date and collection time so the report can be traced back to its input.
Use sort: "recent" and startDate to restrict the review window. A date filter is not persistent cross-run deduplication: overlapping windows can return an already-seen review. Store and compare review identifiers in your own workflow, and decide how to handle edits or missing identifiers before sending alerts. Do not interpret a missing hotel reply as proof that a guest has never been answered elsewhere.
For a manual first look, export the Reviews and Hotels views as CSV or Excel. Keep review-source labels in the export, and do not combine the number of sampled reviews with the hotel's total review count as if they were the same measure.
Questions or a field you're missing? Open an issue on the Actor's page. I read every one.
Top comments (0)