Agoda Hotel API avatar

Agoda Hotel API

Pricing

from $3.43 / 1,000 property returneds

Go to Apify Store
Agoda Hotel API

Agoda Hotel API

Agoda hotel data as clean, structured JSON. Search a destination and dates to get properties with live per-room rates, the pre-discount price, cancellation policies, and availability, or pull hotel reviews and full property detail from a hotel URL. Pay per result, MCP-ready for Claude and AI agents.

Pricing

from $3.43 / 1,000 property returneds

Rating

0.0

(0)

Developer

John

John

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

12 hours ago

Last modified

Categories

Share

Agoda API | Hotel Rates, Availability and Guest Reviews

Agoda hotel data as clean, structured JSON, including the part most hotel APIs will not give you: live per-room rates for a specific stay, with the pre-discount price next to the price you would actually pay.

This is an independent Agoda API. Agoda publishes its own developer API only to approved partners, so if you need programmatic hotel rates today, this Actor is the practical route. There is no partner application and no key to request, and you pay for the rows you get back. It is not affiliated with, endorsed by, or connected to Agoda.

Give it a destination and dates. You get every property with a full table of bookable offers, each carrying its room type, nightly rate, original rate, tax inclusion, and cancellation policy. The cheapest nightly rate is lifted to the top of each record, so a rate monitor can diff one number instead of walking a tree.

What this actor returns

In search mode, per property:

  • Room rates: one entry per bookable offer, with room type, bed configuration, occupancy, nightly price, pre-discount price, currency, whether taxes and fees are included, nights, and the cancellation policy
  • Lowest nightly rate: the cheapest offer across all rooms, lifted to the top level for sorting and alerting
  • Availability: whether the property has rooms for the requested stay
  • Scores: overall guest score, review count, and the breakdown by cleanliness, comfort, location, facilities, staff, and value
  • Location: address, city, country, coordinates, location rating, what is nearby, walkable places, metro access
  • Detail: description, highlights, popular facilities, full amenities, images, fine print, FAQ

In reviews mode, per review: what the guest liked and what they disliked as separate fields, their score, nights stayed, language, any owner reply, and attached photos.

Every property and review row also carries a one-line plain-language summary.

The fields you will actually sort and filter on

FieldTypeWhat it is
result_typestringproperty, review, or error. Filter on this first.
propertyNamestringHotel or property name
propertyUrlstringLink back to the property page
city / countrystringWhere the property is
latitude / longitudenumberCoordinates for mapping
checkIn / checkOutstringThe stay these rates are quoted for
availablebooleanWhether the property has rooms for that stay
lowestPricePerNightnumberCheapest nightly rate across every offer
currencystringCurrency the rates are quoted in
roomRatesarrayOne entry per bookable offer, with pricePerNight, originalPricePerNight, taxesAndFeesIncluded, nights, and policies
reviewScore / reviewCountnumber / integerOverall guest score and how many reviews back it
reviewScoreBreakdownobjectCleanliness, comfort, location, facilities, staff, value for money
locationRating / locationRatingLabelnumber / stringNumeric location score and its word form
rating, reviewPositive, reviewNegativenumber / stringPer-review score and the liked and disliked halves, in reviews mode
nightsStayed, authorName, ownerReplyinteger / stringReview context, in reviews mode
fetched_atstringUTC timestamp for the row, which is what makes a price history a time series

The Output tab ships four ready-made views: All Results, Room rates, Property overview, and Guest reviews. Each exports to JSON, CSV, or Excel.

Use cases

  • Monitor rates over time. Run a destination and date range on a schedule and diff lowestPricePerNight to catch price moves.
  • Compare the real discount. Every offer carries both the pre-discount and final price, so you can see how deep a "deal" actually is.
  • Filter by cancellation terms. Policies come through per offer, so you can separate refundable from non-refundable rates.
  • Track availability. The availability flag plus the room table tells you what is actually bookable for a given stay.
  • Analyse guest sentiment. Reviews split liked from disliked, which is far easier to work with than one blob of text.
  • Run a rate parity check. Pull the same stay here and from another source, with currency and country pinned, and see where the two disagree.

