Agoda Search Scraper avatar

Agoda Search Scraper

Pricing

from $1.20 / 1,000 property-listeds

Go to Apify Store
Agoda Search Scraper

Agoda Search Scraper

Scrape Agoda search results for any destination and dates. Just add a city, area or Agoda URL and get every property with nightly and stay prices with and without tax, review score, stars, coordinates, cancellation deadline, pay-later, breakfast and rooms left. $4.00 per 1,000 properties.

Pricing

from $1.20 / 1,000 property-listeds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Categories

Share

What is Agoda Search Scraper?

Agoda Search Scraper gives you Agoda's search results as data, with 26 filters to shape them: the 17 on Agoda's own search page, applied by Agoda, and nine more on price, score and availability. You type a city, an area or a landmark, set your dates, and get the properties Agoda is selling for that stay, each priced with and without tax.

Agoda is a major booking site, especially across Asia, and it lists hotels and homes worldwide. A city id or a search URL copied from your browser works as a destination too.

What you get that a plain listing scrape doesn't:

  • Filters that do what they say. 61 of 61 live checks on the inputs and filters passed on 7 October 2026. Where Agoda's own location and "excellent for" filters let through a property whose card shows a lower score, that row is removed too.
  • Tax on both sides. Each priced row has the nightly and stay price including every tax and fee, and Agoda's own pre-tax figures beside them. Nothing is calculated.
  • Only real results. When few properties match, Agoda pads the page with places from a neighbouring town or outside your filters. One measured search had 26 real matches and 17 of these fillers. You get the 26.
  • A feed of what moved. Name a price memory, switch on "Only new or changed prices", and a scheduled run returns just the properties that are new or repriced. The unchanged ones aren't charged.
  • Speed. Four cities at 250 properties each, 1,000 rows, took 10 to 12 seconds when Agoda answered promptly.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 66 of 66 live checks on its inputs and filters passed on 7 October 2026
  • 7 destinations run the same day in 7 countries: 175 properties, none empty
  • Charges checked against the 175 rows
  • A place name that matches nothing where you said gets a free row listing what Agoda suggests

In each row you can:

  • Read the review score, review count, star rating and property type
  • See the crossed-out price and discount message when Agoda discounts a property
  • Check the free-cancellation deadline, pay-later and pay-at-hotel eligibility, breakfast and rooms left
  • Get what the search card shows beside the price: distance to the city centre, nearby stations and landmarks in metres, the location score, highlights and campaign badges
  • Price any party size, children's ages included, in any currency Agoda supports
  • Find out why a destination couldn't be reached, from a row that says so

What data do you get for each property?

🏨 Property name and Agoda id🔗 Property URL
⭐ Star ratingReview score and review count
💷 Nightly price and stay totalPrices excluding tax, and whether the price includes tax
Crossed-out price and discount messageCurrency
📍 Area, city, country and coordinatesRooms left
Free cancellation and its deadlinePay later and pay at hotel
🍳 Breakfast includedProperty type and sponsored flag
🖼 Main imageHighlighted facilities
Distance from the city-centre zone🚉 Nearby stations and landmarks, in metres
Location score and score breakdownHighlights and campaign badge
📈 Price change since the last runTimestamp of the scrape

How to scrape Agoda search results

It's a form. You don't write any code, and the result downloads as a spreadsheet.

  1. Create a free Apify account and open Agoda Search Scraper.
  2. Add one or more destinations: "Paris", "Times Square", "Eiffel Tower", an Agoda city id, or a search URL from your browser.
  3. Set your dates and guests, pick a currency and a sort order, and tick the filters you'd tick on Agoda.
  4. Click Start. A 10-property search took 3 to 4 seconds in the measured runs below.
  5. Download the properties as Excel or CSV, or as JSON, XML or HTML.

⬇️ Input

Give it destinations by name: a city ("Paris"), an area ("Times Square", "Sukhumvit") or a landmark ("Eiffel Tower"). An Agoda city id works, and so does a search URL pasted from your browser. City, area and landmark URLs are all read, and a URL's own dates and guests are used for that destination.

Dates are either fixed ("Check-in date" and "Check-out date") or rolling ("Check-in days ahead" and "Nights"), which is what you want on a schedule. The rest is optional.

You have two limits. "Max results per destination" (1 to 5,000, default 100) applies to each destination separately: ten destinations at 50 each returns 500. "Maximum results for the whole run" caps the run as a whole, and nothing past it is fetched or charged for.

A city for two nights, cheapest first

{
"destinations": ["Paris"],
"checkIn": "2026-11-18",
"checkOut": "2026-11-20",
"adults": 2,
"currency": "USD",
"sort": "price_low_to_high",
"maxResultsPerDestination": 100
}

A city, a district and a second city: four and five star hotels with free cancellation

