Agoda Hotels Scraper

Scrape public Agoda hotel listings, prices, ratings, amenities, and property URLs by destination.

Data fields

FieldTypeDescription
namestringValue exported as name.
pricenumber | nullValue exported as price.
currencystring | nullValue exported as currency.
reviewScorenumber | nullValue exported as reviewScore.
reviewCountinteger | nullValue exported as reviewCount.
starRatingnumber | nullValue exported as starRating.
locationstring | nullValue exported as location.
urlstring | nullValue exported as url.

Input preview

searchUrlsAgoda search URLs
destinationDestination text
cityIdAgoda city ID
checkInCheck-in date
checkOutCheck-out date
adultsAdults

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract public Agoda hotel listings, nightly prices, ratings, review counts, locations, amenities, images, and property URLs from Agoda search result pages. Use it for travel market research, hotel price monitoring, OTA analysis, hospitality lead generation, and destination benchmarking.

What does Agoda Hotels Scraper do?

Agoda Hotels Scraper turns public Agoda search pages into structured datasets. Give it one or more Agoda search URLs, or provide a city ID and stay details, and it returns hotel/property rows that are ready to export to JSON, CSV, Excel, Google Sheets, or your own database.

Who is it for?

  • 🏨 Hotel revenue teams tracking competitor prices and review signals.
  • ✈️ Travel market researchers comparing destinations and property supply.
  • 📊 OTA analysts building hotel availability and pricing dashboards.
  • 🧳 Travel agencies collecting public property options for trip planning.
  • 🔎 Lead-generation teams finding hotels in specific Agoda destinations.

Why use this scraper?

Manual hotel research is slow and hard to repeat. This actor gives you repeatable extraction with bounded result counts, stay parameters, currency hints, and consistent output fields.

What data can you extract?

Field Description
searchUrl Agoda search page used for the result
propertyId Property identifier when visible in the URL
name Hotel or property name
url Agoda property page URL
location Area, city, and nearby landmark text
address Address/location text when visible
starRating Star rating when visible
reviewScore Public Agoda review score
reviewCount Number of reviews
price Visible nightly price
currency Visible or requested currency
taxesFeesNote Taxes/fees text shown near the price
availability Availability flag when Agoda explicitly shows unavailable/sold out
amenities Visible amenity or benefit snippets
imageUrl Main property image URL
scrapedAt ISO timestamp of extraction

How to use it

  1. Open the actor on Apify.
  2. Add Agoda search URLs, or enter a city ID and stay details.
  3. Set maxItems to the number of hotels you need.
  4. Run the actor.
  5. Download the dataset or connect it to your workflow.

Input options

Agoda search URLs

Use searchUrls when you already have Agoda search result pages. This is the most precise option because it preserves Agoda filters in the URL.

City ID and destination

Use cityId plus optional destination text when you want the actor to build a basic Agoda search URL for you.

Stay details

Set check-in/check-out dates, adults, children, and rooms to match the travel scenario you want to monitor.

Currency and language

Use currency and language to influence how Agoda displays price and page text.

Maximum hotels

maxItems caps how many hotel listings are saved. Keep it small for test runs and increase it for production monitoring.

Proxy configuration

Proxy use is optional. Start without a proxy for small tests. Enable Apify Proxy if your larger repeated runs encounter blocking or regional differences.

Example input

{
  "searchUrls": [
    { "url": "https://www.agoda.com/search?city=9395&adults=2&rooms=1" }
  ],
  "maxItems": 25,
  "currency": "EUR",
  "language": "en-US",
  "proxyConfiguration": { "useApifyProxy": false }
}

Example output

