{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Reviews Scraper",
    "description": "Scrape TripAdvisor reviews to JSON from hotel, restaurant, or attraction URLs or location IDs. No TripAdvisor account or API key. Get rating, text, trip type, photos, sub-ratings, and owner replies. Filter by rating, traveler type, and date. Empty locations cost $0. $0.40 per 1,000 reviews.",
    "version": "0.1",
    "x-build-id": "KL4b2JvX9qR3fILn5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apihq~tripadvisor-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apihq-tripadvisor-reviews-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/apihq~tripadvisor-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apihq-tripadvisor-reviews-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/apihq~tripadvisor-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apihq-tripadvisor-reviews-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": {
          "url": {
            "title": "Location (URL or id)",
            "type": "string",
            "description": "A single TripAdvisor detail page URL (hotel, restaurant, or attraction) or a bare numeric location id (e.g. '93589'). An unrecognizable value comes back as a success:false record (code VALIDATION_FAILED), not a rejected run."
          },
          "urls": {
            "title": "Multiple locations",
            "type": "array",
            "description": "List of TripAdvisor detail URLs or numeric location ids. Merged with url and de-duplicated (a URL and its bare id count as the same location); up to 50 unique locations are processed per run. A location with no reviews comes back as a success:false record, so one bad location never blocks the batch.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "Max reviews per location",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum target per location, not a guaranteed count. The Actor may return fewer when fewer reviews are available, or when an anti-bot challenge, timeout, or capacity stop ends the walk early (reviews already delivered are kept, the run still succeeds, and only delivered reviews are charged). Very large values are also bounded by the run's time limit: the Actor stops cleanly with a free diagnostic before the run times out."
          },
          "language": {
            "title": "Review language",
            "type": "string",
            "description": "Two-letter language code (e.g. 'en', 'fr', 'de', or a locale like 'pt-BR'). Filters reviews to that language and sets the machine-translation target. Defaults to 'en'. An unrecognized value falls back to 'en'.",
            "default": "en"
          },
          "ratings": {
            "title": "Ratings",
            "type": "array",
            "description": "Keep only reviews with these bubble ratings (1 to 5). Leave empty for all ratings. If you pass a mix of valid and invalid values, the valid ones are used and the rest ignored; if every value you pass is invalid (e.g. only [6]), the run stops immediately with one free INVALID_FILTER row and still succeeds, rather than silently returning unfiltered reviews.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 - Terrible",
                "2 - Poor",
                "3 - Average",
                "4 - Very good",
                "5 - Excellent"
              ]
            }
          },
          "travelerTypes": {
            "title": "Traveler types",
            "type": "array",
            "description": "Keep only reviews from these traveler types. Leave empty for all types. A mix of valid and invalid values uses the valid ones; if every value is invalid, the run stops with one free INVALID_FILTER row and still succeeds, rather than returning unfiltered reviews.",
            "items": {
              "type": "string",
              "enum": [
                "Business",
                "Couples",
                "Family",
                "Friends",
                "Solo"
              ]
            }
          },
          "dateFrom": {
            "title": "Reviews from (inclusive)",
            "type": "string",
            "description": "Keep only reviews published on or after this date (YYYY-MM-DD). Leave empty for no lower bound. A non-empty value that is not a valid date, or a range where dateFrom is after dateTo, stops the run with one free INVALID_FILTER row (and still succeeds), rather than returning reviews outside your window."
          },
          "dateTo": {
            "title": "Reviews to (inclusive)",
            "type": "string",
            "description": "Keep only reviews published on or before this date (YYYY-MM-DD). Leave empty for no upper bound. A non-empty value that is not a valid date stops the run with one free INVALID_FILTER row (and still succeeds), rather than returning reviews outside your window."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}