{
  "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": "dqUQFATwNndaK2gwi"
  },
  "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": "Direct TripAdvisor Hotel, Restaurant, Attraction/Activity, Airline or Cruise review URLs. Leave empty when using locationIds or searchQueries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerPlace": {
            "title": "Maximum reviews per place",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum matching paid review rows emitted for each unique TripAdvisor place.",
            "default": 500
          },
          "maxTotalReviews": {
            "title": "Maximum total reviews",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard result cap across all places for predictable runtime and spend.",
            "default": 5000
          },
          "ratings": {
            "title": "Ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional 1-5 rating filter. 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": []
          },
          "languageCodes": {
            "title": "Review languages",
            "type": "array",
            "description": "Optional ISO language codes such as en, it, de, fr. Each language is fetched as a separate source slice for better coverage.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "reviewedAfter": {
            "title": "Published after",
            "type": "string",
            "description": "Optional inclusive lower boundary: YYYY-MM-DD or ISO 8601.",
            "default": ""
          },
          "reviewedBefore": {
            "title": "Published before",
            "type": "string",
            "description": "Optional inclusive upper boundary: YYYY-MM-DD or ISO 8601.",
            "default": ""
          },
          "containsText": {
            "title": "Review text contains",
            "type": "string",
            "description": "Optional case-insensitive keyword across title and review text. Filtered rows are not billed.",
            "default": ""
          },
          "tripTypes": {
            "title": "Traveler types",
            "type": "array",
            "description": "Optional TripAdvisor traveler types such as COUPLES, FAMILY, FRIENDS, SOLO, BUSINESS.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minHelpfulVotes": {
            "title": "Minimum helpful votes",
            "minimum": 0,
            "type": "integer",
            "description": "Only emit reviews with at least this many helpful votes.",
            "default": 0
          },
          "ownerReply": {
            "title": "Owner/management reply",
            "enum": [
              "any",
              "yes",
              "no"
            ],
            "type": "string",
            "description": "Return any reviews, only reviews with a management reply, or only reviews without one.",
            "default": "any"
          },
          "sortOutput": {
            "title": "Output order",
            "enum": [
              "source",
              "newest",
              "oldest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Preserve TripAdvisor source order or sort collected matching rows before output.",
            "default": "source"
          },
          "includePlaceSummary": {
            "title": "Include place summary",
            "type": "boolean",
            "description": "Add one free place-summary row with place type, name and TripAdvisor total review count.",
            "default": true
          },
          "maxPagesPerPlace": {
            "title": "Maximum source pages per place",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety ceiling for TripAdvisor pagination. The current public review flow returns 20 reviews per page.",
            "default": 150
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 10,
            "maximum": 90,
            "type": "integer",
            "description": "Maximum seconds for each TripAdvisor GraphQL request.",
            "default": 30
          },
          "retries": {
            "title": "Retries",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries each source request after transient HTTP, GraphQL, rate-limit, or network failures.",
            "default": 2
          },
          "autoProxyFallback": {
            "title": "Automatic Apify Proxy fallback",
            "type": "boolean",
            "description": "Try direct requests first; if TripAdvisor blocks the place, retry through Apify Proxy when available.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional explicit proxy configuration. Leave disabled for fast direct-first mode.",
            "default": {
              "useApifyProxy": false
            }
          },
          "monitorKey": {
            "title": "Persistent review monitor key",
            "type": "string",
            "description": "Reuse the same key on scheduled runs to mark reviews already seen by this Actor.",
            "default": ""
          },
          "onlyNew": {
            "title": "Emit only new reviews",
            "type": "boolean",
            "description": "With monitorKey, output and bill only reviews that were not seen in prior runs.",
            "default": false
          },
          "includeReviewInsights": {
            "title": "Include review insights",
            "type": "boolean",
            "description": "Add a free per-source summary with average score, reply rate and score distribution for the matched review sample.",
            "default": true
          },
          "locationIds": {
            "title": "TripAdvisor location IDs",
            "maxItems": 100,
            "type": "array",
            "description": "Optional numeric d-IDs from TripAdvisor URLs. Useful when another Actor or dataset already provides location IDs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Place, brand or destination searches",
            "maxItems": 25,
            "type": "array",
            "description": "Use TripAdvisor's public typeahead GraphQL surface to discover reviewable hotels, restaurants, attractions and other places by name, brand or destination.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchLocale": {
            "title": "Discovery locale",
            "type": "string",
            "description": "Locale sent to TripAdvisor discovery, e.g. en-US, it-IT, de-DE.",
            "default": "en-US"
          },
          "maxDiscoveredPlaces": {
            "title": "Maximum discovered places",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Hard cap across all searchQueries before review scraping begins.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}