{
"destinations": ["Paris", "Times Square", "Bangkok"],
"checkIn": "2026-11-18",
"checkOut": "2026-11-20",
"adults": 2,
"currency": "USD",
"sort": "review_score",
"stars": ["4", "5"],
"freeCancellationOnly": true,
"maxResultsPerDestination": 100
}

A rolling window with a price ceiling and a family party

{
"destinations": ["Bangkok"],
"checkInDaysAhead": 30,
"nights": 3,
"adults": 2,
"childrenAges": [7, 4],
"rooms": 1,
"currency": "GBP",
"maxPricePerNight": 150,
"minReviewScore": 8
}

A daily price monitor that returns only what moved

{
"destinations": ["New York"],
"checkInDaysAhead": 60,
"nights": 2,
"currency": "USD",
"maxResultsPerDestination": 200,
"priceStoreName": "new-york-prices",
"onlyNewOrChanged": true
}

Around a landmark, inside the city centre, with a bathtub, free cancellation and payment at the hotel

{
"destinations": ["Eiffel Tower"],
"checkInDaysAhead": 45,
"nights": 2,
"distanceToCenter": ["inside"],
"roomAmenities": ["bathtub"],
"paymentOptions": ["free_cancellation", "pay_at_hotel"],
"minLocationScore": "9"
}

The filters

Tick several values in one filter and you get properties matching any of them, as on the site.

FieldWhat it does
stars, accommodationTypes, hotelBrands, hotelNameStar class (Agoda Luxe included), property type, brand, and part of the property name. Applied by Agoda.
distanceToCenter, minLocationScore, excellentForDistance to the centre, minimum location rating, and Agoda's "Excellent cleanliness / service / value for money / location / facilities / room quality" filters. Applied by Agoda.
paymentOptions, roomOffers, kidsStayFreeFree cancellation, pay later, pay at hotel and the like, room offers such as breakfast or airport transfer, and kids stay free. Applied by Agoda.
propertyFacilities, roomAmenities, bedTypes, goodForFacilities, in-room amenities, bed type, and who the property suits. Applied by Agoda.
minBedrooms, minBathrooms, minBedsFor homes and larger parties. Applied by Agoda.
productTypeHotels, homes, or both.
minReviewScore, minReviewCountA floor on the guest score and on how many reviews stand behind it.
minPricePerNight, maxPricePerNightA price band per room per night.
freeCancellationOnly, breakfastOnly, excludeSponsoredKeep refundable or breakfast-included offers, and drop sponsored placements.
onlyAvailableOn by default. Switch it off to include sold-out or unpriced properties.
includeNearbySuggestionsOff by default. Switch it on to keep Agoda's padding suggestions, each marked isOutsideSearch.
sortrecommended, price_low_to_high, price_high_to_low, review_score, stars_high_to_low, stars_low_to_high or distance_from_center.

For developers

  • maxResultsPerDestination is the per-destination limit and maxItems the run-wide one (0 means no limit).
  • Agoda returns up to 100 properties per request. A deeper maxResultsPerDestination means more requests, read in order.
  • priceStoreName names the storage that remembers the last price per property. With onlyNewOrChanged on, the next run returns only new or moved rows and fills previousPricePerNight, previousScrapedAt, priceChange and priceChangePct. Use one name per watchlist.
  • maxConcurrency (Parallel requests, default 8, 1 to 32) sets how many requests run at once. The default suits nearly every run.
  • delayMs (Delay between requests, default 0) adds a pause before each request, in milliseconds. Values above 2000 are treated as 2000. We'd leave it at 0.
  • Destinations in one run are searched at the same time. Rows are saved as they arrive, and if the platform restarts a run part-way, the properties already delivered are neither repeated nor charged again.
  • input on each row is the destination exactly as you entered it, which lets you match rows from a long list back to it.

⬆️ Output

One row is one property for one stay. You can view the dataset as a table, as JSON or on a map in the Output tab.

