{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Scraper API — Hotels, Restaurants & Reviews",
    "description": "TripAdvisor scraper and unofficial TripAdvisor API: extract hotels, restaurants and full review threads with prices, ratings, GPS, amenities, cuisines, hours, awards and photos. Input by URL, keyword or city name, 38 languages. Export JSON, CSV, Excel. From $2.20/1k places, $0.25/1k reviews.",
    "version": "1.1",
    "x-build-id": "LbsDVU0y3O8PcQqSX"
  },
  "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",
        "properties": {
          "search": {
            "title": "🔍 Search — city, region or place name",
            "type": "array",
            "description": "What to scrape. Accepts city/region names (Antalya, Paris, New York City), a numeric TripAdvisor geo ID (187147), or an exact hotel/restaurant name. Plain names work best — 'hotels in Antalya' is understood too (the category is taken from it). A city gives you its whole listing; a place name gives you that one place.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Start URLs (optional)",
            "type": "array",
            "description": "TripAdvisor pages to scrape directly. Supported: /Hotel_Review-, /Restaurant_Review- (single place) and /Hotels-, /Restaurants- (whole city listing). Several place URLs from the same city are resolved in one pass.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "category": {
            "title": "🗂️ Category",
            "enum": [
              "all",
              "hotels",
              "restaurants"
            ],
            "type": "string",
            "description": "What to pull when scraping a city or region. Ignored for URLs that already point at one place. 'All' returns hotels and restaurants, splitting the item limit evenly between them.",
            "default": "all"
          },
          "maxItems": {
            "title": "🔢 Max places",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on dataset rows — one row = one place, with its reviews embedded. 0 = unlimited. Charged at $3.50 / 1,000 places.",
            "default": 10
          },
          "includeReviews": {
            "title": "💬 Include reviews",
            "type": "boolean",
            "description": "Embed reviews in every place record (title, text, rating, dates, trip type, reviewer, sub-ratings, photos, owner responses). Charged separately at $0.50 / 1,000 reviews.",
            "default": false
          },
          "maxReviewsPerPoi": {
            "title": "💬 Max reviews per place",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Cap on reviews per place. Active only when 'Include reviews' is on.",
            "default": 10
          },
          "locale": {
            "title": "🌐 Language",
            "enum": [
              "en-US",
              "en-UK",
              "en-AU",
              "en-CA",
              "en-IN",
              "en-IE",
              "en-NZ",
              "en-ZA",
              "en-SG",
              "en-MY",
              "en-PH",
              "fr",
              "de",
              "de-AT",
              "es",
              "es-AR",
              "es-CL",
              "es-CO",
              "es-MX",
              "es-PE",
              "es-VE",
              "it",
              "pt",
              "pt-PT",
              "nl",
              "sv",
              "da",
              "no",
              "ru",
              "tr",
              "el",
              "iw",
              "in",
              "ja",
              "ko",
              "zh-TW",
              "th",
              "vi"
            ],
            "type": "string",
            "description": "Language the results come back in — descriptions, reviews and amenities are returned in the language you pick.",
            "default": "en-US"
          },
          "maxPois": {
            "title": "📍 Max places per city listing",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Extra cap applied to each city/region listing, on top of 'Max places'. Useful when scraping many cities in one run and you want an even number from each. Leave empty for no per-city cap.",
            "default": 50
          },
          "maxRetries": {
            "title": "🔁 Max retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times a failed request is retried (each retry goes out on a fresh IP). Higher values push through more blocks but use more proxy traffic.",
            "default": 3
          },
          "maxConcurrency": {
            "title": "⚡ Max concurrency",
            "minimum": 2,
            "maximum": 30,
            "type": "integer",
            "description": "How many TripAdvisor requests to run in parallel.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}