{
  "openapi": "3.0.1",
  "info": {
    "title": "Marriott Reviews Scraper",
    "description": "Scrape guest reviews for any Marriott hotel. Just add hotel codes or links and get the rating, title, full text, date, stay dates, trip type, member level, six category ratings and the hotel's reply. Filter by rating, language, trip type, keyword or date.",
    "version": "1.0",
    "x-build-id": "6MudIkbLglReuEvo1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~marriott-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-marriott-reviews",
        "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-reviews/runs": {
      "post": {
        "operationId": "runs-sync-boncross-marriott-reviews",
        "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-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-marriott-reviews",
        "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": "The Marriott hotels to read reviews for: a hotel code such as EDIWH, or a marriott.com hotel page address. Any Marriott brand works (W, Sheraton, Westin, Ritz-Carlton, Courtyard and the rest).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (bulk upload)",
            "type": "array",
            "description": "marriott.com hotel 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 hotels 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"
                }
              }
            }
          },
          "maxReviewsPerHotel": {
            "title": "Maximum reviews per hotel",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many reviews for each hotel. Set it high to take everything: there is no depth limit, and a hotel with 13,000 reviews returns all of them.",
            "default": 100
          },
          "maxItems": {
            "title": "Maximum results for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "A run-wide ceiling on reviews across every hotel. The per-hotel limit applies to each hotel separately, so ten hotels at 50 each returns 500; set this to cap the total. Zero means no run-wide limit. Summary rows and rows reporting a hotel that could not be read are not counted here.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "newest",
              "oldest",
              "highest",
              "lowest",
              "helpful",
              "relevant"
            ],
            "type": "string",
            "description": "The order reviews are read in. Newest first is the one to use when you only want recent reviews.",
            "default": "newest"
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews rated at least this many stars out of 5. Zero means no lower limit.",
            "default": 0
          },
          "maxRating": {
            "title": "Maximum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews rated at most this many stars out of 5, for example 2 to read only the complaints. Zero means no upper limit.",
            "default": 0
          },
          "reviewLanguages": {
            "title": "Languages",
            "type": "array",
            "description": "Keep only reviews written in these languages, as two-letter codes such as en, fr, de, es, ja, zh. Leave empty for every language.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tripTypes": {
            "title": "Trip types",
            "type": "array",
            "description": "Keep only reviews from these kinds of trip, as the guest reported it. Leave empty for every kind. Reviews where the guest did not say are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "Solo",
                "Couple",
                "Family",
                "Group"
              ],
              "enumTitles": [
                "Solo",
                "Couple",
                "Family",
                "Group"
              ]
            },
            "default": []
          },
          "memberLevels": {
            "title": "Marriott Bonvoy member levels",
            "type": "array",
            "description": "Keep only reviews from guests at these loyalty levels, as the guest reported it. Leave empty for every level.",
            "items": {
              "type": "string",
              "enum": [
                "Non-Member",
                "Member",
                "Silver",
                "Gold",
                "Platinum",
                "Titanium",
                "Ambassador"
              ],
              "enumTitles": [
                "Non-member",
                "Member",
                "Silver Elite",
                "Gold Elite",
                "Platinum Elite",
                "Titanium Elite",
                "Ambassador Elite"
              ]
            },
            "default": []
          },
          "containsText": {
            "title": "Contains keyword",
            "type": "string",
            "description": "Keep only reviews mentioning this word or phrase, for example breakfast or noisy.",
            "default": ""
          },
          "reviewedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Keep only reviews posted on or after this date, as YYYY-MM-DD.",
            "default": ""
          },
          "reviewedBefore": {
            "title": "Posted on or before",
            "type": "string",
            "description": "Keep only reviews posted on or before this date, as YYYY-MM-DD. A bare date means the end of that day.",
            "default": ""
          },
          "onlyWithOwnerResponse": {
            "title": "Only reviews the hotel replied to",
            "type": "boolean",
            "description": "Keep only reviews the hotel has posted a reply to.",
            "default": false
          },
          "includeSummary": {
            "title": "Add a rating summary row per hotel",
            "type": "boolean",
            "description": "Adds one row per hotel, before its reviews, with the hotel's average rating, how many reviews it has, how many fall on each star, its average category ratings (cleanliness, dining, location, service, amenities, value) and the mix of trip types and member levels. The row has isSummary set to true and is billed as its own event.",
            "default": false
          },
          "onlyNewReviews": {
            "title": "Only reviews not seen in earlier runs",
            "type": "boolean",
            "description": "Skip reviews already returned by a previous run. Needs a de-duplication store name.",
            "default": false
          },
          "dedupStoreName": {
            "title": "De-duplication store name",
            "type": "string",
            "description": "Name of a key-value store that remembers which reviews have already been returned, so a scheduled run gives you only what is new.",
            "default": ""
          },
          "maxConcurrency": {
            "title": "Hotels at once",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many hotels are read side by side. Each hotel's reviews are still read one page at a time. The default suits almost every run.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}