# Changelog of Agoda Reviews Scraper — Hotel Guest Reviews (`blackfalcondata/agoda-reviews-scraper`) Actor

- **URL**: https://apify.com/blackfalcondata/agoda-reviews-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/blackfalcondata/agoda-reviews-scraper.md

## Changelog

All notable changes to the Agoda Reviews Scraper are documented here.

### \[0.1.31] - 2026-09-04

#### Fixed

- **Unchanged reviews were delivered - and charged - a second time in Incremental Mode.** The source returns the same review dated sometimes to the second and sometimes rounded to the minute, and change detection read the two forms as two different reviews. Timestamps are now compared to the minute, so a review that has not changed is not delivered again. The dates in your data are exactly what the source gave; this only affects how changes are detected, and existing saved history carries over without a re-delivery.

### \[0.1.30] - 2026-09-04

#### Changed

- **Runs over long hotel lists spend less time waiting.** An internal safety delay was shortened after measurement. Results are unchanged.

### \[0.1.28] - \[0.1.29] - 2026-09-04

#### Changed

- No functional change. Both builds are the same source as 0.1.27, released while verifying the deployment pipeline.

### \[0.1.27] - 2026-09-04

#### Fixed

- **A hotel that had already needed one retry was given up on at the next unanswered page.** Once a run had switched to its backup route for a hotel, a single unanswered page ended that hotel's collection — measured, that is a 500-review window delivered as 203. The backup route is not treated as more trustworthy than the first one any more: an unanswered page is retried either way, and the run returns to the ordinary route as soon as it works again, which also keeps the extra platform usage down.

### \[0.1.26] - 2026-09-04

#### Changed

- **A hotel that stops answering mid-collection is now retried over a different route before the run gives up on it.** Runs that used to come back with the incomplete-results warning have a second chance at finishing the window instead. The extra attempts are bounded per run, so a hotel that cannot be finished still ends with the warning rather than an open-ended retry — and the small amount of extra platform usage only occurs on a run that actually hits the problem.

### \[0.1.25] - 2026-09-04

#### Fixed

- **A review the source hands back twice is no longer delivered — and billed — twice.** Runs on a large hotel received a handful of reviews a second time (measured: 8 and 10 repeats in 500-review runs), each one charged as a result even though it was byte-identical to a row already in the dataset. Repeats are now recognised and dropped, and Max Reviews goes on counting distinct reviews, so the window you asked for still fills.

### \[0.1.24] - 2026-09-04

#### Fixed

- **A hotel that outgrew its saved history now records the fact.** Above a size limit the history keeps the reviews' identities but drops the copy used to tell a removed review from an unchanged one, so Incremental Mode quietly stopped reporting removals for that hotel. Delivery was correct either way; the change is that it is now recorded rather than silent.

### \[0.1.23] - 2026-09-04

#### Fixed

- **A storage failure no longer reports itself as a successful, empty run.** When the actor's own saved-history storage was failing, every hotel was reported as being updated by another run, the run exited green with no reviews, and the explanation it gave was not true. A storage failure now fails the hotel — and, if it hits every hotel, the run.
- **Incremental Mode no longer re-bills a window because the history could not be saved.** If saving the history was refused after the reviews had been delivered, the next run classified every one of them as new and billed them again, with nothing anywhere to say why.
- **A hotel summary that failed to be delivered is no longer treated as delivered.** It was recorded as sent while it was being written, so a failure left that hotel's summary suppressed until its content happened to change.
- **An interrupted run can no longer block a saved history permanently.** A leftover record with a clock ahead of ours was never considered stale, so it could refuse its own history key indefinitely. Stale and future-dated records are now cleared as they are read.

### \[0.1.22] - 2026-09-04

#### Fixed

- **A hotel whose reviews could not all be read now says so.** When collection stops early and cannot be resumed, the reviews that were read are still delivered — but the run now warns that the results for that hotel may be incomplete instead of printing a count that reads like the whole list. Running again usually collects the rest.

### \[0.1.21] - 2026-09-04

#### Fixed

- **Runs stopped partway through a hotel's reviews and reported it as the full list.** Where the source stopped answering, collection ended and the run reported clean success: eight identical 500-review runs on one hotel returned between 103 and 500 reviews, and only the count in the log said anything about it. Worse, in Incremental Mode every review the shortened run never reached was recorded as removed, so those reviews were delivered again as removals — and billed — on the next run. Collection now only treats a stop as the end of a hotel's reviews when the hotel's own published review count agrees; anything else is retried, and never recorded as the end.

### \[0.1.20] - 2026-09-04

#### Fixed

- **Two runs starting at the same time no longer collect and bill the same hotel twice.** Runs sharing one saved history (the same Incremental Mode state) each checked whether another run held the hotel, both saw it free, and both delivered the same reviews. Only one run now takes each hotel; the other waits for its own turn.
- **A very large hotel's saved history no longer grows without limit.** It is now bounded by size, so a hotel with a long review history cannot make the state record fail to save.

### \[0.1.19] - 2026-09-04

#### Fixed