Input parameters

ParameterTypeRequiredDefaultDescriptionExample
modestringRequiredsearchsearch finds properties with rates from a destination and dates. property and reviews collect from hotel URLs.search
locationsarray of stringsRequired in search modenoneCities, regions, or landmarks. Up to 20.["Singapore"]
checkInstringRequired in search modenoneYYYY-MM-DD.2026-09-15
checkOutstringRequired in search modenoneYYYY-MM-DD, later than check-in.2026-09-18
adultsintegerOptional2Number of adults, which changes the rates returned. 1 to 20.2
currencystringOptionalsource defaultThree-letter code for the rates.USD
countrystringOptionalsource defaultTwo-letter point-of-sale country. Rates differ by market.SG
hotelUrlsarray of stringsRequired in property and reviews modesnoneAgoda property URLs. Up to 200.["https://www.agoda.com/.../hotel/singapore-sg.html"]
maxResultsPerInputintegerOptional20Properties per destination, or reviews per hotel. 1 to 2000. This is your cost control.20
sortReviewsBystringOptionalsource defaultSort order for reviews mode, passed through to the source. Leave empty for the default order.Most recent
{
"mode": "search",
"locations": ["Singapore"],
"checkIn": "2026-09-15",
"checkOut": "2026-09-23",
"adults": 2,
"currency": "USD",
"maxResultsPerInput": 20
}

Dates are required in search mode, and both are validated before anything is sent upstream. Room rates only exist for a specific stay, so a search without dates has no meaningful answer.

The dates above are illustrative. Use whatever future stay you care about, and if you are scripting this, compute the dates from today rather than hard-coding them so your job does not quietly start asking for a stay in the past.

Example output

{
"result_type": "property",
"propertyName": "Village Hotel Bugis by Far East Hospitality",
"city": "Singapore",
"country": "Singapore",
"checkIn": "2026-09-15T00:00:00.000Z",
"checkOut": "2026-09-23T00:00:00.000Z",
"available": true,
"lowestPricePerNight": 129.27,
"currency": "USD",
"reviewScore": 8.2,
"reviewCount": 23921,
"reviewScoreBreakdown": {
"cleanliness": 8.1, "comfort": 8.2, "location": 8.9,
"facilities": 7.9, "staff": 8.3, "value_for_money": 8.1
},
"locationRating": 8.9,
"locationRatingLabel": "Excellent",
"roomRates": [
{
"roomType": "Superior",
"bedConfiguration": "2 single beds or 1 king bed",
"adults": 2,
"pricePerNight": 129.27,
"originalPricePerNight": 327.63,
"currency": "USD",
"taxesAndFeesIncluded": true,
"nights": 8,
"policies": ["Non-refundable (Low price!)", "Book and pay now"]
}
],
"summary": "Village Hotel Bugis by Far East Hospitality in Singapore. Scored 8.2 from 23,921 reviews, from USD 129.27 per night."
}

An input that returns nothing produces a row with result_type: "error" and a plain-language error_message.

Pricing

Pay per result. Two events: property-scraped for each property returned with its full rate table, and review-scraped for each review. A property counts as one result no matter how many offers its rate table holds.

maxResultsPerInput caps what a run can cost, and the cap is applied at the source. Current rates are shown on the Store card.

How to get started

  1. View on Apify Store and click Try for free.
  2. Leave Mode on search, enter a destination, and set your check-in and check-out dates.
  3. Run it. Results appear on the Output tab and export as JSON, CSV, or Excel. The Room rates view puts the offer table next to the lowest nightly price.
  4. Prefer to start from code? The example repo has a Python quick-start plus MCP install walkthroughs for Claude, Cursor, and ChatGPT.

🔌 Use this API from Claude (MCP)

Add this Actor as a tool in Claude Code (free trial), Claude Cowork (free trial), Cursor, or any other MCP client through the hosted Apify MCP server:

https://mcp.apify.com/?tools=actors,docs,johnvc/agoda-hotel-api

With Claude Code (free trial):

claude mcp add --transport http agoda "https://mcp.apify.com/?tools=actors,docs,johnvc/agoda-hotel-api"

