
Global Sources Supplier Scraper
scrape.ly/store/cornerledger/globalsources-scraperLead generationE-commerce
2 monthly users

Scrape Agoda hotels by destination or URL: prices, discounts, star ratings, review scores, addresses, coordinates, amenities, room types and guest reviews. No login needed.
Get Agoda hotel data for any city or hotel page: nightly prices, crossed-out prices and discounts, free cancellation, star ratings, guest scores, addresses, map coordinates, amenities, every room type with its prices, and guest reviews. You don't need a login or a browser. It reads Agoda's own JSON endpoints, so a page of 100 hotels comes back in a second or two.
Bangkok, Paris), or paste Agoda hotel or search URLs.| Field | What it does |
|---|---|
destinations | City names to search, as typed on Agoda. |
startUrls | Agoda hotel page URLs (full details) or search / city URLs. Dates and guests in the URL are respected. |
maxItems | Hotels to save per destination or URL (default 20). |
checkIn, checkOut | Stay dates (YYYY-MM-DD). Empty means one night, two weeks from today. |
adults, children, childAges, rooms | Who is traveling. |
currency, language | Price currency (USD, EUR, THB, ...) and content language. |
sortBy | Best match, price, review score or stars. |
starRatings, minReviewScore, maxReviewScore, minPrice, maxPrice | Filters. |
includeSoldOut | Also keep hotels without availability for your dates. |
includeDetails | Add description, full address, all amenities, check-in times and room types to search results. |
includeReviews, maxReviewsPerHotel, reviewsSort | Guest reviews per hotel. Agoda has no oldest-first order, so "Oldest first" reads all of a hotel's reviews and keeps the oldest; it is slower on hotels with many reviews. |
{
"destinations": ["Bangkok"],
"maxItems": 20,
"checkIn": "2026-12-01",
"checkOut": "2026-12-03",
"adults": 2,
"rooms": 1,
"currency": "USD",
"sortBy": "recommended",
"starRatings": ["4", "5"],
"includeReviews": true,
"maxReviewsPerHotel": 10
}
Each row is one hotel.
| Field | Description |
|---|---|
propertyId, name, url, propertyType | Agoda hotel ID, name, page URL (with your dates) and type. |
starRating, reviewScore, reviewCount, reviewSubscores | Stars, guest score out of 10, number of reviews, and cleanliness, location and other subscores (with details). |
address, location | Area, city, country (plus street, postal code and full address with details), latitude and longitude. |
pricePerRoomPerNight, pricePerRoomPerNightInclTaxes, pricePerBook, pricePerBookInclTaxes | Lowest price per room per night and for the whole stay, without and with taxes and fees. |
originalPrice, discountPercent, priceCurrency | Crossed-out price, discount and currency. |
freeCancellation, freeCancellationUntil, payLater, payAtHotel, availableRooms | Booking conditions for the cheapest offer. |
roomOffers | Offers found in search results (or every room offer for hotel URLs). |
amenities, facilityGroups | Highlighted amenities, or every facility grouped by category with details. |
roomTypes | With details: name, size, view, beds, max occupancy, amenities, photos and offers (price, taxes, total, breakfast, cancellation policy). |
description, checkInFrom, checkOutUntil, usefulInfo | With details. |
nearbyLandmarks, distanceFromCityCenterKm | Nearby stations, landmarks and beaches with distances. |
image, images | Photo URLs. |
isSponsored, isSecretDeal | Whether the search result was an ad or a secret deal (Agoda hides the hotel name on secret deals). |
reviews | With reviews on: rating, title, text, positives, negatives, date, stay month, traveler type, room type, nights, reviewer display name, country, source site, hotel response. |
checkIn, checkOut, nights, adults, children, rooms, searchQuery, cityId, scrapedAt | The search the row came from. |
Here's a trimmed example from a test run. The review has been replaced with a made-up one in the same shape.
{
"propertyId": 10603,
"name": "PARKROYAL COLLECTION Marina Bay, Singapore",
"url": "https://www.agoda.com/marina-mandarin-singapore-hotel/hotel/singapore-sg.html?checkIn=2026-10-29&los=1&rooms=1&adults=2&children=0¤cy=SGD",
"propertyType": "Hotel",
"starRating": 5.0,
"reviewScore": 8.9,
"reviewScoreText": "Excellent",
"reviewCount": 24517,
"reviewSubscores": {"cleanliness": 8.9, "facilities": 8.8, "location": 9.2, "roomComfort": 8.3, "staffPerformance": 8.8, "valueForMoney": 8.4},
"address": {
"full": "6 Raffles Boulevard Marina Square, Marina Bay, Singapore, Singapore, 39594",
"street": "6 Raffles Boulevard Marina Square",
"postalCode": "39594",
"area": "Marina Bay",
"city": "Singapore",
"country": "Singapore",
"countryCode": "SG"
},
"location": {"latitude": 1.2911007404327393, "longitude": 103.85770416259766},
"isAvailable": true,
"pricePerRoomPerNight": 549.0,
"pricePerRoomPerNightInclTaxes": 658.25,
"pricePerBook": 549.0,
"pricePerBookInclTaxes": 658.25,
"originalPrice": 610.0,
"discountPercent": 10.0,
"priceCurrency": "SGD",
"freeCancellation": true,
"freeCancellationUntil": "2026-10-27T00:00:00.000+07:00",
"payLater": true,
"availableRooms": 26,
"amenities": ["Gym/fitness", "Spa", "Swimming pool [outdoor]", "Bar", "Restaurants", "Front desk [24-hour]"],
"roomTypes": [
{
"name": "Lifestyle Premier Twin Room",
"size": "33 m²/355 ft²",
"beds": "2 single beds",
"maxOccupancy": 2,
"lowestPrice": 549.0,
"offers": [
{"price": 549.0, "priceInclTaxes": 658.25, "totalPrice": 658.25, "currency": "SGD", "freeCancellation": false, "breakfastIncluded": false}
]
}
],
"image": "https://pix8.agoda.net/hotelImages/10603/0/9b08ae7ef919f0f09834adb33fd70a81.jpeg?ce=3",
"reviews": [
{
"rating": 9.2,
"title": "Great view and friendly staff",
"text": "Room overlooking the bay, quick check-in and a good breakfast.",
"reviewDate": "2026-10-02T10:15:00+08:00",
"travelerType": "Couple",
"reviewerName": "Alex",
"reviewerCountry": "Australia",
"source": "Agoda"
}
],
"checkIn": "2026-10-29",
"checkOut": "2026-10-30",
"nights": 1,
"adults": 2,
"searchQuery": "Singapore, Singapore",
"cityId": 4064
}
You pay $4.00 per 1,000 hotels ($0.004 per hotel). Guest reviews, when you turn them on, cost $2.00 per 1,000 reviews. Platform usage (compute and proxy traffic) is billed on top at normal rates and is small. A search for 1,000 hotels uses a few MB of datacenter traffic.
Examples:
Is it legal to scrape Agoda? The scraper reads public hotel pages that anyone can see without logging in. You're responsible for how you use the data: follow Agoda's terms and the privacy laws that apply to you, especially for review text.
Do I need an Agoda account or my own proxy? No. The built-in datacenter proxy works. If Agoda ever blocks it, the scraper switches to residential proxies by itself.
How many hotels can I get? Agoda lists up to a few thousand hotels per big city (for example, about 6,300 in Bangkok). Set the limit as high as you like; the run stops when Agoda has no more hotels for the search. Add more destinations to get more.
Why are some fields empty? Agoda doesn't publish every field for every hotel. Sold-out hotels have no price, and secret deals hide the hotel name. The full address, description and room types appear only with hotel details on, or for hotel URLs.
Are the prices for my dates and currency? Yes. pricePerRoomPerNight is before taxes and fees, and pricePerRoomPerNightInclTaxes is the all-in price Agoda shows at checkout. Prices come from Agoda for the stay, guests and currency you set. Room-type prices are converted with Agoda's own rate for the same hotel.
Can I schedule it or use the API? Yes. Schedule runs to track prices every day, and read the results through the API or the integrations.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
destinationsarrayOptionalDestinations
Cities to search, as you would type them on Agoda (e.g. Bangkok, Paris, New York). Each destination returns up to Max results hotels.
startUrlsarrayOptionalAgoda URLs
Agoda hotel page URLs (full details, room types and prices) or Agoda search / city URLs (search?city=...). Dates and guests in a URL override the settings below.
maxItemsintegerOptionaldefault 20Max results per destination or URL
How many hotels to save for each destination or search URL. Agoda lists up to a few thousand hotels per big city.
Dates, guests, rooms, currency and language. Empty dates mean a one-night stay two weeks from today.
checkInstringOptionalCheck-in date
YYYY-MM-DD. Empty means 14 days from today.
checkOutstringOptionalCheck-out date
YYYY-MM-DD. Empty means one night after check-in.
adultsintegerOptionaldefault 2Adults
Number of adult guests.
childrenintegerOptionaldefault 0Children
Number of children.
childAgesarrayOptionalChildren's ages
Age of each child (0-17), one per line. Missing ages count as 8.
roomsintegerOptionaldefault 1Rooms
Number of rooms.
currencystringOptionaldefault "USD"Currency
Three-letter currency code for all prices, e.g. USD, EUR, GBP, THB, JPY.
languageenumOptionaldefault "en-us"Language
Language of hotel names, descriptions and amenities.
sortByenumOptionaldefault "recommended"Sort by
Order of the search results.
starRatingsarrayOptionalStar ratings
Only hotels with these star ratings. Empty means all.
minReviewScoreintegerOptionalMinimum review score
Only hotels with at least this guest score (0-10).
maxReviewScoreintegerOptionalMaximum review score
Only hotels with at most this guest score (0-10).
minPriceintegerOptionalMinimum price per night
Lowest nightly room price in the chosen currency.
maxPriceintegerOptionalMaximum price per night
Highest nightly room price in the chosen currency.
includeSoldOutbooleanOptionaldefault falseInclude sold-out hotels
Also save hotels that have no rooms left for your dates (they have no price).
includeDetailsbooleanOptionaldefault falseAdd hotel details to search results
Open each hotel found by a search to add its description, full address, all amenities, check-in times and every room type with prices. Slower. Hotel URLs always get details.
includeReviewsbooleanOptionaldefault falseAdd guest reviews
Save guest reviews (score, title, text, date, traveler type, country) with each hotel. Each review is billed separately.
maxReviewsPerHotelintegerOptionaldefault 20Max reviews per hotel
How many reviews to save for each hotel when reviews are on.
reviewsSortenumOptionaldefault "newest"Review order
Which reviews come first.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy used to reach Agoda. Datacenter works; the scraper switches to residential by itself if Agoda blocks it.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| image | any | Photo |
| name | any | Hotel |
| starRating | any | Stars |
| reviewScore | any | Score |
| reviewCount | any | Reviews |
| pricePerRoomPerNight | any | Price / night |
| originalPrice | any | Was |
| discountPercent | any | Discount % |
| priceCurrency | any | Currency |
| freeCancellation | any | Free cancel |
| address.area | any | Area |
| address.city | any | City |
| address.country | any | Country |
| propertyType | any | Type |
| checkIn | any | Check-in |
| checkOut | any | Check-out |
| url | any | Agoda URL |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Hotel | One Agoda hotel saved to the dataset. | $0.004 |
| Review | One guest review saved with a hotel (only when reviews are turned on). | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('roamandroof/agoda-scraper').call({
"destinations": [
"Bangkok"
],
"startUrls": [
{
"url": "https://www.agoda.com/kromo-bangkok-curio-collection-by-hilton/hotel/bangkok-th.html"
}
],
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run roamandroof/agoda-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=roamandroof/agoda-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Hotel list with prices in EUR.
Cheapest upscale hotels first.
Hotel details plus 5 recent reviews per hotel.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.