{
  "openapi": "3.0.1",
  "info": {
    "title": "Agoda Scraper – Hotel Prices, Rooms & Reviews API",
    "description": "Unofficial Agoda API, no login: hotel prices and room rates for any city, area or hotel and your dates, with taxes, cancellation and rooms left, for rate shopping, rate parity and price monitoring. Agoda and Booking.com reviews with only-new-reviews mode. $1.50/1K hotels, $0.80/1K reviews.",
    "version": "0.3",
    "x-build-id": "WL7aKD6y5a3R8JLrC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/k-data-lab~agoda-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-k-data-lab-agoda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/k-data-lab~agoda-scraper/runs": {
      "post": {
        "operationId": "runs-sync-k-data-lab-agoda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/k-data-lab~agoda-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-k-data-lab-agoda-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "destinations": {
            "title": "📍 Destinations (city, area or agoda.com search link)",
            "type": "array",
            "description": "Where to search, like a traveller typing into Agoda's search box: a city (Bangkok, Tokyo, Paris, New York), an area (Shinjuku, Sukhumvit, Gangnam) or an agoda.com search results link. Each destination returns its hotels as one row each, with the price for your dates. A hotel name here works too (it returns that hotel with all its room offers). Example: [\"Bangkok\", \"Shinjuku\"]. Pass Destinations, Hotels or both.",
            "items": {
              "type": "string"
            }
          },
          "hotels": {
            "title": "🏨 Hotels (agoda.com hotel links, hotel IDs or names)",
            "type": "array",
            "description": "Specific hotels to track: an agoda.com hotel page link, Agoda's numeric hotel ID (the hotelId column of any earlier run) or a hotel name. Each hotel returns one row with full details and every room type and rate plan for your dates (price, taxes, cancellation, breakfast, rooms left), plus its reviews if you ask for them below. Example: [\"286835\", \"Park Hyatt Tokyo\"]. Leave empty to only search Destinations.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "📅 Check-in",
            "type": "string",
            "description": "Check-in date (YYYY-MM-DD) or a relative date like \"+14 days\", which keeps scheduled runs pointing at the future. Example: \"2026-12-10\" or \"+14 days\". Empty = 14 days from today."
          },
          "checkOut": {
            "title": "📅 Check-out",
            "type": "string",
            "description": "Check-out date (YYYY-MM-DD) or relative (\"+15 days\"). Example: \"2026-12-13\". Empty = check-in + the number of nights below. Agoda prices stays of up to 30 nights."
          },
          "nights": {
            "title": "Nights (when check-out is empty)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay in nights (1–30), used only when Check-out is empty. Example: 3 for a weekend trip.",
            "default": 1
          },
          "adults": {
            "title": "👤 Adults",
            "minimum": 1,
            "maximum": 36,
            "type": "integer",
            "description": "Number of adults in total, across all rooms (1–36). Example: 2 for a couple.",
            "default": 2
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "maximum": 9,
            "type": "integer",
            "description": "Number of children aged 0–17 in total, across all rooms (0–9). Also list their ages under Children's ages. Example: 2.",
            "default": 0
          },
          "childrenAges": {
            "title": "Children's ages",
            "type": "array",
            "description": "One age (0–17) per child, as strings, e.g. [\"4\", \"9\"]. Prices and free-stay policies depend on age. Missing ages count as 8. Leave empty when Children is 0.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rooms": {
            "title": "🛏️ Rooms",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of rooms (1–9). Search prices are for all rooms together; pricePerRoomPerNight splits them. Example: 2 for two families.",
            "default": 1
          },
          "currency": {
            "title": "💱 Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "KRW",
              "CNY",
              "HKD",
              "TWD",
              "SGD",
              "THB",
              "MYR",
              "IDR",
              "PHP",
              "VND",
              "INR",
              "AUD",
              "NZD",
              "CAD",
              "CHF",
              "AED",
              "SAR",
              "QAR",
              "BRL",
              "MXN",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "CZK",
              "HUF",
              "TRY",
              "ZAR",
              "ILS",
              "KWD",
              "BHD",
              "OMR",
              "JOD",
              "EGP",
              "PKR",
              "BDT",
              "LKR",
              "KHR",
              "LAK",
              "MVR",
              "FJD",
              "KZT",
              "NGN",
              "RON",
              "RUB",
              "UAH",
              "COP",
              "XPF"
            ],
            "type": "string",
            "description": "Three-letter currency code for every price, exactly as Agoda shows it. Example: \"USD\", \"KRW\", \"THB\", \"JPY\".",
            "default": "USD"
          },
          "language": {
            "title": "🌐 Language",
            "enum": [
              "en-us",
              "ko-kr",
              "ja-jp",
              "zh-cn",
              "zh-tw",
              "zh-hk",
              "th-th",
              "fr-fr",
              "de-de",
              "es-es",
              "it-it",
              "ru-ru",
              "nl-nl",
              "pl-pl",
              "sv-se",
              "he-il",
              "en-gb"
            ],
            "type": "string",
            "description": "Language of hotel names, descriptions and room names, as a locale code. Example: \"en-us\" or \"ko-kr\". Reviews are returned in this language when Agoda has a translation, with the original text alongside.",
            "default": "en-us"
          },
          "country": {
            "title": "🌍 Shopper's country (point of sale)",
            "type": "string",
            "description": "Two-letter country code of the traveller Agoda prices for (US, GB, KR, JP, TH, AU, …). Example: \"KR\". Hotels sometimes show different rates per market; set this to compare them (rate parity checks).",
            "default": "US"
          },
          "sortBy": {
            "title": "↕️ Sort hotels by",
            "enum": [
              "recommended",
              "price_low",
              "review_score",
              "review_score_couples",
              "review_score_families",
              "review_score_business",
              "review_score_solo"
            ],
            "type": "string",
            "description": "Order of the hotel list (searchRank in the output), the same as Agoda's sort menu. Example: \"price_low\" for the cheapest hotels first, \"review_score\" for the best rated.",
            "default": "recommended"
          },
          "maxHotelsPerDestination": {
            "title": "Max hotels per destination",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Upper limit of hotel rows for each destination (1–5000). Agoda returns 45 hotels per page; big cities have thousands (the run summary shows how many match). Example: 20 for a quick look, 500 for a city-wide price scan.",
            "default": 100
          },
          "starRatings": {
            "title": "⭐ Star rating",
            "type": "array",
            "description": "Only hotels with these star ratings, as strings \"1\"–\"5\". Example: [\"4\", \"5\"]. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "minReviewScore": {
            "title": "Minimum guest rating",
            "enum": [
              "any",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Only hotels whose guest rating (out of 10) is at least this. Example: \"8\" for 8+ Excellent; \"any\" = no filter.",
            "default": "any"
          },
          "minPricePerNight": {
            "title": "Min price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest nightly price in the chosen currency, before taxes and fees (Agoda's price filter). Example: 50. Empty = no minimum."
          },
          "maxPricePerNight": {
            "title": "Max price per night",
            "minimum": 0,
            "type": "integer",
            "description": "Highest nightly price in the chosen currency, before taxes and fees. Example: 200. Empty = no maximum."
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "all",
              "hotels",
              "homes"
            ],
            "type": "string",
            "description": "Hotels (incl. resorts, hostels, guesthouses) or homes (apartments, villas, houses). Example: \"hotels\"; \"all\" = both.",
            "default": "all"
          },
          "freeCancellationOnly": {
            "title": "Free cancellation only",
            "type": "boolean",
            "description": "Set true to keep only hotels with a free-cancellation rate for your dates.",
            "default": false
          },
          "breakfastIncludedOnly": {
            "title": "Breakfast included only",
            "type": "boolean",
            "description": "Set true to keep only hotels with a rate that includes breakfast.",
            "default": false
          },
          "payAtHotelOnly": {
            "title": "Pay at the hotel only",
            "type": "boolean",
            "description": "Set true to keep only hotels that let you pay at the property.",
            "default": false
          },
          "onlyAvailable": {
            "title": "Only hotels with rooms for my dates",
            "type": "boolean",
            "description": "Skip sold-out hotels in search results (they are never charged). Set false to also list sold-out hotels with available=false.",
            "default": true
          },
          "includeRoomOffers": {
            "title": "🛏️ Add full details + every room offer to search results",
            "type": "boolean",
            "description": "Set true to also fetch, for each hotel found by a destination, its full details (address, description, check-in/out times, facilities, policies) and every room rate: each room type with all its rate plans (price, taxes, cancellation, breakfast, rooms left). Charged as \"hotel with room offers\" instead of \"hotel\". Hotels you list under Hotels always get this.",
            "default": false
          },
          "maxReviewsPerHotel": {
            "title": "💬 Max reviews per hotel",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Guest reviews to return for each hotel (from Destinations and Hotels). 0 = no reviews. Example: 50. Each review is its own row: rating, title, text, positives/negatives, stay dates, traveller type, room, country, hotel response, plus the hotel's overall score and sub-scores.",
            "default": 0
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "helpful",
              "rating_high",
              "rating_low"
            ],
            "type": "string",
            "description": "Order in which reviews are read. Example: \"newest\" (best for monitoring) or \"rating_low\" (complaints first).",
            "default": "newest"
          },
          "reviewsSince": {
            "title": "Only reviews since",
            "type": "string",
            "description": "Only reviews written on or after this date (YYYY-MM-DD), or within the last N days (\"30 days\"). Sorts newest first and stops at the first older review, so scheduled monitoring runs only pay for new reviews."
          },
          "reviewSources": {
            "title": "Review sources",
            "type": "array",
            "description": "Only reviews from these sites. Example: [\"Agoda\"] or [\"Booking.com\"]. Agoda shows its own verified-guest reviews next to reviews from Booking.com, Priceline and Yanolja; the source column says which. Empty = all sources.",
            "items": {
              "type": "string",
              "enum": [
                "Agoda",
                "Booking.com",
                "Priceline.com",
                "Yanolja"
              ],
              "enumTitles": [
                "Agoda verified guests",
                "Booking.com",
                "Priceline",
                "Yanolja"
              ]
            },
            "default": []
          },
          "reviewMinRating": {
            "title": "Minimum review rating",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only reviews rated at least this (out of 10). Example: 8 for happy guests. Empty = no minimum."
          },
          "reviewMaxRating": {
            "title": "Maximum review rating",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Only reviews rated at most this (out of 10). Example: 5 to collect complaints only; combine with \"Lowest rating first\" so the run stops as soon as ratings get higher. Empty = no maximum."
          },
          "reviewLanguages": {
            "title": "Review languages (original)",
            "type": "array",
            "description": "Only reviews originally written in these languages: two-letter codes such as en, ko, ja, fr, de, zh (zh matches zh-CN and zh-TW). Example: [\"en\", \"ko\"]. This filters; it does not translate (use Language for that). Empty = all languages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNewReviews": {
            "title": "🔔 Only new reviews (remember past runs)",
            "type": "boolean",
            "description": "Set true for scheduled review monitoring. The first run returns reviews as usual and remembers them; every later run returns only reviews you have not received yet, reading newest first, so you never pay for the same review twice, even if schedules overlap. Needs Max reviews per hotel above 0. Remembered per hotel and per combination of review filters, in a store in your own Apify account. Example: true with Only reviews on and a daily schedule.",
            "default": false
          },
          "onlyReviews": {
            "title": "Only reviews (skip hotel rows)",
            "type": "boolean",
            "description": "For Hotels: set true to return only their reviews, not the hotel row (needs Max reviews per hotel above 0). Cheapest way to monitor reviews of known hotels.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy is on by default and needs no setup. Leave it as {\"useApifyProxy\": true}.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}