Then ask your agent something like "what is the cheapest refundable rate in Singapore for those dates".

Apify MCP integration docs: https://docs.apify.com/platform/integrations/mcp

💸 Pay per run with crypto (x402)

The Agoda Hotel API supports agentic payments via the x402 protocol. AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed: point your agent at the Apify MCP server and it can discover, pay for, and run this Actor autonomously. Read the Apify x402 announcement for details.

Speed

Search returns in about a minute for a handful of properties. Reviews are considerably slower, several minutes per batch, because each property's review history is paged through. The Actor collects in chunks and pushes each chunk as it completes, so results arrive as they go rather than all at the end.

🔌 Integrations: Automate Agoda Rate Monitoring

One search tells you what a room costs right now. Run the same search tomorrow and the day after and you have something more useful, which is a record of which way the rate is moving. The native Apify platform integrations let you wire this Actor into the tools you already use without standing up a server or writing your own cron job.

Tasks and schedules: build a rate history

The pattern is one saved task per stay you care about, one schedule across all of them.

  1. Create a task. A saved task is this Actor plus a saved input, so give each stay its own named task, for example "Singapore, first week of December" with your locations, checkIn, checkOut, currency, and country. Click Create empty task on the Actor page, fill in the input, and save.
  2. Attach a schedule. Open Schedules in the Apify Console, create one with a standard cron expression, and add your tasks to it. Useful examples: 0 7 * * * (every morning at 7 AM), 0 */6 * * * (every six hours), 0 9 * * 1 (Mondays at 9 AM). One schedule can trigger many tasks, so a single "daily rate check" schedule can watch every stay you have saved.
  3. Diff the number. Each run appends fresh rows with a new fetched_at, so comparing lowestPricePerNight between runs gives you the price move, and roomRates tells you which room type caused it.

A monitoring task holds its dates fixed and watches the price for that stay move. When the stay is behind you, update the dates on the task rather than leaving it asking for the past.

The published task Track Agoda hotel prices for a destination and dates is this recipe already set up.

n8n

There is no dedicated community node for this Actor yet, so use the Apify n8n integration, which can run any Actor. A price-drop workflow is four nodes:

  1. Schedule Trigger, every morning at 7 AM.
  2. Apify node, run johnvc/agoda-hotel-api in search mode with your destination and dates.
  3. Filter node, keep rows where lowestPricePerNight is below your threshold.
  4. Slack or email node, send yourself the property name, the rate, and the cancellation policy.

Make and Zapier

Both have native Apify integrations, Apify on Make and Apify on Zapier, with "Run Actor" and "Get Dataset Items" actions. The same pattern applies: trigger on a schedule, run this Actor, filter on price, then notify or store.

Supabase: keep the price history somewhere queryable

A rate history is only useful if it lands in something you can query. Supabase (hosted Postgres) fits well, and there are two paths:

  • No code: in n8n, connect the Apify node to the built-in Supabase node and insert a row per property after each scheduled run.
  • A few lines of Python: run the Actor and bulk-insert the flat property rows into a table. Note the dates are computed from today, so this script keeps working months from now.
from datetime import date, timedelta
from apify_client import ApifyClient
from supabase import create_client
apify = ApifyClient("YOUR_APIFY_TOKEN")
supabase = create_client("https://YOUR_PROJECT.supabase.co", "YOUR_SERVICE_ROLE_KEY")
check_in = date.today() + timedelta(days=45)
check_out = check_in + timedelta(days=3)
run = apify.actor("johnvc/agoda-hotel-api").call(
run_input={
"mode": "search",
"locations": ["Singapore"],
"checkIn": check_in.isoformat(),
"checkOut": check_out.isoformat(),
"adults": 2,
"currency": "USD",
"country": "SG",
"maxResultsPerInput": 20,
}
)
rows = [
{
"property_name": item["propertyName"],
"city": item.get("city"),
"check_in": item.get("checkIn"),
"check_out": item.get("checkOut"),
"lowest_price_per_night": item.get("lowestPricePerNight"),
"currency": item.get("currency"),
"available": item.get("available"),
"review_score": item.get("reviewScore"),
"fetched_at": item.get("fetched_at"),
}
for item in apify.dataset(run.default_dataset_id).iterate_items()
if item.get("result_type") == "property"
]
if rows:
supabase.table("agoda_rates").insert(rows).execute()

