{
  "openapi": "3.0.1",
  "info": {
    "title": "Agoda Scraper",
    "description": "[💰 $2.0 / 1K] Extract hotel and accommodation listings from Agoda — prices, ratings, addresses, photos, and amenities. Search by destination keyword or paste Agoda URLs directly.",
    "version": "1.0",
    "x-build-id": "2trcKhj17pcj3HIRU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~agoda-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-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/solidcode~agoda-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-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/solidcode~agoda-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-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": {
          "search": {
            "title": "Destinations",
            "type": "array",
            "description": "One or more destination keywords (e.g. 'Tokyo', 'Bangkok hotels near skytrain', 'Bali villas'). Each entry runs as its own Agoda search. Use this OR Agoda URLs below.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Agoda URLs",
            "type": "array",
            "description": "Paste Agoda search-result URLs or individual hotel page URLs (e.g. https://www.agoda.com/the-peninsula-bangkok/hotel/bangkok-th.html). Auto-detects URL type. Aligns with Agoda Reviews Scraper input — same field name and shape, so you can move data between actors without reformatting.",
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in Date",
            "type": "string",
            "description": "Check-in date in YYYY-MM-DD format. Required to fetch live nightly prices — leave empty for catalog data only (names, ratings, addresses, photos). Even with dates set, some properties come back with the price fields empty, because Agoda has no room offer for that exact stay (fully booked, closed, or not bookable that far ahead). Those hotels are still real search results, so they are still returned and still counted as results. Across our test runs this was roughly 8% to 30% of rows, higher on narrow searches such as hostels only. Moving the dates or shortening the stay usually brings more prices back."
          },
          "checkOut": {
            "title": "Check-out Date",
            "type": "string",
            "description": "Check-out date in YYYY-MM-DD format. Must be after the check-in date."
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "Number of rooms required."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Number of adult guests (Agoda considers age 18 and up an adult)."
          },
          "children": {
            "title": "Children",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Number of child guests (ages 0-17)."
          },
          "childrenAges": {
            "title": "Children Ages",
            "type": "array",
            "description": "Age of each child guest (0-17). Required when 'Children' is greater than 0 — Agoda prices family rooms based on these ages. Example: ['5', '8'] for two children aged 5 and 8.",
            "items": {
              "type": "string"
            }
          },
          "propertyType": {
            "title": "Property Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Restrict results to one or more accommodation types. Multi-select. Empty = include all types.",
            "items": {
              "type": "string",
              "enum": [
                "hotels",
                "apartments",
                "hostels",
                "resorts",
                "villas",
                "bed_and_breakfasts",
                "guest_houses",
                "vacation_homes"
              ],
              "enumTitles": [
                "Hotels",
                "Apartments",
                "Hostels",
                "Resorts",
                "Villas",
                "Bed & Breakfasts",
                "Guest Houses",
                "Vacation Homes"
              ]
            }
          },
          "starsCountFilter": {
            "title": "Hotel Stars",
            "uniqueItems": true,
            "type": "array",
            "description": "Only include properties with these official star ratings. Multi-select. Empty = any number of stars.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            }
          },
          "minReviewScore": {
            "title": "Minimum Guest Review Score",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum guest review score (Agoda scale, 0-10). Default 0 = no minimum. Setting any minimum also leaves out brand-new properties that have no guest score yet."
          },
          "maxReviewScore": {
            "title": "Maximum Guest Review Score",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum guest review score (Agoda scale, 0-10). Default 10 = no maximum. Agoda's own search only filters on a minimum score, so this ceiling is applied to each property as results come in. Set it to 0 to keep only properties that have no guest score yet."
          },
          "priceMin": {
            "title": "Minimum Price per Night",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per room per night, taxes and fees included, in the chosen currency — the same number Agoda shows on each search result. Leave empty for no minimum."
          },
          "priceMax": {
            "title": "Maximum Price per Night",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per room per night, taxes and fees included, in the chosen currency — the same number Agoda shows on each search result. Leave empty for no maximum — high-denomination currencies (JPY, KRW, IDR) are handled correctly when this is empty."
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "recommended",
              "price_low_to_high",
              "price_high_to_low",
              "review_high_to_low",
              "review_low_to_high",
              "distance"
            ],
            "type": "string",
            "description": "How Agoda should rank the results."
          },
          "language": {
            "title": "Language",
            "enum": [
              "en-gb",
              "en-us",
              "de-de",
              "fr-fr",
              "es-es",
              "it-it",
              "nl-nl",
              "pt-pt",
              "pl-pl",
              "ru-ru",
              "ja-jp",
              "ko-kr",
              "zh-cn",
              "zh-tw",
              "th-th",
              "vi-vn",
              "id-id",
              "ms-my",
              "ar-ae",
              "tr-tr"
            ],
            "type": "string",
            "description": "Agoda site language (locale). Affects descriptions, amenity labels, and the default currency Agoda would otherwise apply."
          },
          "currency": {
            "title": "Currency",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "CAD",
              "AUD",
              "NZD",
              "JPY",
              "CNY",
              "HKD",
              "SGD",
              "INR",
              "BRL",
              "MXN",
              "CHF",
              "SEK",
              "NOK",
              "DKK",
              "PLN",
              "TRY",
              "AED",
              "ZAR",
              "THB",
              "IDR",
              "MYR",
              "PHP",
              "VND",
              "KRW",
              "TWD"
            ],
            "type": "string",
            "description": "Currency code (ISO 4217). Forces all price fields into this currency regardless of the language locale."
          },
          "maxResults": {
            "title": "Max Results per Search",
            "minimum": 0,
            "type": "integer",
            "description": "Target number of hotels per destination/URL. Set to 0 for all available. Each result is one billable item at $2 per 1,000. Please note this is a target, not a hard cap: hotels arrive from Agoda one page at a time (about 49 per page) and a page is never cut in half, so you can receive up to about 49 hotels MORE than the number you type here. Ask for 100 and you may get up to about 149; ask for 300 and you may get up to about 349. Those extra hotels are charged like every other result, so if an exact spend matters, set this number a little below your true budget. Some hotels also arrive with the price fields empty when Agoda has no room offer for your dates — they still count as results and are still charged (roughly 8% to 30% of rows in our tests). Note: a single Agoda search holds anywhere from a few hundred to several thousand listings depending on the destination (Bangkok ≈ 4,000, Tokyo ≈ 900). For very large destinations, split the query by neighborhood, star tier, or property type to go beyond what one search can return."
          },
          "includeHotelDetails": {
            "title": "Include Hotel Details on Every Row",
            "type": "boolean",
            "description": "Fetch the hotel detail page for each result and add amenities, full description, gallery photos, and check-in/out times to every row. Roughly doubles cost — leave off for fast catalog runs (names, prices, stars, ratings)."
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}