{
  "openapi": "3.0.1",
  "info": {
    "title": "Agoda Room Rates Scraper",
    "description": "Scrape every room type and rate plan Agoda shows for a hotel and stay. Just add hotel URLs, ids or names and dates and get stay total, per-night and pre-tax prices, cancellation deadline and policy, breakfast, pay-later, rooms left and bed setup in your currency. $3.50 per 1,000 priced hotel-stays.",
    "version": "1.0",
    "x-build-id": "getmVmISCJrpwfVzX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~agoda-room-rates/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-agoda-room-rates",
        "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/boncross~agoda-room-rates/runs": {
      "post": {
        "operationId": "runs-sync-boncross-agoda-room-rates",
        "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/boncross~agoda-room-rates/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-agoda-room-rates",
        "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": {
          "hotels": {
            "title": "Hotels",
            "type": "array",
            "description": "One entry per hotel: an Agoda hotel URL, the slug from one (four-seasons-hotel-new-york-downtown/hotel/new-york-ny-us), Agoda's numeric property id such as 206039, or a hotel name with its city. Names are looked up through Agoda's own search.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (bulk upload)",
            "type": "array",
            "description": "Agoda page addresses, with the option to load them in bulk from a file, a Google Sheet or a remote list. Use this when you have more links than you want to paste. Combined with anything in the list above.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Maximum hotel-stays for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling on hotel-stays, across every hotel and stay. One hotel-stay is one row, or one row per room and rate plan with Flatten rooms. Zero means no limit. Rows that report an input the actor could not resolve are not counted here and are never charged for.",
            "default": 0
          },
          "maxRows": {
            "title": "Maximum rows for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling on rows. With Flatten rooms a hotel-stay is one row per room and rate plan, so the last stay is cut to fit, keeping its cheapest rates, and is still charged as one hotel-stay. Works alongside Maximum hotel-stays: the run stops at whichever is reached first. Zero means no limit.",
            "default": 0
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Check-in date as YYYY-MM-DD. Leave empty to use the days-ahead field. Ignored when Stays is set. The lowercase spelling checkin still works.",
            "default": ""
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Check-out date as YYYY-MM-DD. Leave empty to use Nights. The lowercase spelling checkout still works.",
            "default": ""
          },
          "checkInDaysAhead": {
            "title": "Check-in days ahead",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "How many days from today to check in. Only used when Check-in is empty. Handy for schedules.",
            "default": 30
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Length of stay. Only used when Check-out is empty.",
            "default": 2
          },
          "stays": {
            "title": "Multiple stays (advanced)",
            "type": "array",
            "description": "Several stays for every hotel, as a list of check-in and check-out pairs. You get one record per hotel per stay.",
            "default": []
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Adults per room.",
            "default": 2
          },
          "childrenAges": {
            "title": "Children (ages)",
            "type": "array",
            "description": "One age per child, for example [7]. Agoda prices and room fit change with them.",
            "default": []
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "How many rooms.",
            "default": 1
          },
          "hideRoomsTooSmall": {
            "title": "Hide rooms too small for your party",
            "type": "boolean",
            "description": "Agoda lists rooms priced for other party sizes alongside yours. Rooms priced for fewer guests than you asked for cannot seat you (a 3-adult search also returns 2-adult rooms, often the cheapest), and are dropped by default. Rooms priced for a larger party are kept, because they can be booked and are sometimes the cheapest option (a solo traveller often pays the 2-adult rate). Each rate says who it is priced for in pricedForAdults. Turn off to get every price.",
            "default": true
          },
          "freeCancellationOnly": {
            "title": "Free-cancellation plans only",
            "type": "boolean",
            "description": "Keep only refundable rate plans.",
            "default": false
          },
          "breakfastOnly": {
            "title": "Breakfast-included plans only",
            "type": "boolean",
            "description": "Keep only plans with breakfast.",
            "default": false
          },
          "roomFilters": {
            "title": "Room filters",
            "type": "array",
            "description": "The filters Agoda shows above a hotel's rooms: \"Non-smoking\", \"Pay later option\", \"Pay at the hotel\", \"Free cancellation\", \"Breakfast included\", \"King bed\", \"Twin Bed\", \"City view\" and any other the hotel offers. Only rates matching all of them are kept. Each row lists the filters the hotel offers in roomFilterOptions.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPerNight": {
            "title": "Minimum per-night price",
            "minimum": 0,
            "type": "number",
            "description": "In the selected currency. 0 turns it off.",
            "default": 0
          },
          "maxPerNight": {
            "title": "Maximum per-night price",
            "minimum": 0,
            "type": "number",
            "description": "In the selected currency. 0 turns it off.",
            "default": 0
          },
          "includeRoomTypes": {
            "title": "Include room-type catalogue",
            "type": "boolean",
            "description": "Add a roomTypes array with each room type's bed setup, occupancy, amenities and images.",
            "default": true
          },
          "flattenRooms": {
            "title": "One row per rate plan",
            "type": "boolean",
            "description": "One dataset row per rate plan, with the hotel and stay fields repeated, instead of one row per hotel and stay with a rooms array.",
            "default": false
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO currency code such as USD, EUR, GBP or JPY. Agoda quotes in it directly and the actor converts nothing.",
            "default": "USD"
          },
          "origin": {
            "title": "Booking origin country",
            "type": "string",
            "description": "Two-letter country Agoda should treat you as booking from, such as US, GB or JP. It affects some rate availability and whether the headline price shows tax.",
            "default": "US"
          },
          "priceStoreName": {
            "title": "Price memory store",
            "type": "string",
            "description": "Name of a key-value store. The actor remembers the lowest per-night price per hotel, stay, occupancy and currency and fills previousLowestPerNight and priceChange on the next run.",
            "default": ""
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed prices",
            "type": "boolean",
            "description": "With a price store set, skip hotel-stays whose lowest price has not moved. Skipped stays are not charged.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.",
            "default": 16
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows. Values above 2000 are treated as 2000.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}