- **Runs with a spend cap were delivering about half the rows you paid for.** The actor charged the run-start and per-result events by hand as well as letting the platform charge them, so a run with Max Total Charge set spent its budget twice as fast and stopped early. Billing is unchanged; capped runs now deliver the full amount.
- **A hotel that could not be read is no longer reported as having no reviews.** An unreadable response was treated as proof the hotel is review-less, which skipped every retry and returned an empty run with the message "they appear to have no reviews yet" — for hotels with thousands of them. Unreadable responses are now retried and, if they stay unreadable, reported as a failure.
- **Server errors no longer end a run early.** A 500, 502 or 404 was accepted as an empty page, which looks exactly like the end of the list: collection stopped there, and in Incremental Mode every review not yet seen was marked as removed. These now retry like any other blocked response.
- **Date filters match calendar dates.** Reviews are stamped in the hotel's local time, so a review dated the 9th could be excluded from a window starting the 9th. The date you type is now the date that is matched, and the end date includes the whole day.
- **Compact output keeps the change type.** In Incremental Mode with Compact Output the row was billed without the NEW / UPDATED / REAPPEARED label that is the point of the mode.
- **Incremental runs no longer re-bill an unchanged hotel summary.** With Include Hotel Summary on, every scheduled run billed a summary row even when nothing about the hotel had changed. It is now emitted on the first run and whenever it actually changes.
- **A moving date filter no longer resets incremental state.** A scheduled run using a rolling start date (for example "the last 30 days") got a fresh, empty history every time, so the same unchanged reviews were re-delivered and re-billed as new. Date filters no longer partition the history, and a date-filtered run no longer marks reviews outside its window as removed.
- **Lowering Max Reviews no longer causes a re-bill when you raise it again.** Reviews pushed outside a smaller window were forgotten entirely; restoring the larger figure delivered and billed them again as new.
- **"Has response" tells the truth when management responses are turned off.** It reported that no review had a response, rather than that responses were not collected — so filtering for unanswered reviews returned every review.
- **Incremental Mode says when it overrides your sort.** It always reads newest-first; choosing another sort was silently ignored.
- Ratings and vote counts that arrive as text are now read as numbers instead of being dropped — a dropped rating was excluded by the rating filter.

#### Added

- **📅 Reviews To Date.** Pairs with Reviews From Date to pull a specific window, such as one season. A backwards window is rejected up front instead of returning an empty run.

#### Changed

- **Max Reviews and Include Hotel Summary now state their billing effect.** In Incremental Mode, Max Reviews is the per-hotel window, so a run over 20 hotels can return up to 20x that figure; each hotel summary row is billed like a review and is not counted against Max Reviews. Both were true before and neither was documented.

### \[0.1.18] - 2026-09-03

#### Changed

- **Five controls that did nothing have been removed from the input form.** "Max Results", "Include Full Listing Details", "Description Format", a second "Incremental Mode" toggle and "Emit Expired Listings" were left over from the scaffold this actor was built from: they described listings rather than reviews, and nothing read them. "Max Results" sat next to the real "Max Reviews" with the same icon, so a run capped there was silently uncapped and billed in full. Use **Max Reviews** (and **Max Reviews Per Hotel**) for volume, and **Incremental Mode** for repeat runs.

### \[0.1.17] - 2026-09-03

#### Fixed

- **"Reviews From Date" no longer guesses.** Anything that was not a date was quietly turned into one — a run asking for "Feb to July 2026" was silently cut off at 1 July and delivered, and billed, the wrong window. The field now takes a calendar date (YYYY-MM-DD); anything else stops the run with an explanation before it charges you.
- **Missing hotels are now reported.** Max Reviews is a ceiling across all hotels, spent hotel by hotel, so a hotel list longer than the budget stopped partway and the remaining hotels were simply absent from the results — indistinguishable from those hotels having no reviews. The run now says how many hotels were left out and what to change.

### \[0.1.16] - 2026-09-03

#### Fixed

- **Review source filter is now honoured.** Choosing specific review sources (for example Agoda only) returned reviews from the other sources anyway, and every one of those extra reviews counted toward your results and your bill. A run asking for Agoda-only over 11 hotels came back 35% Booking.com. The filter is now applied to every review before it is delivered, so you get and pay for only the sources you selected.
- **Selecting "Agoda Partner" now covers the whole partner feed.** It previously matched only one of the several partner sources that share that name, so most partner reviews were missed.
- **A run that finds nothing now explains why.** Runs that read the hotels successfully but matched no reviews used to finish silently with an empty result. They now say whether the hotels genuinely have no reviews or your filters excluded everything, and name the filters to widen. A run where some hotels could not be read at all now fails instead of reporting an empty success.
- **Partly unusable input is now reported.** If some of the hotel URLs or IDs cannot be used, the run states how many were skipped instead of silently continuing with the rest.

### \[0.1.0] - 2026-06-27

Initial release.

#### Added

- Scrape guest reviews for any Agoda hotel by hotel URL or hotel ID, one property or many in a single run.
- Full review detail per record: star rating, review title and text in the original language and English translation, separate liked/disliked notes, stay and traveler details, review date, and the provider the review came from (Agoda, Booking.com, or Priceline).
- Optional reviewer demographics, guest-uploaded photos, and the hotel's official management response on each review.
- Optional per-hotel rating summary row alongside the individual reviews.
- Filters for minimum and maximum rating, traveler type, review language, and a "reviews from date" cutoff.
- Sort reviews by most recent, highest rating, lowest rating, or most helpful.
- Incremental mode that tracks state across runs and returns only new or changed reviews since the previous run.
- Compact output mode and an option to drop empty fields, for leaner exports and LLM pipelines.
- Optional notifications to Telegram, Discord, Slack, WhatsApp, or a custom webhook when a run finishes.
