{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Hotels & Reviews Scraper | $3.50 / 1k",
    "description": "Scrape TripAdvisor hotels, restaurants, things to do, and reviews in one Actor. Get prices, star ratings, GPS,\n  amenities, hours, photos, awards, and full review threads. Input by URL, search keyword, or city name. $3.50 / 1k\n  places, $0.50 / 1k reviews.",
    "version": "1.0",
    "x-build-id": "2dsxaWM9aGT8bzlD1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/pro100chok~tripadvisor-all-in-one/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-pro100chok-tripadvisor-all-in-one",
        "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/pro100chok~tripadvisor-all-in-one/runs": {
      "post": {
        "operationId": "runs-sync-pro100chok-tripadvisor-all-in-one",
        "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/pro100chok~tripadvisor-all-in-one/run-sync": {
      "post": {
        "operationId": "run-sync-pro100chok-tripadvisor-all-in-one",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Input mode",
            "enum": [
              "startUrls",
              "searchTerms",
              "locations"
            ],
            "type": "string",
            "description": "How to discover what to scrape. 'startUrls' takes any TripAdvisor page URL. 'searchTerms' walks every typeahead match for the keyword (city + named POIs). 'locations' walks city listings only — accepts city names or numeric TripAdvisor geo IDs.",
            "default": "locations"
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "TripAdvisor URLs to scrape. Supported: /Hotel_Review-, /Restaurant_Review-, /Attraction_Review-, /Hotels-, /Restaurants-, /Attractions-. Used only when mode = 'startUrls'.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Free-text keywords (e.g. 'Paris', 'Hotels in Rome'). Resolved via TripAdvisor typeahead. Used only when mode = 'searchTerms'.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Cities",
            "type": "array",
            "description": "City names or numeric TripAdvisor geo IDs. Names are resolved via TripAdvisor typeahead at runtime (the first geographic match wins). Used only when mode = 'locations'. Examples: Paris, Dubai, New York City, 187791.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category",
            "enum": [
              "all",
              "hotels",
              "restaurants",
              "attractions"
            ],
            "type": "string",
            "description": "What to fetch when expanding a city or keyword. Ignored for direct detail-page start URLs.",
            "default": "all"
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "If true, fetch reviews for every POI scraped (charged separately as the 'reviews' event at $0.50 / 1,000).",
            "default": false
          },
          "maxReviewsPerPoi": {
            "title": "Max reviews per POI",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap on reviews per place. Active only when 'Include reviews' is on. Each review is charged at $0.50 / 1,000.",
            "default": 10
          },
          "maxPois": {
            "title": "Max POIs per listing",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on POIs pulled from each city listing in 'searchTerms' / 'locations' modes. Each place record is charged at $3.50 / 1,000.",
            "default": 50
          },
          "maxItems": {
            "title": "Max total items",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on total dataset rows (each row = one place record with reviews embedded). 0 = unlimited.",
            "default": 10
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "BCP-47 language tag used for typeahead and the Accept-Language header (e.g. en-US, fr-FR, de-DE).",
            "default": "en-US"
          },
          "maxRetries": {
            "title": "Max retries",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many times to retry a failed request (per page) before giving up. Each retry rotates the proxy session to a new IP.",
            "default": 5
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "How many TripAdvisor pages to fetch in parallel. Each worker uses its own IP via session rotation.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}