{
  "searchUrl": "https://www.agoda.com/search?city=9395&adults=2&rooms=1",
  "propertyId": null,
  "name": "Hyatt Regency Bangkok Suvarnabhumi Airport",
  "url": "https://www.agoda.com/...",
  "location": "Suvarnabhumi Airport, Bangkok - 18.2 km to center",
  "address": "Suvarnabhumi Airport, Bangkok - 18.2 km to center",
  "latitude": null,
  "longitude": null,
  "starRating": 4,
  "reviewScore": 8.5,
  "reviewCount": 23131,
  "price": 135,
  "currency": "EUR",
  "taxesFeesNote": "Per night after taxes and fees",
  "availability": null,
  "amenities": ["Free 24/7 Shuttle Service"],
  "imageUrl": "https://pix8.agoda.net/...jpg",
  "scrapedAt": "2026-07-03T19:24:02.763Z"
}

Tips for best results

  • Use real Agoda search URLs when you need exact filters.
  • Keep maxItems low while testing.
  • Use the same stay dates for recurring price comparisons.
  • Save the original searchUrl so you can audit where each row came from.
  • Enable proxy only when needed to control costs.

Common use cases

Hotel price monitoring

Run the same destination and dates daily to watch public nightly prices.

Destination benchmarking

Compare hotel count, average review scores, and visible pricing across cities.

Competitor tracking

Track public listings near a hotel, airport, landmark, or resort area.

Lead generation

Collect property names and Agoda URLs for hospitality outreach workflows.

Integrations

  • Google Sheets: export CSV or connect via Apify integrations.
  • BI dashboards: send dataset rows to BigQuery, Snowflake, or PostgreSQL.
  • Alerts: compare today’s dataset with yesterday’s and notify on price changes.
  • CRM workflows: enrich hotel leads with property URLs and public ratings.

API usage

Node.js

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/agoda-hotels-scraper').call({
  searchUrls: [{ url: 'https://www.agoda.com/search?city=9395&adults=2&rooms=1' }],
  maxItems: 25,
});
console.log(run.defaultDatasetId);

Python

from apify_client import ApifyClient

client = ApifyClient('APIFY_TOKEN')
run = client.actor('fetch_cat/agoda-hotels-scraper').call(run_input={
    'searchUrls': [{'url': 'https://www.agoda.com/search?city=9395&adults=2&rooms=1'}],
    'maxItems': 25,
})
print(run['defaultDatasetId'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~agoda-hotels-scraper/runs?token=APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"searchUrls":[{"url":"https://www.agoda.com/search?city=9395&adults=2&rooms=1"}],"maxItems":25}'

MCP usage

Use the Apify MCP server with Claude Desktop or Claude Code:

https://mcp.apify.com/?tools=fetch_cat/agoda-hotels-scraper

Add it from Claude Code:

claude mcp add apify-agoda-hotels "https://mcp.apify.com/?tools=fetch_cat/agoda-hotels-scraper"

Claude Desktop JSON config example:

{
  "mcpServers": {
    "apify-agoda-hotels": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/agoda-hotels-scraper"
    }
  }
}

Example prompts:

  • “Scrape 50 Agoda hotels in Bangkok and summarize average review score.”
  • “Find public Agoda hotel prices for my saved search URL.”
  • “Compare the cheapest visible hotels from two Agoda city searches.”

Limits and caveats

Agoda pages are dynamic and can vary by market, date, device, language, and currency. Some fields may be missing when Agoda does not display them on the search page. Prices are public visible prices at scrape time, not guaranteed booking quotes.

Legality

This actor extracts public information visible on Agoda pages. Use it responsibly, respect applicable laws, and avoid collecting private, account-only, or personal data. Review Agoda’s terms and your legal basis before running large-scale monitoring.

Support

If a run fails, include the run ID, input, and expected destination or Agoda URL when asking for help. This makes reproduction faster.

Common questions

Questions and answers reused from the canonical actor README.

Why did I get fewer hotels than requested?

The search page may show fewer visible results, filters may be restrictive, or Agoda may not load more results for that market. Try a broader search URL or lower filters.

Why is currency different from my input?

Agoda can override display currency based on region, cookies, or URL state. The actor reports the visible currency when available.

Should I enable proxy?

Start without proxy for small tests. Enable Apify Proxy for repeated production runs or if Agoda blocks your traffic.