Agoda hotel prices and availability for destinations or hotels by URL, id or name. One row per hotel: nightly and total price, taxes, free cancellation, rooms left, stars, guest score, sold out. Price calendar: cheapest dates. Filters before billing: max price, stars, guest score. ราคาโรงแรม, ホテル料金
2026-10-16 — Keyword Planner and locale documentation
Validated search terminology against Google Ads Keyword Planner and Store shelves. Added localized usage guidance and bounded examples; retained existing English phrases. Clarified locale limitations where measured. No runtime, output fields, defaults, or pricing changed.
1.1 — price calendar priced live, 2026-10-11
Fix: calendarDays returned no calendar rows at all (status ok, calendar_days: 0, nothing charged, no error) — the ladder caught it on 2026-10-11; it had passed on 2026-09-01 with the same code. Root cause on Agoda's side: the calendar was read from Agoda's priceTrendSearch store, which is a sparse, approximate per-property cache, not a pricing call. Captured 2026-10-11 it answers {"PriceTrendSearchDetails": {"cityId": 16364, "propertyId": 63820, "prices": []}} for every future window of Tivoli Avenida Liberdade and The Central House (any currency, occupancy or length of stay; direct and through Apify proxies), while the same call still returns the stale September dates; agoda.com's own date picker shows no prices for these hotels either. Of 18 top hotels in Lisbon, Bangkok and New York only 5 have any future dates in the store, and where it has one it differs from the live quote (e.g. 663 vs 536.52 USD). Pricing a stay does not populate it (checked for 212 s after a live quote). Nothing we send changed and the response shape is unchanged.
Now every calendar date is priced live: one single-property search per check-in date at your nights and adults (the stay's own search is reused for the first date), so the calendar is dense wherever the property can be booked, carries the same price basis as the hotel row, and sold_out dates are dates Agoda really has no rate for. Agoda's trend store is still read once per property, only to lend the trend word: Low/Normal/High where Agoda has a figure, null where it has none (most dates now). A withdrawn or refused trend endpoint no longer costs the calendar.
Same row fields, same event, same price. A run with calendarDays: N now makes N−1 more requests per named property than before (about 3 KB each); the pacing and session rules apply unchanged.
Offline tests: new fixture prices_trend_63820_empty (the 2026-10-11 answer); the calendar tests assert one search per date, the trend word merge, the sold-out-everywhere case and the dead-trend-endpoint case.
1.0 — listing and input form reworded, 2026-10-11
No behaviour, output or price changed; the same inputs return the same rows.
Title unchanged — its phrases hold #1 ("agoda prices", "agoda prices scraper"), #2 ("agoda availability", "hotel rates availability") and #3 ("agoda hotel rates") in Store search today. Description rewritten in the shape an agent reads: what it prices and by which input, "One row per hotel:" and its eight most asked fields, the price calendar with its cheapest dates, the filters that run before billing, and two native nouns for Agoda's home markets (ราคาโรงแรม, ホテル料金). The old text's "cheapest nightly and total price" and "every property in a destination" said nothing about dates, the calendar or sold-out rows.
The input form is reordered: what to price (locationQueries, hotelIds, hotelNames, startUrls), the stay and guests, then how many hotels, sort and the four pre-billing filters, calendarDays, includeSoldOut, locale; proxy and pacing below the fold. Nothing was renamed or removed. Every input now says what to pass, with an example value, its default, what 0/empty means and what it costs: maxHotelsPerQuery says that 0 and any value above about 1,800 end at the 40-page limit (the old text said "every property"), that filters apply before the cap and that 45 is one page; calendarDays says it reads only named hotels, at your nights and adults, and gives the cost arithmetic; minStars says unrated properties are dropped and points to minReviewScore; startUrls says a property page is read once to find its id.
The pricing text lists what is never charged (sold-out properties, filtered rows, a property reached twice, places that match nothing, calendar dates without a price, status rows, bad input), that there is no start fee, and that a run stops at the maximum cost you set (maxTotalChargeUsd). Prices unchanged.
seoDescription: the Store search surface now also carries "rates", "price calendar", "cheapest hotels", "hotel price tracking", "API" and the native nouns ราคาโรงแรม, ホテル 料金, 호텔 가격, 酒店价格.
README: a section "Agoda scraper for AI agents" mapping common requests to the exact input, with the output row, the status rows and the empty-result contract.
2026-08-30
Reliability: a run that cannot act on its input — a URL from the wrong site, a name nothing resolves to, an empty target list, a number outside the documented range — now ends cleanly with the reason on the run card instead of as a failed run. Nothing is charged in either case; a blocked or throttled source still fails loudly.
Store listing: moved into the categories buyers actually browse (the old Business category has no Store page).
1.0 — 2026-08-29
First release.
Agoda hotel prices for exact dates, guests and rooms: every property Agoda lists for a destination, or the hotels you name by URL, id or name — the same citySearch answer agoda.com's own results page reads, with synchronous set so one call returns priced rows.
One hotel row per property with the cheapest rate: nightly and total price with and without taxes, crossed-out price, rooms left, cancellation term, benefit ids, supplier, stars, combined and Agoda-only guest scores, area, country and coordinates.
Named properties are priced with one small request each (Agoda's extraHotels slot), so a comp set of a hundred hotels is a hundred 3 KB answers.
Optional price calendar per named property (calendarDays): one calendar row per check-in date Agoda has a price for, with its Low/Normal/High flag and the cheapest date ranked first.
Filters that run before billing: maxPrice, minStars, minReviewScore, freeCancellationOnly. Sold-out properties are free (and hidden unless includeSoldOut).
Every property is delivered once per run however many inputs reach it; an unknown destination fails in one call instead of retrying.
Pay per priced hotel row and per calendar day; status rows are free.