{
  "openapi": "3.0.1",
  "info": {
    "title": "Marriott Hotel Search Scraper",
    "description": "Scrape every Marriott hotel for a destination and dates. Add a city and get each Ritz-Carlton, St. Regis, W, Westin, Sheraton, Courtyard, Moxy and Aloft with nightly and stay prices, taxes, mandatory fees, points cost, rating, coordinates and distance. $1.20 per 1,000 hotels.",
    "version": "1.0",
    "x-build-id": "F73As3VvUfOLUWUjW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~marriott-hotel-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-marriott-hotel-search",
        "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~marriott-hotel-search/runs": {
      "post": {
        "operationId": "runs-sync-boncross-marriott-hotel-search",
        "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~marriott-hotel-search/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-marriott-hotel-search",
        "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",
            "type": "array",
            "description": "Where to search. Prose the way you would type it into marriott.com (\"Times Square, New York\", \"Edinburgh, Scotland\", \"Bali, Indonesia\") or a coordinate pair, \"55.9533,-3.1883\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerDestination": {
            "title": "Max hotels per destination",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop after this many hotels per destination. Marriott pages 40 at a time and this actor follows the pages for you.",
            "default": 40
          },
          "maxItems": {
            "title": "Maximum results for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling across every destination. Ten cities at 40 each returns 400; set this to cap the total. Zero means no run-wide limit.",
            "default": 0
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty to use the rolling window below.",
            "default": ""
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "YYYY-MM-DD. Leave empty and the stay runs for the number of nights below.",
            "default": ""
          },
          "checkInDaysAhead": {
            "title": "Check-in days ahead",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Used only when check-in is empty, so a scheduled run keeps asking about a stay the same distance away rather than one that drifts into the past.",
            "default": 30
          },
          "nights": {
            "title": "Nights",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Used only when check-out is empty.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many guests in the party.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 9,
            "type": "integer",
            "description": "How many rooms to price.",
            "default": 1
          },
          "rateMode": {
            "title": "Rates",
            "enum": [
              "cash",
              "points"
            ],
            "type": "string",
            "description": "Cash prices the stay in money. Points prices it as a Marriott Bonvoy award, in points per night, where the hotel offers one: the cash columns are then empty. Run twice to have both.",
            "default": "cash"
          },
          "radiusMiles": {
            "title": "Search radius (miles)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How far from the destination to look. Marriott's own site uses 50.",
            "default": 25
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "distance",
              "price-low",
              "price-high",
              "rating",
              "reviews",
              "name",
              "brand",
              "city",
              "points"
            ],
            "type": "string",
            "description": "Which hotels come back first.",
            "default": "distance"
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Optional. Keep only these Marriott brand codes (for example AK for Autograph Collection, MC for Marriott). The search itself is narrowed, so a short brand list reads fewer pages. Every run also writes the brands present near each destination to the run's key-value store, under a FACETS- record, with a count for each.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "amenities": {
            "title": "Amenities",
            "type": "array",
            "description": "Optional. Keep only hotels that have every amenity listed, by the name Marriott shows (Pool, Pets welcome, Free breakfast, EV Charging, Fitness center, Elite Member Lounge, Kitchen, Room service…) or its code (pool, pet-friendly, breakfast). The FACETS- record lists the amenities near each destination, with codes and counts.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "hotelTypes": {
            "title": "Hotel type",
            "type": "array",
            "description": "Optional. Keep only hotels of these types, by the name Marriott shows (Resort, Apartment, Extended stay, New hotel, Timeshare) or its code (resort, apartment, extended-stay, new, timeshare). The FACETS- record lists the types near each destination, with codes and counts.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "serviceTypes": {
            "title": "Service type",
            "type": "array",
            "description": "Optional. Keep only hotels of these service levels: Luxury, Full service or Select Service (codes luxury, full-service, select-service).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "transportation": {
            "title": "Transportation",
            "type": "array",
            "description": "Optional. Keep only hotels offering these, by name (Airport shuttle, Parking, Free Parking, Car rental desk) or code (airport-shuttle, parking, free-parking, car-rental-desk).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPriceUsd": {
            "title": "Minimum nightly price (US dollars)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only hotels whose nightly rate is at least this, in US dollars, the way marriott.com's own price filter works. Prices in the rows stay in the hotel's currency. Zero means no minimum.",
            "default": 0
          },
          "maxPriceUsd": {
            "title": "Maximum nightly price (US dollars)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only hotels whose nightly rate is at most this, in US dollars, the way marriott.com's own price filter works. Prices in the rows stay in the hotel's currency. Zero means no maximum.",
            "default": 0
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep only hotels rated at least this, out of 5. Zero keeps everything. Accepts a decimal, so 4.5 is a valid floor.",
            "default": 0
          },
          "onlyAvailable": {
            "title": "Only hotels with rooms for these dates",
            "type": "boolean",
            "description": "Drop properties that came back sold out or unavailable for the stay.",
            "default": false
          },
          "includeUnavailable": {
            "title": "Ask for unavailable hotels too",
            "type": "boolean",
            "description": "Marriott can return sold-out properties alongside bookable ones, which is what you want when mapping a market rather than booking a room.",
            "default": true
          },
          "distanceUnit": {
            "title": "Distance unit",
            "enum": [
              "mi",
              "km"
            ],
            "type": "string",
            "description": "Unit for the distance from the searched place.",
            "default": "mi"
          },
          "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
          },
          "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": 8
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}