Hotel and vacation-rental price monitoring
Use Agoda endpoints to turn hotel and vacation-rental price monitoring into repeatable API requests with documented inputs and JSON responses.
Turn Agoda's Hotels, Homes & Apartments, Things To Do, and Flights results into structured JSON — city search, hotel and home listings with pricing, activity search and detail, and one-way flight search with segment amenities, sourced from Agoda's own internal APIs. Credential-free.
Search Agoda hotels, homes, activities, and flights and get detail and amenity data as structured JSON.
Endpoint families
4
Documented params
31
Examples
8
Live catalog snapshot
Active endpoints
8
Methods
GET, POST
Required params
15
Schema refs
8
{
"platform": "Agoda",
"endpoint": "agoda-hotels-search",
"method": "GET",
"path": "/agoda/hotels/search",
"auth": "apiKey"
}Use cases
Search Agoda hotels, homes, activities, and flights and get detail and amenity data as structured JSON.
Use Agoda endpoints to turn hotel and vacation-rental price monitoring into repeatable API requests with documented inputs and JSON responses.
Use Agoda endpoints to turn travel activity discovery into repeatable API requests with documented inputs and JSON responses.
Use Agoda endpoints to turn flight fare research into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Agoda endpoint catalog — 8 endpoints, 31 documented request parameters, and 8 published response schemas — the same catalog Docs and Playground run against.
8 documented Agoda endpoints, grouped into 4 request families — Flights, Activities and Hotels, plus 1 more.
31 request parameters are documented across those Agoda endpoints, 15 of them required — the full input contract is public before you write any integration code.
8 of the 8 Agoda endpoints ship a recorded example response, and 8 carry a documented response schema — you can code against the real JSON before the first request.
Agoda endpoints document their error responses (400, 404, 500 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
8 hosted MCP tools back the Agoda endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/agoda/flights/search-locations
/agoda/activities/search
/agoda/hotels/search
/agoda/homes/search
Endpoint catalog
/agoda/hotels/searchReturns hotel search results for an Agoda city: the matching property ids for that city plus a direct link to each property's listing page. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel search.
Response notes
- One of `city_id` or `city` is required; supplying neither returns `400` before any upstream request is made. An explicit non-positive `city_id` also returns `400`. An unknown/unresolvable city returns `404`. - Each result only carries `property_id` and a direct `source_url` — Agoda's own search does not reliably return richer inline content (name, rating, thumbnail) credential-free. Call the hotel-detail endpoint with each `property_id` for full hotel content. Example response: ```json { "code": 200, "msg": "OK", "data": { "city_id": 9395, "page": 1, "limit": 10, "count": 10, "properties": [ { "property_id": 10630, "source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=10630&city=9395" } ] } } ```
MCP tool agoda_hotels_search
/agoda/hotels/{property_id}Returns full hotel detail from Agoda: identity (name, any former name), an accommodation type code, address (street address, postal code, city, country), guest rating, a main photo, room count, hotel chain id, a long and short description, and short-form policy statements (minimum age, adult/child definitions, extra-bed and additional-room booking policy). Credential-free public data from Agoda's own hotel content source.
Response notes
- `property_id` must be numeric; a non-numeric or non-positive value returns `400` before any upstream request is made. - An unknown/nonexistent property id returns `404`. - `min_age` is an empty list on properties with no minimum-age policy on file; the other policy fields (`adult`, `extra_bed`, `additional`) are Agoda's own short display strings, not a structured rule schema. - `accommodation_type` is Agoda's own numeric property-type code. Known values: `34` (Hotel), `33` (Hostel), `37` (Resort), `120` (Apartment). - `main_image_url` is omitted when Agoda has no main photo on file for the property. Guest-review scores are not yet included in this response — see the endpoint's ongoing coverage notes for what is planned. Example response: ```json { "code": 200, "msg": "OK", "data": { "property_id": 10637, "display_name": "Baiyoke Sky Hotel", "accommodation_type": 34, "rating": 4, "address": { "city": {"id": 9395, "name": "Bangkok"}, "country": {"id": 106, "name": "Thailand"}, "address1": "222 Ratchaprarop Road, Ratchathewi", "postal_code": "10400" }, "main_image_url": "https://pix8.agoda.net/hotelImages/10637/-1/878a9b58ccd19eee41b98d20e388c080.jpg?ca=9&ce=1", "number_of_rooms": "659", "chain_id": 3603, "description_long": "Experience Luxury and Convenience at Baiyoke Sky Hotel. Welcome to Baiyoke Sky Hotel, a luxurious 4-star hotel located in the heart of Bangkok, Thailand...", "description_short": "Experience Luxury and Convenience at Baiyoke Sky Hotel.", "policy": { "adult": ["Guests 12 years and older are considered adults."], "extra_bed": ["Extra beds are dependent on the room you choose. Please check the individual room capacity for more details."], "additional": ["When booking more than 5 rooms, different policies and additional supplements may apply."] }, "source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=10637&city=9395" } } ```
MCP tool agoda_hotel_detail
/agoda/homes/searchReturns Homes & Apartments results for an Agoda city: full listing detail for every matching property whose accommodation type is Apartment, drawn from the same city search as hotel search and filtered to non-hotel accommodation types. Callers may supply a known Agoda city id or a free-text city name; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own hotel/home search.
Response notes
- One of `city_id` or `city` is required; supplying neither returns `400` before any upstream request is made. An unknown/unresolvable city returns `404`. - `homes` entries carry the same shape as the hotel detail endpoint's response, plus `accommodation_type`. Known `accommodation_type` values observed on Agoda: `34` (Hotel), `33` (Hostel), `37` (Resort), `120` (Apartment). This endpoint currently returns only `120` (Apartment) entries; broader vacation-home/villa coverage is a planned follow-up. - Because results are filtered down from a page of hotel-search candidates, `count` can be smaller than `limit` even when more matching homes exist on later pages — page forward with `page` to see more. Example response: ```json { "code": 200, "msg": "OK", "data": { "city_id": 9395, "page": 1, "limit": 10, "count": 1, "homes": [ { "property_id": 149146, "display_name": "Diamond Bangkok Apartment", "accommodation_type": 120, "rating": 3.5, "address": { "city": {"id": 9395, "name": "Bangkok"}, "country": {"id": 106, "name": "Thailand"} }, "source_url": "https://www.agoda.com/search?cid=-1&selectedproperty=149146&city=9395" } ] } } ```
MCP tool agoda_homes_search
/agoda/activities/searchReturns Agoda activities (tours, attractions, experiences) matching a free-text keyword and/or a city. When keyword is omitted, the resolved city's name is used instead to return a general listing of activities in that city. Callers may supply a known Agoda city id or a free-text city name for the city filter; when both are supplied city_id takes precedence. Credential-free public data from Agoda's own destination search.
Response notes
- At least one of `keyword`, `city_id`, or `city` is required; supplying none returns `400` before any upstream request is made. - `keyword` in the response echoes the actual search text used: the caller's own `keyword` when supplied, otherwise the resolved city name. - `city_id` filtering is best-effort: when a city filter is active, only activity results whose own city matches are kept. - A search with no matching activities returns `200` with an empty `activities` list, not an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "city_id": 9395, "keyword": "chim chum", "count": 1, "activities": [ { "activity_id": 1633875, "name": "Bangkok Chim Chum | Bangkok", "city_id": 9395, "city_name": "Bangkok", "categories": [{"id": 2, "code": "FOOD_AND_DRINKS", "is_primary": true}], "source_url": "https://www.agoda.com/search?cityId=9395&selectedActivity=1633875" } ] } } ```
MCP tool agoda_activities_search
/agoda/activities/{activity_id}Returns full activity detail from Agoda: title, description, stated duration, categories, and content images. Credential-free public data from Agoda's own activity content source.
Response notes
- `activity_id` must be numeric; a non-numeric or non-positive value returns `400` before any upstream request is made. - An unknown/nonexistent activity id returns `404`. - `duration` and `categories` are exactly as Agoda's own content API returns them (a display-oriented duration pair, not a structured min/max range; categories are Agoda's own category codes, e.g. `FoodAndDrinks`). - `images` is a best-effort list of content images (up to 10); an activity with no supplier-provided images returns an empty list. Example response: ```json { "code": 200, "msg": "OK", "data": { "activity_id": 1633875, "title": "Bangkok Chim Chum | Bangkok", "description": "<ul><li>Savor Bangkok Chim Chum's delicious Thai hot pot.</li></ul>", "duration": {"minutes": 60, "type": "FIXED"}, "categories": ["FoodAndDrinks"], "images": [ { "url": "https://pix6.agoda.net/generic/08092caf37fb2f99eb46f81fd210201e.png?ce=3", "image_type": "SUPPLIER" } ], "source_url": "https://www.agoda.com/search?selectedActivity=1633875" } } ```
MCP tool agoda_activity_detail
/agoda/flights/search-locationsResolves a free-text city or airport name into IATA airport codes for flight search, with each city's direct and nearby airports. Credential-free public data from Agoda's own flight destination search.
Response notes
- An empty or missing `keyword` returns `400` before any upstream request is made. - A query with no matches returns `200` with an empty `suggestions` list, not an error. - `city_code` is only present when the location has its own distinct city-wide booking code (e.g. Bangkok's is `BKK`, matching its single main airport). Locations with no distinct city-wide code (e.g. a city served by one airport with a different code from the city name) have an empty `city_code` — use one of `airports[].code` instead. - `airports` lists airports directly serving the location; `nearby_airports` lists nearby alternates (each with a `distance_km`), only populated for some entries. Example response: ```json { "code": 200, "msg": "OK", "data": { "keyword": "Bangkok", "count": 1, "suggestions": [ { "name": "Bangkok", "city_code": "BKK", "country_code": "TH", "country_name": "Thailand", "state_name": "Bangkok Province", "airports": [ {"code": "BKK", "name": "Suvarnabhumi Airport", "lat": 13.681108, "lng": 100.747283} ] } ] } } ```
MCP tool agoda_flights_search_locations
/agoda/flights/searchReturns bookable one-way flight itineraries between two IATA airport codes for a departure date, including per-segment flight number, airline, times, layovers, aircraft type, and price. Resolve free-text city/airport names to codes first via the flight destination search endpoint. Credential-free public data from Agoda's own flight search.
Response notes
- Missing `origin`/`destination`/`departure_date`, a malformed `departure_date`, or an unrecognized `cabin_class` return `400` before any upstream request is made. - Only one-way search is supported. Round-trip search is not available on this endpoint. - Agoda's own flight search is asynchronous — this endpoint transparently polls upstream until results are complete or a bounded attempt budget is exhausted, so callers always get one settled result in a single call. A route/date/passenger combination with no available inventory returns `200` with an empty `itineraries` list, not an error. - `stops_count` and `duration` on each itinerary reflect the whole journey; each entry in `segments` is one flown leg, with a `layover` object on any segment followed by a connection. - `source_url` on each itinerary is Agoda's own real booking deep link for that exact itinerary. Example response: ```json { "code": 200, "msg": "OK", "data": { "origin": "SYD", "destination": "BKK", "departure_date": "2026-10-20", "cabin_class": "Economy", "adults": 1, "page": 1, "last_page": false, "count": 1, "itineraries": [ { "bundle_ref_id": "783056524", "price": {"amount": "710", "currency": "USD"}, "duration": "34h 50m", "stops_count": 2, "airline": {"code": "VN", "name": "Vietnam Airlines"}, "segments": [ { "departure": {"date_time": "2026-10-20T11:15", "airport": {"code": "SYD", "name": "Sydney Airport", "city": "Sydney"}}, "arrival": {"date_time": "2026-10-20T16:15", "airport": {"code": "SGN", "name": "Tan Son Nhat International Airport", "city": "Ho Chi Minh City"}}, "duration": "9h 0m", "cabin_class": "Economy", "cabin_code": "ECO", "flight_number": "772", "airline": {"code": "VN", "name": "Vietnam Airlines"}, "layover": {"airport": "Ho Chi Minh City (SGN)", "duration": "12h 45m layover"}, "aircraft": "Airbus A359", "fare_basis_code": "TLOXAU" } ], "source_url": "https://www.agoda.com/en-us/packages/book?cid=-1&pk=..." } ] } } ```
MCP tool agoda_flights_search
/agoda/flights/itinerary-amenitiesReturns real-content amenities (aircraft type, seat layout, meals, entertainment, wifi) for one or more flight segments. Copy the segments straight from a flight search response's own segment fields. Credential-free public data from Agoda's own flight content service.
Response notes
- An empty `segments` array, or a segment missing a required field, returns `400` before any upstream request is made. - `segments` in the response are returned in the same order as requested. - An entry with no amenity content on file returns an empty `amenities` list, not an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "count": 1, "segments": [ { "flight_number": "772", "amenities": [ "A350 Widebody jet", "Alcoholic beverages available (Free)", "On-demand video (Free)", "Meal available (Free)", "3-3-3 Layout", "Fast Wifi Available (Paid)" ] } ] } } ```
MCP tool agoda_flights_itinerary_amenities
Related APIs
Travel & Hospitality
Build travel and lodging research workflows from structured Airbnb stay, room, availability, and review data.
Travel & Hospitality
Research hotels, restaurants, attractions, and destination pages from TripAdvisor with normalized listing and review endpoints.
Travel & Hospitality
Turn Expedia's Stays, Flights, and Things To Do results into structured JSON — destination search, hotel listings with pricing and reviews, flight offers, and activity search, sourced from the same API the official mobile app uses. Credential-free.
Company coverage
Booking Holdings Inc. · BKNG
Agoda is operated by Booking Holdings Inc. (BKNG). Crawlora's SEC endpoints take the same company's CIK, so filings, financials, insider transactions and 13F holdings come from the same API key as the Agoda endpoints above.
Other Booking Holdings Inc. platforms in the catalog
How to scrape Agoda
Agoda's Hotels, Homes, Things To Do, and Flights surfaces run on internal GraphQL APIs. Crawlora's Agoda endpoints replay these directly and return hotel and home listings, activity search and detail, and flight offers as normalized JSON — no account or signed session required.
Pass a city name to /agoda/hotels/search, /agoda/homes/search, or /agoda/activities/search for normalized listing cards.
Pass a property id to /agoda/hotels/{property_id} or an activity id to /agoda/activities/{activity_id} for full detail.
Pass origin, destination, and date to /agoda/flights/search for one-way flight offers, or resolve airports first with /agoda/flights/search-locations.
Feed travel-price dashboards and research pipelines, or re-run searches on a schedule to track price and availability changes over time.
FAQ
Send a city name to Crawlora's /agoda/hotels/search endpoint and get normalized hotel listings with current pricing as structured JSON — no account required.
Yes — /agoda/homes/search returns Agoda Homes & Apartments listings for a city, in the same normalized shape as hotel search.
Collecting publicly accessible hotel, activity, and flight data is generally permissible if you respect Agoda's terms of use, robots directives, rate limits, and applicable law. This is for public data you are authorized to collect.