{
"input": "Paris", "destination": "Paris", "destinationType": "city", "destinationCountry": "France", "destinationId": 15470, "destinationCityId": 15470, "isOutsideSearch": false,
"id": "7266", "hotelId": 7266, "name": "Pullman Paris Tour Eiffel", "localName": "Pullman Paris Tour Eiffel",
"url": "https://www.agoda.com/pullman-paris-tour-eiffel_11/hotel/paris-fr.html",
"propertyType": "Hotel", "stars": 4, "isSponsored": false, "sponsoredType": "NoSponsored", "resultType": "NormalProperty",
"country": "France", "countryCode": "FR", "city": "Paris", "cityId": 15470, "area": "15th - Tour Eiffel - Porte de Versailles", "areaId": 58391,
"lat": 48.8555908203125, "lng": 2.292680025100708,
"rating": 8.5, "ratingScale": 10, "reviewCount": 6310,
"currency": "USD", "checkIn": "2026-11-06", "checkOut": "2026-11-08", "nights": 2,
"adults": 2, "rooms": 1, "childrenAges": [],
"isAvailable": true, "isSoldOut": false,
"pricePerNight": 476.12, "pricePerNightExcludingTax": 418.04, "pricePerNightListed": null,
"priceTotal": 952.24, "priceTotalExcludingTax": 836.08, "pricesIncludeTax": true,
"isFreeCancellation": true, "freeCancellationUntil": "2026-11-05", "cancellationType": "FreeCancellation",
"isPayLater": true, "isPayAtHotel": false, "isNoCreditCard": false, "isBreakfastIncluded": true, "benefitIds": [95, 1],
"supplierId": 29004, "roomsLeft": 255, "discountMessage": null,
"distanceToCenterKm": 0, "isInCityCenter": true, "facilities": ["Free Wi-Fi in all rooms!", "Gym/fitness"],
"highlights": ["Eiffel Tower Balcony Views", "On-site Frame Restaurant"], "campaignBadge": null,
"nearbyTransport": [{ "name": "Champ de Mars - Tour Eiffel RER Train Station", "distanceM": 259 }, { "name": "Bir-Hakeim Metro Station", "distanceM": 317 }],
"nearbyLandmarks": [{ "name": "Eiffel Tower", "distanceM": 336 }, { "name": "Champs-Elysees", "distanceM": 1958 }],
"locationScore": 9.3, "scoreBreakdown": { "cleanliness": 8.7, "facilities": 8.3, "location": 9.3, "roomComfort": 8, "staffPerformance": 8.5, "valueForMoney": 7.9 },
"image": "https://pix8.agoda.net/hotelImages/7266/0/35abd7670c3765b9d010edaa780a67af.jpeg?va=1&ce=3",
"engagement": "Booked 16 times today",
"previousPricePerNight": null, "previousScrapedAt": null, "priceChange": null, "priceChangePct": null,
"scrapedAt": "2026-10-07T13:12:12.931Z"
}

A few columns to know before you build on them:

  • distanceToCenterKm is how far the property is from the edge of Agoda's city-centre zone. 0 means it's inside, which isInCityCenter says outright.
  • propertyType is Agoda's own class for the listing: Hotel, NonHotel or SingleRoom.
  • facilities holds the one or two facilities Agoda highlights for the property, not its full list.
  • highlights, campaignBadge, nearbyTransport, nearbyLandmarks and locationScore are what Agoda's search card shows beside the price. scoreBreakdown is the guest rating by category.
  • destinationType says whether a row came from a city, area or landmark search.
  • destinationCountry is the country of the place your name resolved to. It's null when you gave a city id or a search URL.
  • pricePerNightListed is the crossed-out price. It's filled only on discounted properties: 4% of rows in a 175-property sample on 7 October 2026.
  • The four price-memory columns at the end stay null until a run reuses a price memory an earlier run filled.

How much does it cost?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
destination-resolved, per name resolved to a city$0.002$0.002$0.002$0.002
destination-checked, per destination given as a city id or link that returns no property$0.0005$0.0005$0.0005$0.0005
property-listed, per property returned$0.004$0.0036$0.0024$0.0012

Enterprise plans pay the Business price.

$4.00 per 1,000 properties on the Free plan, $1.20 on Business, with all fields included. That's the whole price: proxy usage and platform usage are part of it.

You pay for the rows you get. A property your filters remove is free, and so is one whose price hasn't changed when "Only new or changed prices" is on. Give a destination as an Agoda city id or a search URL and you skip the $0.002 resolution fee. If such a destination then returns no property at all, because every one was filtered out or nothing moved, it costs the $0.0005 destination-checked fee once.

  • Three cities by name, 100 properties each: $0.002 + 3 × $0.002 + 300 × $0.004 = $1.21 per run ($0.37 on Business).
  • A daily monitor of one city at 200 properties for a month, where about 40 prices move each day: 30 × ($0.002 + $0.002 + 40 × $0.004) = $4.92 for the month ($1.56 on Business).

The $5 of credits in Apify's Free plan each month covers about 12 searches of 100 properties each, roughly 1,200 properties, before you pay anything.

How many properties can you get, and how fast?

RunResult
Osaka, 2 nights, USD, 10 properties10 properties from one request in 3 to 4 seconds, each priced, with URL and coordinates
Osaka, 2 nights, APA Hotels only, up to 3027 properties from one request in 6 seconds
Bangkok, 2 nights, 100 properties100 properties, 6 of them sponsored placements
Osaka, Bangkok, Rome and Tokyo, 250 properties each1,000 properties in 10 to 12 seconds when Agoda answers promptly, 1 to 2 minutes in a busy hour
Bangkok, Tokyo, Paris and New York, 500 properties each2,000 properties in 23 to 56 seconds, depending on how fast Agoda answers

