{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Reviews Scraper — Search & Monitor",
    "description": "TripAdvisor reviews scraper for hotels, restaurants, attractions, activities, airlines and cruises. Discover places by search or location ID, filter by rating, language, date, traveler type, keyword, helpful votes and owner replies, export summaries, use proxy fallback and monitor only new reviews.",
    "version": "0.1",
    "x-build-id": "0POSuLg9ipHxZrtBS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zenomastro~tripadvisor-reviews-reliable/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zenomastro-tripadvisor-reviews-reliable",
        "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/zenomastro~tripadvisor-reviews-reliable/runs": {
      "post": {
        "operationId": "runs-sync-zenomastro-tripadvisor-reviews-reliable",
        "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/zenomastro~tripadvisor-reviews-reliable/run-sync": {
      "post": {
        "operationId": "run-sync-zenomastro-tripadvisor-reviews-reliable",
        "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": {
          "placeUrls": {
            "title": "TripAdvisor place URLs",
            "minItems": 0,
            "maxItems": 100,
            "type": "array",
            "description": "TripAdvisor review pages of hotels, restaurants, attractions/activities, airlines or cruises, one URL per line, e.g. https://www.tripadvisor.com/Hotel_Review-g188107-d231860-Reviews-Beau_Rivage_Palace-Lausanne_Canton_of_Vaud.html. Any TripAdvisor domain works (.com, .it, .co.uk, ...), and so does a link to one review (ShowUserReviews). Leave empty when you use start URLs, location IDs or searches below.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerPlace": {
            "title": "Maximum reviews per place",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum review rows returned (and billed) per place after filters, e.g. 200 (up to 10,000). For very large places also raise Maximum source pages per place (20 reviews per page).",
            "default": 500
          },
          "maxTotalReviews": {
            "title": "Maximum total reviews",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap on review rows across all places in this run, e.g. 1000, for predictable runtime and spend.",
            "default": 5000
          },
          "startUrls": {
            "title": "Start URLs with your own IDs",
            "maxItems": 100,
            "type": "array",
            "description": "Optional. Same as place URLs, plus your own data per URL (userData, under Advanced in the editor), which is returned unchanged as customData on every row of that place, e.g. {\"crmId\": \"A1\"}, to join the results with your CRM or sheet. Through the API you can also pass rows of another TripAdvisor dataset that have a url or webUrl field.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locationIds": {
            "title": "TripAdvisor location IDs",
            "maxItems": 100,
            "type": "array",
            "description": "Optional numeric TripAdvisor location IDs (the d-number in a place URL, e.g. 231860 from ...-d231860-...). Useful when another tool or dataset already provides them.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Place, brand or destination searches",
            "maxItems": 25,
            "type": "array",
            "description": "Optional. Find places by name, brand or destination, e.g. \"Beau-Rivage Palace Lausanne\", then scrape their reviews. Best effort: TripAdvisor blocks automated search, so names are resolved through public web search. Paste URLs for the most reliable runs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchLocale": {
            "title": "Discovery locale",
            "type": "string",
            "description": "Locale used to resolve searches, e.g. en-US, it-IT or de-DE.",
            "default": "en-US"
          },
          "maxDiscoveredPlaces": {
            "title": "Maximum discovered places",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of places taken from all searches together, e.g. 10.",
            "default": 50
          },
          "ratings": {
            "title": "Ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Only reviews with these star ratings, e.g. 1 and 2 stars to collect complaints. Applied by TripAdvisor itself, so even rare ratings are found quickly. Empty means all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "reviewedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Only reviews published on or after this date: YYYY-MM-DD (e.g. 2026-01-31), ISO 8601, or a relative period counted back from the run start such as 7 days, 2 weeks or 3 months (ideal for schedules). Paging stops once TripAdvisor's pages are older than this date, so recent-only runs finish fast.",
            "default": ""
          },
          "reviewedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Only reviews published on or before this date: YYYY-MM-DD (e.g. 2026-06-30), ISO 8601, or a relative period such as 30 days.",
            "default": ""
          },
          "languageCodes": {
            "title": "Review languages",
            "type": "array",
            "description": "Only reviews written in these languages, e.g. en, it, de, fr or zh-TW, returned in their original text. Each language is read separately (applied by TripAdvisor). Empty means all languages.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "tripTypes": {
            "title": "Traveler types",
            "type": "array",
            "description": "Only reviews from these traveler types: COUPLES, FAMILY, FRIENDS, SOLO or BUSINESS. Applied by TripAdvisor. Empty means all traveler types.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "visitMonths": {
            "title": "Months of the stay or visit",
            "uniqueItems": true,
            "type": "array",
            "description": "Only reviews of stays or visits in these months, of any year, e.g. June, July and August for the summer season. TripAdvisor records the month of the visit (output field stayMonth). Empty means all months.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12"
              ],
              "enumTitles": [
                "January",
                "February",
                "March",
                "April",
                "May",
                "June",
                "July",
                "August",
                "September",
                "October",
                "November",
                "December"
              ]
            },
            "default": []
          },
          "containsText": {
            "title": "Review text contains",
            "type": "string",
            "description": "Only reviews whose title or text contains this word or phrase (case-insensitive), e.g. breakfast. Filtered-out reviews are not billed.",
            "default": ""
          },
          "minHelpfulVotes": {
            "title": "Minimum helpful votes",
            "minimum": 0,
            "type": "integer",
            "description": "Only reviews that at least this many readers marked as helpful, e.g. 1. 0 means no minimum.",
            "default": 0
          },
          "ownerReply": {
            "title": "Owner/management reply",
            "enum": [
              "any",
              "yes",
              "no"
            ],
            "type": "string",
            "description": "Return any reviews, only reviews with a management (owner) reply, or only reviews without one, e.g. to find unanswered complaints.",
            "default": "any"
          },
          "machineTranslation": {
            "title": "Translate reviews into English",
            "type": "boolean",
            "description": "On (default, as on tripadvisor.com): reviews written in other languages are returned machine-translated into English; originalLanguage keeps the language they were written in and isMachineTranslated is true. Off: every review keeps its original text and language (a few extra requests per page). Useful for multilingual NLP and sentiment analysis.",
            "default": true
          },
          "sortOutput": {
            "title": "Output order",
            "enum": [
              "source",
              "newest",
              "oldest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "TripAdvisor returns reviews newest first. The other options only reorder the reviews collected in this run (up to Maximum reviews per place); they do not fetch the oldest or best-rated reviews of the whole place.",
            "default": "source"
          },
          "includePlaceSummary": {
            "title": "Include place summary",
            "type": "boolean",
            "description": "Add one free place_summary row per place with its name, type and total review count, plus the exact 1-5 rating distribution and average rating of all its reviews (5 tiny extra requests per place; airlines get the total count only).",
            "default": true
          },
          "includeReviewInsights": {
            "title": "Include review insights",
            "type": "boolean",
            "description": "Add one free review_insights row per place over the returned reviews: average rating, owner reply rate, rating, traveler-type and language distributions, average sub-ratings (e.g. Service, Value) and share of reviews with photos.",
            "default": true
          },
          "includeReviewerInfo": {
            "title": "Include reviewer details",
            "type": "boolean",
            "description": "Reviewer name, username, profile link, avatar, hometown and ID. Turn off to collect reviews without reviewers' personal data (data minimisation, e.g. for GDPR); the review text, ratings, dates, photos and owner replies stay.",
            "default": true
          },
          "monitorName": {
            "title": "Review monitor name",
            "type": "string",
            "description": "Name for a recurring review monitor, e.g. lausanne-hotels-weekly. Runs with the same name remember which reviews they already delivered and flag new ones with isNew.",
            "default": ""
          },
          "onlyNew": {
            "title": "Emit only new reviews",
            "type": "boolean",
            "description": "With a monitor name, return (and bill) only reviews that earlier runs of the same monitor did not deliver. Reviews not delivered because of a spending limit come in the next run.",
            "default": false
          },
          "maxPagesPerPlace": {
            "title": "Maximum source pages per place",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety ceiling on TripAdvisor review pages read per place (20 reviews per page), e.g. 150 pages = up to 3,000 reviews scanned. Selective filters may need more pages than reviews returned.",
            "default": 150
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 10,
            "maximum": 90,
            "type": "integer",
            "description": "Maximum seconds for each TripAdvisor request, e.g. 30.",
            "default": 30
          },
          "retries": {
            "title": "Retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "How many times a failed TripAdvisor request is retried (with increasing pauses) after a network error, rate limit or temporary server error, e.g. 2.",
            "default": 2
          },
          "autoProxyFallback": {
            "title": "Automatic Apify Proxy fallback",
            "type": "boolean",
            "description": "Start with direct requests (fastest); if TripAdvisor blocks a place, retry it through the Apify datacenter proxy (included in the price).",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy settings. Leave disabled for direct-first mode with automatic proxy fallback. Residential groups are replaced by the included datacenter proxy; your own proxy URLs are used as they are.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}