Point a schedule at that and the table fills itself in, ready for a chart or a parity report.

MCP and AI agents

Apify exposes this Actor through the Apify MCP server, so MCP clients such as Claude Code (free trial), Claude Cowork (free trial), and Cursor can run live searches as a tool and answer things like "which Singapore hotels under 200 a night for those dates have free cancellation". The published task Get Agoda hotel rates in Claude via MCP walks through the setup.

Webhooks

For anything custom, attach an Apify webhook to the ACTOR.RUN.SUCCEEDED event. When a scheduled run finishes, Apify POSTs the run details, including the dataset ID, to your endpoint, and your code takes it from there: refresh a dashboard, update a sheet, or text you when a rate drops.

Hotel pricing is rarely a one-source question, so these pair well with this API:

Other Agoda Actors exist, and it is worth knowing what you are choosing between. Fast Agoda Scraper is an older one; at the time of writing its Store card shows a run success rate in the mid fifties and a last update in June 2026, which means a meaningful share of runs come back empty. This API is actively maintained, validates your dates before a request leaves the building, and returns the same field set on every row so downstream code does not have to guess.

Applications of the Agoda API

Ready-to-run examples of this API in action. Open any one and run it in a single click.

Get Agoda hotel rates as JSON without an API key

Structured rates for a destination and stay, without applying to a partner programme first. Run this task

Track Agoda hotel prices for a destination and dates

The rate monitoring recipe: same stay, on a schedule, diffing lowestPricePerNight run over run. Run this task

Get Agoda hotel rates in Claude via MCP

Add the Actor to Claude Code (free trial) or another MCP client and ask for rates in plain language. Run this task

Find Agoda hotel rates with free cancellation

Every offer carries its policy, so you can keep only the refundable ones. Run this task

Pull live Agoda rates for a hotel rate parity check

Pin the currency and the point-of-sale country, then compare the same stay against another channel. Run this task

Export Agoda guest reviews to CSV or Excel

Reviews mode with liked and disliked kept apart, ready for a spreadsheet or a sentiment pass. Run this task

获取实时酒店房价,用于酒店比价分析 (Live hotel room rates for price comparison, in Chinese)

酒店比价: live nightly rates for a destination and stay, set up for hotel price comparison work. Run this task

获取酒店评价数据,逐条含评分与酒店回复 (Hotel review data with scores and owner replies, in Chinese)

酒店评价: one row per guest review, with the score, the liked and disliked halves, and any reply from the property. Run this task

❓ FAQ

How do I use the Agoda API?

Set Mode to search, give it one or more destinations in locations, and set checkIn and checkOut. That is the whole minimum input. Add currency and country when the numbers need to be comparable to another source, and use maxResultsPerInput to cap how many properties come back. You can run it from the Console, from the Apify API, from an MCP client, or from the example repo.

Can I schedule this Agoda Scraper to run automatically?

Yes, and most people should. One run gives you today's rate, which is rarely the question you actually had. Save your input as a task, then attach a schedule from the Actor's Actions menu, then Schedule. Standard cron applies: 0 7 * * * runs every morning at 7 AM, 0 */6 * * * every six hours, 0 9 * * 1 every Monday. One schedule can trigger many tasks at once, so a single "daily rate check" can cover every stay you are watching. The full monitoring recipe, including where to put the results, is in the Integrations section above.

Should I use an official API or a web Scraper for hotel data?

An official API is the cleanest option when you can get one, but hotel APIs are usually gated behind a partner programme, rate limited, and quota bound, and they often drop the fields you actually wanted. Web scraping fills that gap, and this Actor sits in between: you get the reliability of a hosted endpoint and the field coverage of a scraper, with no quota to manage and no approval to wait for. You call it, you get JSON, you pay for the rows you got.

Can I use this Agoda Scraper through an MCP Server?