These are whole runs on Apify, measured on 1 and 2 October 2026. Agoda's own response time varies by the hour, and an occasional slow answer can add up to a minute.

Agoda returns up to 100 properties per request and a large city has thousands. "Max results per destination" (up to 5,000) decides how deep you go. Adding cities adds little time, because they're searched together. At the measured rates a one-hour run lists well over 100,000 properties.

Price monitoring, your own code and AI agents

The setup we'd recommend for rate shopping is the daily monitor: an Apify Schedule, a rolling check-in date, a price memory name and "Only new or changed prices". Each morning's dataset then holds only the hotels that moved, with the previous price and the change in money and percent. A webhook can push that into your revenue system, or the Google Sheets and Slack integrations can pass it to a team.

People also use the full list for market research on pricing and supply by area or star class, for building a hotel database with coordinates and review scores, for tracking discount depth and free-cancellation availability across a city, and for feeding metasearch or pricing models with dated inventory.

From code, one call runs a search and returns the rows:

POST https://api.apify.com/v2/acts/boncross~agoda-search/run-sync-get-dataset-items?token=YOUR_TOKEN

There's an apify-client package for Node.js and for Python. For an AI agent in Claude, ChatGPT, Cursor or LibreChat, add the Apify MCP server (mcp.apify.com) and reference the actor as boncross/agoda-search. The agent sends the destination and dates and gets the priced list back.

FAQ

Do I need proxies or an Agoda account?

Neither. Proxy usage is included in the price with nothing to set up, and the actor reads what Agoda shows a visitor who isn't signed in.

Are the prices tax-inclusive?

pricePerNight and priceTotal include every tax and fee, including any Agoda lists as paid at the property, and pricesIncludeTax is true on each priced row (null on a row with no price). pricePerNightExcludingTax and priceTotalExcludingTax are Agoda's own pre-tax figures for the same offer.

How do I search a district or a landmark and not the whole city?

Type its name, for example "Times Square" or "Eiffel Tower", or paste the Agoda search URL for it. An area is searched inside its city with Agoda's own area filter, and results stay inside the district. A landmark is searched the way Agoda's landmark page searches it, around the landmark.

My destination landed in the wrong place. What happened?

A name is read the way Agoda's own search box reads it, and some names exist in more than one country. Say which you mean with the city or country after a comma: "Montmartre, Paris", "Cambridge, MA", "Soho, London". If nothing Agoda suggests is in the place you named, you get an error row listing what it does suggest, and you aren't charged for it. An Agoda city id or a search URL names its place exactly and is searched as given. destination, destinationType and destinationCountry on each row show the place that was searched.

Why did a search return fewer properties than I asked for?

Usually because that's all there is. When fewer properties match than fit on a page, Agoda fills the rest with suggestions that don't match, such as places in a neighbouring town or hotels outside your filters. Those are left out. Switch on "Include nearby suggestions" if you want them, each marked isOutsideSearch: true.

How do I get only the prices that changed?

Give "Price memory store" a name and switch on "Only new or changed prices". The actor remembers the last price for each property and returns only new or moved rows on the next run. Unchanged properties aren't charged. A destination given as a city id or link where nothing changed costs the $0.0005 destination-checked fee alone.

Can I get the room name, or more than the cheapest offer?

Not from search. Agoda's search results hold each property's cheapest offer and don't name the room. Agoda Room Rates Scraper returns the full grid of rooms and rate plans for the hotels you pick.

The actor reads only what Agoda serves to any logged-out visitor, and hotel prices are public commercial data, not personal data. You're responsible for complying with Agoda's terms and applicable law in how you use the data.

What are the limits?

  • Prices are Agoda's public rates. Member-only rates need a login and aren't included.
  • With the cheapest-first or dearest-first sort, Agoda returns the cheapest (or dearest) properties but only roughly in that order. It ranks on its own display price, which can differ from the rate in the row.
  • "Rated excellent for" with room quality is Agoda's filter alone. The card has no room-quality score to check it against.
  • "Room offers" keeps properties that have a room offer with what you asked for. The price in the row is the cheapest offer, which may not include it.
  • Sponsored placements are included unless you switch on "Exclude sponsored listings". They were 6 rows in 100 in a measured Bangkok search, and sponsoredType says which kind of placement paid for the position.
  • Agoda's own accommodation type label isn't returned per row. propertyType is the class that's available. The "Property types" filter still works, because Agoda applies it.
  • facilities is the one or two facilities Agoda highlights, not the complete list.

More from BonCross

Your feedback

Seen a price that doesn't match Agoda's page, or a filter that let the wrong hotel through? Tell us on the Issues tab in Apify Console, with the destination and dates you used. We read every issue and answer there.