{
  "openapi": "3.0.1",
  "info": {
    "title": "Tripadvisor Review Scraper",
    "description": "Scrape Tripadvisor reviews from any hotel, restaurant, or attraction. This actor extracts reviewer names, ratings, dates, comments, and location details. Perfect for sentiment analysis, competitor tracking, and travel market research.",
    "version": "0.1",
    "x-build-id": "PtYkemUQTtLebvq8p"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~tripadvisor-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-tripadvisor-review-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/scraper-engine~tripadvisor-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-tripadvisor-review-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/scraper-engine~tripadvisor-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-tripadvisor-review-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",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🔗 TripAdvisor URLs, Hotel Names, or Keywords",
            "type": "array",
            "description": "📌 Drop one or more of the following — mix & match freely. This actor extracts reviews from **hotel pages only** (TripAdvisor `Hotel_Review` URLs); restaurant and attraction URLs are not supported here.\n\n🌐 **Direct hotel URLs** — best results, fastest extraction\n   ↳ e.g. `https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html`\n\n🏨 **Hotel names** — auto-resolved to a hotel page for you\n   ↳ e.g. `Hilton New York Times Square`\n\n🔍 **Keywords** — broader matches, may pick the most relevant hotel\n   ↳ e.g. `luxury hotel New York`\n\n💡 **Tip:** Direct URLs always give the most accurate results — name/keyword lookup can be hit-or-miss.",
            "items": {
              "type": "string"
            }
          },
          "maxComments": {
            "title": "📊 Maximum Reviews per URL",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "🎯 How many reviews to extract from each hotel.\n\n⚡ Small runs (1–100) → seconds\n🚀 Large runs (1000+) → minutes\n💎 Enterprise (up to 10,000) → fully supported\n\n📥 The scraper auto-paginates — no need to click 'Next Page'.",
            "default": 10
          },
          "sortOrder": {
            "title": "🔀 Review Sort Order",
            "enum": [
              "newest",
              "oldest",
              "relevant",
              "rating"
            ],
            "type": "string",
            "description": "🗂️ Choose the order in which reviews are fetched.\n\n🆕 **newest** — most recent first (default, best for monitoring)\n📜 **oldest** — earliest reviews first\n⭐ **relevant** — TripAdvisor does not expose a distinct relevance ranking on this data source, so this currently returns the same order as \"newest\"\n🏆 **rating** — highest rating first",
            "default": "newest"
          },
          "reviewsLanguages": {
            "title": "🌍 Review Language",
            "enum": [
              "ALL_REVIEW_LANGUAGES",
              "English",
              "Spanish",
              "French",
              "German",
              "Italian",
              "Portuguese",
              "Dutch",
              "Russian",
              "Japanese",
              "Korean",
              "Chinese (Simplified)",
              "Chinese (Traditional)",
              "Arabic",
              "Turkish",
              "Hebrew",
              "Swedish",
              "Norwegian",
              "Danish",
              "Finnish",
              "Polish",
              "Czech",
              "Hungarian",
              "Romanian",
              "Greek",
              "Thai",
              "Vietnamese",
              "Indonesian",
              "Malay",
              "Hindi"
            ],
            "type": "string",
            "description": "🗣️ Pick which language to extract reviews in.\n\n🌐 Choose **All Languages** to keep every locale, or pick a specific language for a focused dataset.",
            "default": "English"
          },
          "reviewRatings": {
            "title": "⭐ Review Rating Filter",
            "enum": [
              "ALL_REVIEW_RATINGS",
              "POSITIVE",
              "NEGATIVE",
              "AVERAGE",
              "5",
              "4",
              "3",
              "2",
              "1"
            ],
            "type": "string",
            "description": "🎯 Choose which star ratings to keep after fetching.\n\n🌟 **All Ratings** — keep every review (default)\n👍 **Positive** — combine 4 + 5 star reviews\n👎 **Negative** — combine 1 + 2 star reviews\n😐 **Average** — only 3 star reviews\n\nOr pick a specific star count for a single-tier dataset.",
            "default": "ALL_REVIEW_RATINGS"
          },
          "scrapeReviewerInfo": {
            "title": "👤 Include Reviewer Profile Info",
            "type": "boolean",
            "description": "🪪 When enabled, each review row includes the full reviewer profile (name, username, location, avatar, contribution counts, profile link).\n\n🔒 Disable for privacy-sensitive runs or when you only need review text + ratings — the `user` field becomes `null` in the output.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration (Residential Recommended) 🛡️",
            "type": "object",
            "description": "🔒 TripAdvisor restricts traffic from non-residential IP addresses, so this scraper defaults to **🏘️ Apify Residential Proxy** if you leave this blank.\n\n✅ **Residential** (recommended) — most reliable results\n⚠️ **Datacenter** — works briefly, then becomes unreliable\n❌ **No proxy** — not recommended, results will be inconsistent\n\n🧠 The scraper reuses one proxy session per hotel automatically, so results stay consistent across the run."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}