Yes. It runs as a tool in any MCP client through the hosted Apify MCP server. The Actor-specific URL is https://mcp.apify.com/?tools=actors,docs,johnvc/agoda-hotel-api, which works in Claude Code (free trial), Claude Cowork (free trial), Cursor, and anything else that speaks MCP. See the Apify MCP docs for client setup, and the MCP section above for the one-line install command.

Can I use this Actor with the Apify API?

Yes. The Apify API lets you start runs, read run status, and pull dataset items programmatically, and there is an apify-client package for both Python and Node.js so you are not hand-rolling HTTP. The Actor's API tab gives you ready-made snippets with your input already filled in.

Can I integrate this Agoda Scraper with other apps?

It connects to almost anything through Apify integrations: Make, Zapier, n8n, Slack, Google Drive, and more. For anything not on that list, attach a webhook to ACTOR.RUN.SUCCEEDED and handle the run yourself. The Integrations section above has the full recipes.

Is this an official Agoda API?

No. This Actor is not affiliated with, endorsed by, or connected to Agoda. It collects publicly visible listing and review data and returns it as structured JSON. It is an independent tool and makes no claim of feature parity with Agoda's own partner API.

How do I track hotel prices over time?

Run search mode on a schedule with the same destination and dates, and compare lowestPricePerNight between runs. Every property also keeps its full offer table, so you can see which room type moved.

How do I compare hotel rates across booking sites?

Rates here are quoted for a specific stay, currency, and point-of-sale country. Set currency and country explicitly so you are comparing like with like against another source.

How do I get hotel availability programmatically?

Every property row carries an available boolean for the stay you asked about, plus roomsAvailable and the roomRates table showing what is actually bookable. A property that comes back with available: false was checked and had nothing for those nights, which is itself a useful signal when you are watching a sold-out period.

Can I get only refundable rates?

The Actor returns all offers with their policies attached, so filter on the policies field in roomRates. Free-cancellation offers say so there.

Why do I need check-in and check-out dates?

Because room rates only exist for a specific stay. A hotel has no single price, it has a price for a set of nights and an occupancy. Without dates there is nothing meaningful to return, so both are required and validated up front.

Does the price include taxes and fees?

Each offer says so, in taxesAndFeesIncluded. Do not assume it is consistent across offers, because it is not.

What is the difference between the two prices on each offer?

pricePerNight is what you would pay. originalPricePerNight is the pre-discount rate the source displays alongside it. The gap between them is the advertised saving.

Can I get reviews and rates in one run?

Not in a single run: rates come from search mode and reviews from reviews mode. Run search first, take the property URLs from the results, then run reviews mode on those.

Does it cover properties outside Asia?

Yes. Coverage is strongest across Asia-Pacific, but the source lists properties worldwide and the Actor returns whatever the destination search finds.

How much does it cost to scrape hotel rates?

You pay per result, not per run: one charge per property returned with its full rate table, and one per review. Rate tables are free of extra charge no matter how many offers they hold. maxResultsPerInput is a hard ceiling on how many results a run can produce, so it doubles as your budget control. Current per-result rates are on the Store card.

What do I do if I get no results?

Check the error rows first: any input that produced nothing comes back as a row with result_type: "error" and a plain-language error_message telling you why. The usual causes are a destination string the search does not recognise, dates in the past, a check-out that is not after the check-in, or a genuinely sold-out stay. Try a broader destination such as the city name on its own, and confirm the dates are in the future.

Collecting publicly available data is generally lawful in many jurisdictions, and Apify has a readable overview in is web scraping legal. That said, what you do with the data matters more than how you got it, so check your own obligations before republishing prices or reviews, and take your own legal advice for anything commercial.

How can I collect hotel data from other travel sites?

Pair this API with the neighbours in the portfolio: Google Hotels Search Scraper for prices aggregated across booking sites, Tripadvisor API for a second opinion on a property's reviews, and Google Flights API when you need the airfare next to the room rate. The full list is in Related Tools above.

Resources

🌐 About Alpha OSINT

This Actor is part of Alpha OSINT, toolset of financial and operations data sources and APIs. For support or requests for this actor, please start a ticket directly on our support page.

Last Updated: 2026.08.10