{
  "openapi": "3.0.1",
  "info": {
    "title": "Tripadvisor Review Scraper: Hotels, Restaurants & Attractions",
    "description": "Collect structured Tripadvisor review data with ease. The actor gathers review text, star ratings, timestamps, reviewer profiles, and helpful votes. Ideal for analysts, agencies, and businesses needing deep customer insights.",
    "version": "0.1",
    "x-build-id": "iqoBy6CdRsOA04BJe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~tripadvisor-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-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/api-empire~tripadvisor-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-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/api-empire~tripadvisor-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-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 Property URLs, Hotel Names, or Keywords",
            "type": "array",
            "description": "📌 Drop one or more of the following — mix & match freely, across all 3 property types:\n\n🌐 **Direct URLs** — best results, fastest extraction\n   ↳ 🏨 Hotel: `https://www.tripadvisor.com/Hotel_Review-g60763-d208453-Reviews-Hilton_New_York_Times_Square-New_York_City_New_York.html`\n   ↳ 🍽️ Restaurant: `https://www.tripadvisor.com/Restaurant_Review-g60864-d477685-Reviews-Crescent_City_Brewhouse-New_Orleans_Louisiana.html`\n   ↳ 🎡 Attraction: `https://www.tripadvisor.com/Attraction_Review-g60763-d105127-Reviews-Central_Park-New_York_City_New_York.html`\n\n🏨 **Hotel names** — auto-resolved via Google Search (hotel lookup only)\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, and are required for restaurants/attractions — the name/keyword lookup only resolves hotels.",
            "items": {
              "type": "string"
            }
          },
          "maxComments": {
            "title": "📊 Maximum Reviews per URL",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "🎯 How many reviews to extract from each property (hotel, restaurant, or attraction).\n\n⚡ Small runs (1–100) → seconds\n🚀 Large runs (1000+) → minutes\n💎 Up to 10,000 per property — 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 separate relevance ranking on this data source — this currently returns the exact same order as **newest**, shown honestly rather than as a distinct sort\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
          },
          "includePropertyIntelligence": {
            "title": "🏨🍽️🎡 Include Property Intelligence Block",
            "type": "boolean",
            "description": "📊 When enabled, every review row includes a `propertyIntelligence` object: ranking text (e.g. \"#285 of 525 hotels in New York City\"), price range (hotel/restaurant only), hotel amenities — highlighted & non-highlighted (hotel only), telephone, official website, and hero image URL.\n\n🏨 Amenities and 💲 price range are honestly scoped per property type — `null` when they genuinely don't apply (e.g. price on an attraction), never faked.\n\n⚡ Disable for a lighter, review-only payload.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration (Residential Recommended) 🛡️",
            "type": "object",
            "description": "🔒 TripAdvisor is protected by anti-bot defenses. Datacenter IPs get blocked within seconds — so this scraper defaults to **🏘️ Apify Residential Proxy** if you leave this blank.\n\n✅ **Residential** (recommended) — bypasses anti-bot protection 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 every step of one property's collection."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}