Agoda Hotel Listings Extractor
Pricing
from $1.99 / 1,000 results
Agoda Hotel Listings Extractor
Agoda scraper that pulls hotel listings from any Agoda city search, with nightly prices, star ratings, guest review scores, coordinates and photos, so revenue managers and travel researchers can track rates without checking Agoda by hand.
Pricing
from $1.99 / 1,000 results
Rating
0.0
(0)
Developer
Kawsar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Agoda Hotel Listings Extractor: Scrape Agoda Hotel Prices, Ratings and Reviews
Agoda hotel listings extractor that pulls hotel search results from Agoda for any city and date range. Every record carries the nightly price, star rating, guest review score, review count, GPS coordinates, photos, amenities and nearby landmarks. Give it a city name, an Agoda search URL or a numeric Agoda city ID and it pages through the listings until it hits your limit.
This Agoda scraper talks to the same search API the website uses, so the prices match what a traveller would see for your dates, occupancy and currency. No browser, no rendering, just the JSON behind the page.
Use cases
- Hotel rate shopping: track what competitors charge per night across a city and spot when they discount
- Revenue management: build a nightly rate history for your own property and its comp set
- Travel affiliate sites: fill destination pages with fresh hotel data, review scores and photos
- Market research: measure supply by star rating, neighbourhood and property type before entering a market
- SEO and content teams: generate "best hotels in X" pages backed by real review scores and prices
- Price monitoring: schedule daily runs and alert on rate drops through Apify integrations
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
searchTerms | array | none | City or destination names, one per line. Each name is matched to an Agoda city automatically. |
searchUrls | array | none | Agoda search URLs. Dates, guests and rooms are read from the URL when present. |
cityIds | array | none | Numeric Agoda city IDs for repeat runs where the ID is already known. |
checkIn | string | today + 30 days | Check-in date in YYYY-MM-DD format. |
checkOut | string | check-in + nights | Check-out date in YYYY-MM-DD format. |
nights | integer | 1 | Length of stay used when no check-out date is given. |
adults | integer | 2 | Adults per room, which changes the rates Agoda returns. |
children | integer | 0 | Children in the booking. |
childAges | array | none | Age of each child, required when the children count is above zero. |
rooms | integer | 1 | Number of rooms to price. |
currency | string | USD | Currency for every price field. 20 currencies supported. |
language | string | en-gb | Locale for hotel names, area names and review text. |
sortBy | string | recommended | Recommended, price low to high, price high to low, guest rating or secret deals. |
maxResults | integer | 100 | Maximum hotels collected per destination, capped at 1000. |
minStarRating | integer | 0 | Keep only properties at or above this star rating. |
minReviewScore | integer | 0 | Keep only properties at or above this guest rating out of 10. |
minPricePerNight | integer | 0 | Lowest nightly rate to include. |
maxPricePerNight | integer | 0 | Highest nightly rate to include. 0 means no ceiling. |
accommodationTypeIds | array | none | Agoda accommodation type IDs, for example 34 for Hotel and 29 for Apartment. |
facilityIds | array | none | Agoda facility IDs, for example 93 for Swimming pool and 92 for Gym. |
includeUnavailable | boolean | true | Keep sold out properties for full market coverage. |
includeImages | boolean | true | Collect photo URLs. |
maxImages | integer | 5 | Photos kept per property. |
includeReviewSnippets | boolean | false | Add quoted guest reviews and location topics. |
includeLandmarks | boolean | true | Add nearby transport, attractions and beaches with distances. |
keepEmptyFields | boolean | false | Keep fields Agoda had no value for as nulls instead of leaving them out. |
requestTimeoutSecs | integer | 60 | Timeout for a single request to Agoda. |
timeoutSecs | integer | 600 | Time budget for the whole run. |
maxRetries | integer | 3 | Retries per failed request. |
proxyConfiguration | object | Datacenter (Anywhere) | Proxy type and location for requests. Supports Datacenter, Residential, Special and custom proxies. Optional. |
Example input
{"searchTerms": ["New York", "Bangkok"],"checkIn": "2026-09-19","nights": 2,"adults": 2,"rooms": 1,"currency": "USD","sortBy": "guestRating","maxResults": 200,"minStarRating": 3,"minReviewScore": 8,"maxPricePerNight": 400,"includeReviewSnippets": true,"proxyConfiguration": { "useApifyProxy": true }}
What data does this actor extract?
Results land in an Apify dataset, one record per hotel. A trimmed example:
{"propertyId": 6950509,"hotelName": "Pod Times Square","hotelUrl": "https://www.agoda.com/pod-times-square/hotel/new-york-ny-us.html","propertyTypeName": "Hotel","starRating": 3.0,"reviewScore": 8.6,"reviewCount": 3184,"price": 287.28,"priceWithTaxes": 362.99,"totalPrice": 287.28,"currencyCode": "USD","isAvailable": true,"freeCancellation": true,"payLater": true,"roomsLeft": 5,"checkInDate": "2026-09-19","checkOutDate": "2026-09-20","countryName": "United States","cityName": "New York (NY)","cityId": 318,"areaName": "Times Square","latitude": 40.7584,"longitude": -73.9931,"distanceFromCityCenterMeters": 0.0,"mainImageUrl": "https://pix8.agoda.net/hotelImages/6950509/-1/07ddf14f1f7c52b335a183348996e549.jpg","highlightedFeatures": ["Free Wi-Fi in all rooms!", "Gym/fitness", "Close to public transportation"],"roomFacilities": ["Wi-Fi [free]", "Openable window", "Balcony/terrace", "Desk"],"cheapestRoomSizeSqm": 11.0,"atmospheres": ["shopping", "sightseeing", "nightlife", "restaurants"],"nearbyTransport": [{ "name": "42nd Street Subway Station", "distanceMeters": 180.4 }],"isSponsored": false,"listingRank": 1,"searchCityName": "New York (NY)","totalHotelsInSearch": 483,"scrapedAt": "2026-08-10T12:44:02.118342+00:00"}
| Field | Type | Description |
|---|---|---|
propertyId | integer | Agoda property ID, stable across runs and useful as a join key |
hotelName | string | Property name in the selected language |
hotelUrl | string | Direct link to the Agoda property page |
propertyTypeName | string | Hotel, Resort, Apartment, Hostel and similar |
starRating | number | Star rating from 0 to 5, half stars included |
reviewScore | number | Agoda guest review score out of 10 |
reviewCount | integer | Number of Agoda reviews behind the score |
reviewSources | array | Score and review count from every connected review provider |
reviewSnippets | array | Quoted guest reviews with reviewer, country, date and rating |
locationTopics | array | Review snippets grouped by topic, currently location |
price | number | Cheapest nightly rate per room before taxes and fees |
priceWithTaxes | number | Cheapest nightly rate per room including taxes and fees |
crossedOutPrice | number | Original rate shown struck through before the discount |
totalPrice | number | Total stay cost for all rooms and nights before taxes |
discountPercent | number | Discount off the crossed out rate |
currencyCode | string | Currency of every price field |
isAvailable | boolean | Whether rooms are bookable for the searched dates |
freeCancellation | boolean | Whether the cheapest rate cancels free of charge |
payAtHotel | boolean | Whether payment on arrival is offered |
roomsLeft | integer | Rooms remaining at the cheapest rate |
countryName | string | Country the property sits in |
cityName | string | City name as Agoda labels it |
cityId | integer | Agoda city ID, reusable as input for later runs |
areaName | string | Neighbourhood or district |
latitude | number | Latitude in decimal degrees |
longitude | number | Longitude in decimal degrees |
distanceFromCityCenterMeters | number | Straight line distance from the city centre |
mainImageUrl | string | Primary property photo |
imageUrls | array | Additional photo URLs |
highlightedFeatures | array | Features Agoda highlights, such as free Wi-Fi |
roomFacilities | array | Facilities listed for the cheapest room |
atmospheres | array | Neighbourhood tags such as shopping or nightlife |
nearbyTransport | array | Stations and stops with distance in metres |
nearbyLandmarks | array | Attractions with distance in metres |
isSponsored | boolean | Whether the listing is a paid placement |
listingRank | integer | Position in the Agoda result list for the chosen sort |
totalHotelsInSearch | integer | Total properties Agoda reports for the search |
scrapedAt | string | UTC timestamp of collection |
The full field list, including sustainability flags and whole-home room counts, is in the dataset schema.
Why some fields are missing from a record
47 fields appear on every hotel. The rest depend on what Agoda knows about that property, so the key is left out rather than written as null. A hotel that is not discounted has no crossedOutPrice or discountPercent, a sold out hotel has no price or roomsLeft but does get soldOutAveragePrice, and bedrooms, bathrooms and beds only turn up on apartments and whole-home stays. Measured over 135 hotels across New York, Bangkok and Dubai:
| Field | Present |
|---|---|
nearbyTransport, reviewSnippets, bookingsToday, atmospheres | 95% to 99% |
price, priceWithTaxes, totalPrice, roomsLeft, roomFacilities | 90% |
nearbyLandmarks, locationTopics | 77% to 81% |
crossedOutPrice, discountPercent, cheapestRoomSizeSqm | 72% to 73% |
nearbyBeaches | 33% |
goldCircleAwardYear | 20% |
soldOutAveragePrice | 8% |
bedrooms, bathrooms, beds | under 2% |
Set keepEmptyFields to true if you would rather have every field on every record with nulls in the gaps, which is easier to load into a fixed database schema.
How it works
- Every destination name is matched to an Agoda city ID through Agoda's own destination lookup, so "New York" becomes city 318. Search URLs and raw city IDs skip this step.
- Your dates, occupancy, currency and filters are turned into an Agoda search request. Star rating, review score, price range, property type and facility filters run on Agoda's side, so filtered runs cost less.
- The actor pages through results, 45 hotels at a time, until it reaches your
maxResultslimit or the end of the listings. - Each property is flattened into one dataset record with prices, ratings, location, photos and amenities.
- Failed requests retry with a backoff, and a bad listing is logged and skipped instead of ending the run.
FAQ
How do I scrape hotels for a specific city? Type the city name into Destinations, for example "Bangkok" or "Cox's Bazar". You can also paste an Agoda search URL, and the actor reads the city, dates, guests and rooms straight from it.
Do the prices match what I see on Agoda? Prices come from the same search API the website uses, for the dates, occupancy and currency you set. Rates move constantly, so a run captures the market at that moment. Schedule repeat runs if you need a price history.
How many hotels can one run collect?
Up to 1000 per destination, and you can queue several destinations in one run. Large cities like Bangkok list thousands of properties, so set maxResults to what you actually need.
Can I filter by star rating, review score or price? Yes. Star rating, guest score, price range, accommodation type and facilities are all sent to Agoda as search filters, so the actor only downloads properties that already match.
Does this actor need a proxy? It runs without one, but Apify Proxy is recommended for larger jobs. Datacenter proxies are fast and cheap, and Residential proxies help when a datacenter IP gets rate limited.
Why does one record have fewer fields than another?
A field is left out when Agoda has no value for it on that property, so a hotel without a discount carries no crossedOutPrice. Turn on keepEmptyFields to get nulls in those slots instead. CSV and Excel exports are unaffected either way, since Apify builds the column list from all records.
Can I get hotel facilities like pool and parking?
Room level facilities come through in roomFacilities, and Agoda's own highlights land in highlightedFeatures. The full property amenity list is not part of the search response, it lives on the individual hotel page. You can still filter searches by facility using facilityIds.
Can I get guest reviews too? Turn on Include guest review snippets to add short quoted reviews with the reviewer name, country, date and rating, plus location topic snippets.
Integrations
Connect Agoda Hotel Listings Extractor with other apps and services using Apify integrations. You can integrate with Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and many more. You can also use webhooks to trigger actions whenever results are available.
Point the Agoda scraper at a city, set your dates, and you get a clean hotel dataset with prices, ratings and reviews ready to load wherever you work.