{
  "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": "kqVvfs1zKJWPfif14"
  },
  "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:\n\n🌐 **Direct 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 via Google Search\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 — keyword search 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's relevance ranking\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 extract.\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 is protected by **DataDome** anti-bot. Datacenter IPs get blocked within seconds — so this scraper defaults to **🏘️ Apify Residential Proxy** if you leave this blank.\n\n✅ **Residential** (recommended) — bypasses DataDome reliably\n⚠️ **Datacenter** — works briefly, then gets challenged\n❌ **No proxy** — almost always blocked\n\n🧠 The scraper uses sticky sessions automatically, so cookies stay valid across page → bundle → GraphQL calls."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}