{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Only $0.45💰 Search | Hotels | Restaurants |Reviews",
    "description": "💰$0.45 per 1,000 Scrape TripAdvisor hotel reviews: title, rating, language, text, dates, owner response, photos, sub-ratings, and optional reviewer profiles. Each review is enriched with place metadata (rating, address, geo, website, histogram). Filter by rating, language, date and per-place limit",
    "version": "0.0",
    "x-build-id": "bbS5xUhF7Jcch4wIe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~tripadvisor-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-tripadvisor-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/memo23~tripadvisor-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-tripadvisor-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/memo23~tripadvisor-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-tripadvisor-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",
        "properties": {
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "Optional free-text location query, e.g. `\"Chicago\"`, `\"Brooklyn\"`, `\"London\"`. Resolved via TripAdvisor's autocomplete GraphQL into a geoId, then expanded into venues based on the `Include hotels` / `Include restaurants` / `Include things to do` toggles below. Use this **instead of or alongside** `startUrls`. Leave empty to skip text-search and use only the URLs in `startUrls`."
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Add TripAdvisor URLs to scrape reviews. Supported:\n\n- **Place pages:** `Hotel_Review`, `Restaurant_Review`, `Attraction_Review` URLs (`…/<Type>_Review-g{geoId}-d{locationId}-Reviews-{slug}.html`).\n- **GEO restaurant listing:** `Restaurants-g{geo}-…-{City}_{State}.html` — HTML listing + `-oa30-` pagination, expanded to `Restaurant_Review` venues.\n- **GEO hotel listing:** `Hotels-g{geo}-…-Hotels.html` — HTML listing + `-oa30-` pagination, expanded to `Hotel_Review` venues.\n- **GEO attractions listing:** `Attractions-g{geo}-Activities-…html` — HTML listing + `-oa30-` pagination, expanded to `Attraction_Review` venues. Optional `-cNN-` category subfilter is preserved.\n- **Restaurant search:** `FindRestaurants?geo=…&establishmentTypes=…` — listing expansion calls **`api.tripadvisor.com` `AppListRestaurants`** (same as the TA iPhone app), then falls back to www `/data/graphql/ids`, then HTML link harvest if needed. **`maxItems` still caps reviews per scraped `Restaurant_Review` URL** (each listing produces many URLs).\n\nExamples:\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-g60763-d25324283-Reviews-Allora_Fifth_Ave-New_York_City_New_York.html`\n- Chicago restaurants hub — `https://www.tripadvisor.com/Restaurants-g35805-Chicago_Illinois.html`\n- New York hotels hub — `https://www.tripadvisor.com/Hotels-g60763-New_York_City_New_York-Hotels.html`\n- Find Restaurants — `https://www.tripadvisor.com/FindRestaurants?geo=188673&establishmentTypes=10591&mealTypes=10597&broadened=false`\n\nMix detail URLs and listing URLs in one run.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Limit reviews per place",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of reviews to scrape **per place / per URL**. Applied to each entry in `startUrls` independently. Use 0 for unlimited (the actor will paginate every review the API exposes for that place).",
            "default": 50
          },
          "scrapeReviewerInfo": {
            "title": "Scrape reviewer info",
            "type": "boolean",
            "description": "When enabled, populate the `user` object on each review with the reviewer's profile (username, display name, avatar, hometown, profile link, contributions). When disabled, `user` is set to null.",
            "default": true
          },
          "scrapeReviews": {
            "title": "Scrape reviews",
            "type": "boolean",
            "description": "When **true** (default), fetch reviews for each `Hotel_Review` / `Restaurant_Review` URL using TripAdvisor GraphQL (paginated), up to **`maxItems` per place**. When **false**, skip review pagination and emit **one dataset row per place** with `{ \"placeDetailOnly\": true, \"placeInfo\": … }` extracted from the HTML page (fast, low cost).",
            "default": true
          },
          "includeReviewTags": {
            "title": "Include review theme tags",
            "type": "boolean",
            "description": "When **true** (default), include `placeInfo.reviewTags` (theme phrases and counts) when TripAdvisor embeds them on the page. Set **false** to omit tags for smaller payloads.",
            "default": true
          },
          "includeNearby": {
            "title": "Include nearby results",
            "type": "boolean",
            "description": "When `true`, after each main place is scraped the actor expands up to **5** nearby venues from the page's nearby carousel as additional **place-detail-only** snapshot rows tagged with `isNearbyResult: true`. Reviews are NOT fetched for nearby venues. Depth is capped at 1 (no recursive expansion).",
            "default": false
          },
          "includeThingsToDo": {
            "title": "Include things to do (attractions)",
            "type": "boolean",
            "description": "When `searchQuery` is set, include `Attraction_Review` venues for the resolved geo. Wired through the `Attractions-g{geo}-Activities-…html` listing expander (paginated, up to ~300 attractions per query).",
            "default": true
          },
          "includeRestaurants": {
            "title": "Include restaurants",
            "type": "boolean",
            "description": "When `searchQuery` is set, include `Restaurant_Review` venues for the resolved geo. Wired through the existing `FindRestaurants?geo=…` expansion (paginated, up to 300 venues per query).",
            "default": true
          },
          "includeHotels": {
            "title": "Include hotels",
            "type": "boolean",
            "description": "When `searchQuery` is set, include `Hotel_Review` venues for the resolved geo. Wired through the new `Hotels-g{geo}-…-Hotels.html` listing expander (paginated, up to ~300 hotels per query).",
            "default": true
          },
          "outputShape": {
            "title": "Output shape (when reviews are scraped)",
            "enum": [
              "flat",
              "nested"
            ],
            "type": "string",
            "description": "Controls how reviews are returned in the dataset.\n\n- **`flat`** (default): one dataset row **per review**, each carrying `placeInfo`. Best for tabular consumers and Apify's UI.\n- **`nested`**: one dataset row **per place** of the form `{ ...placeInfo, placeDetailOnly: false, reviews: [...] }`. Best when you want a single object per hotel/restaurant with reviews nested.\n\nNo effect when **`scrapeReviews: false`** — that path always emits one `{ placeDetailOnly: true, placeInfo }` row per place.\n\n**Note on billing:** under `PRICE_PER_DATASET_ITEM`, nested mode collapses N reviews into 1 row, so the bill drops by ~Nx. Review your actor pricing before switching the default.",
            "default": "flat"
          },
          "lastReviewDate": {
            "title": "Only reviews since date",
            "pattern": "^$|^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Skip any review published before this date. Pick an absolute date (YYYY-MM-DD) or a relative duration like `22 days`, `2 weeks`, `3 months`, `1 year`."
          },
          "reviewRatings": {
            "title": "Review ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter reviews by overall rating. Leave empty to include every rating.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "ALL_REVIEW_RATINGS"
              ],
              "enumTitles": [
                "Terrible",
                "Poor",
                "Average",
                "Very Good",
                "Excellent",
                "All ratings"
              ]
            },
            "default": [
              "ALL_REVIEW_RATINGS"
            ]
          },
          "reviewsLanguages": {
            "title": "Reviews languages",
            "uniqueItems": true,
            "type": "array",
            "description": "Filter reviews by language (ISO 639-1 codes). Leave empty to include every language.",
            "items": {
              "type": "string",
              "enum": [
                "ALL_REVIEW_LANGUAGES",
                "ab",
                "aa",
                "af",
                "ak",
                "sq",
                "am",
                "ar",
                "an",
                "hy",
                "as",
                "av",
                "ae",
                "ay",
                "az",
                "bm",
                "ba",
                "eu",
                "be",
                "bn",
                "bh",
                "bi",
                "bs",
                "br",
                "bg",
                "my",
                "ca",
                "ch",
                "ce",
                "ny",
                "zh",
                "cv",
                "kw",
                "co",
                "cr",
                "hr",
                "cs",
                "da",
                "dv",
                "nl",
                "dz",
                "en",
                "eo",
                "et",
                "ee",
                "fo",
                "fj",
                "fi",
                "fr",
                "ff",
                "gl",
                "ka",
                "de",
                "el",
                "gn",
                "gu",
                "ht",
                "ha",
                "he",
                "hz",
                "hi",
                "ho",
                "hu",
                "ia",
                "id",
                "ie",
                "ga",
                "ig",
                "ik",
                "io",
                "is",
                "it",
                "iu",
                "ja",
                "jv",
                "kl",
                "kn",
                "kr",
                "ks",
                "kk",
                "km",
                "ki",
                "rw",
                "ky",
                "kv",
                "kg",
                "ko",
                "ku",
                "kj",
                "la",
                "lb",
                "lg",
                "li",
                "ln",
                "lo",
                "lt",
                "lu",
                "lv",
                "gv",
                "mk",
                "mg",
                "ms",
                "ml",
                "mt",
                "mi",
                "mr",
                "mh",
                "mn",
                "na",
                "nv",
                "nd",
                "ne",
                "ng",
                "nb",
                "nn",
                "no",
                "ii",
                "nr",
                "oc",
                "oj",
                "cu",
                "om",
                "or",
                "os",
                "pa",
                "pi",
                "fa",
                "pl",
                "ps",
                "pt",
                "qu",
                "rm",
                "rn",
                "ro",
                "ru",
                "sa",
                "sc",
                "sd",
                "se",
                "sm",
                "sg",
                "sr",
                "gd",
                "sn",
                "si",
                "sk",
                "sl",
                "so",
                "st",
                "es",
                "su",
                "sw",
                "ss",
                "sv",
                "ta",
                "te",
                "tg",
                "th",
                "ti",
                "bo",
                "tk",
                "tl",
                "tn",
                "to",
                "tr",
                "ts",
                "tt",
                "tw",
                "ty",
                "ug",
                "uk",
                "ur",
                "uz",
                "ve",
                "vi",
                "vo",
                "wa",
                "cy",
                "wo",
                "fy",
                "xh",
                "yi",
                "yo",
                "za",
                "zu"
              ],
              "enumTitles": [
                "All review languages",
                "Abkhaz",
                "Afar",
                "Afrikaans",
                "Akan",
                "Albanian",
                "Amharic",
                "Arabic",
                "Aragonese",
                "Armenian",
                "Assamese",
                "Avaric",
                "Avestan",
                "Aymara",
                "Azerbaijani",
                "Bambara",
                "Bashkir",
                "Basque",
                "Belarusian",
                "Bengali",
                "Bihari",
                "Bislama",
                "Bosnian",
                "Breton",
                "Bulgarian",
                "Burmese",
                "Catalan",
                "Chamorro",
                "Chechen",
                "Chichewa",
                "Chinese",
                "Chuvash",
                "Cornish",
                "Corsican",
                "Cree",
                "Croatian",
                "Czech",
                "Danish",
                "Divehi",
                "Dutch",
                "Dzongkha",
                "English",
                "Esperanto",
                "Estonian",
                "Ewe",
                "Faroese",
                "Fijian",
                "Finnish",
                "French",
                "Fula",
                "Galician",
                "Georgian",
                "German",
                "Greek",
                "Guaraní",
                "Gujarati",
                "Haitian Creole",
                "Hausa",
                "Hebrew",
                "Herero",
                "Hindi",
                "Hiri Motu",
                "Hungarian",
                "Interlingua",
                "Indonesian",
                "Interlingue",
                "Irish",
                "Igbo",
                "Inupiaq",
                "Ido",
                "Icelandic",
                "Italian",
                "Inuktitut",
                "Japanese",
                "Javanese",
                "Kalaallisut",
                "Kannada",
                "Kanuri",
                "Kashmiri",
                "Kazakh",
                "Khmer",
                "Kikuyu",
                "Kinyarwanda",
                "Kyrgyz",
                "Komi",
                "Kongo",
                "Korean",
                "Kurdish",
                "Kwanyama",
                "Latin",
                "Luxembourgish",
                "Ganda",
                "Limburgish",
                "Lingala",
                "Lao",
                "Lithuanian",
                "Luba-Katanga",
                "Latvian",
                "Manx",
                "Macedonian",
                "Malagasy",
                "Malay",
                "Malayalam",
                "Maltese",
                "Māori",
                "Marathi",
                "Marshallese",
                "Mongolian",
                "Nauru",
                "Navajo",
                "Northern Ndebele",
                "Nepali",
                "Ndonga",
                "Norwegian Bokmål",
                "Norwegian Nynorsk",
                "Norwegian",
                "Nuosu",
                "Southern Ndebele",
                "Occitan",
                "Ojibwe",
                "Old Church Slavonic",
                "Oromo",
                "Oriya",
                "Ossetian",
                "Panjabi",
                "Pāli",
                "Persian",
                "Polish",
                "Pashto",
                "Portuguese",
                "Quechua",
                "Romansh",
                "Kirundi",
                "Romanian",
                "Russian",
                "Sanskrit",
                "Sardinian",
                "Sindhi",
                "Northern Sami",
                "Samoan",
                "Sango",
                "Serbian",
                "Scottish Gaelic",
                "Shona",
                "Sinhala",
                "Slovak",
                "Slovenian",
                "Somali",
                "Southern Sotho",
                "Spanish",
                "Sundanese",
                "Swahili",
                "Swati",
                "Swedish",
                "Tamil",
                "Telugu",
                "Tajik",
                "Thai",
                "Tigrinya",
                "Tibetan Standard",
                "Turkmen",
                "Tagalog",
                "Tswana",
                "Tonga",
                "Turkish",
                "Tsonga",
                "Tatar",
                "Twi",
                "Tahitian",
                "Uyghur",
                "Ukrainian",
                "Urdu",
                "Uzbek",
                "Venda",
                "Vietnamese",
                "Volapük",
                "Walloon",
                "Welsh",
                "Wolof",
                "Western Frisian",
                "Xhosa",
                "Yiddish",
                "Yoruba",
                "Zhuang",
                "Zulu"
              ]
            },
            "default": [
              "ALL_REVIEW_LANGUAGES"
            ]
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 100
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Number of times each failed request is retried before giving up. Lower values surface persistent failures quickly; higher values absorb transient anti-bot blocks at the cost of long-tail latency.",
            "default": 15
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}