{
  "openapi": "3.0.1",
  "info": {
    "title": "TripAdvisor Hotels · Emails, Prices & Amenities",
    "description": "Paste a TripAdvisor hotel page or a city listing. Get email, phone, EUR OTA prices, amenities, photos, nearby restaurants and activities. Optional review excerpts. Public pages only. No login.",
    "version": "1.2",
    "x-build-id": "j2vZwMD1kEq5HgTpW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corent1robert~tripadvisor-hotel-details-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corent1robert-tripadvisor-hotel-details-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/corent1robert~tripadvisor-hotel-details-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corent1robert-tripadvisor-hotel-details-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/corent1robert~tripadvisor-hotel-details-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corent1robert-tripadvisor-hotel-details-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 URL(s)",
            "type": "array",
            "description": "One URL per line:\n- a **hotel** page (`Hotel_Review`)\n- a **city hotels** listing (`Hotels-g…`, e.g. Paris or New York)\n\nYou can mix both. A city listing is paginated until **Max hotels** is reached, then each profile is enriched.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max hotels",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many hotel profiles. On a city listing we paginate automatically (~30 per page: page 2 = oa30, page 3 = oa60, …) until this cap. Default **25**. Set **200** for a bigger Paris extract.",
            "default": 25
          },
          "maxConcurrency": {
            "title": "Profiles in parallel",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many hotel pages to read at once.",
            "default": 2
          },
          "maxRetries": {
            "title": "Retries per profile",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Extra attempts when a public page does not load on the first try.",
            "default": 3
          },
          "delayMsBetweenBatches": {
            "title": "Pause between batches (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Optional pause after each parallel batch.",
            "default": 600
          },
          "resume": {
            "title": "Skip URLs already in the dataset",
            "type": "boolean",
            "description": "Continue a previous run without re-enriching the same hotel URLs.",
            "default": false
          },
          "crawlWebsite": {
            "title": "Collect extra emails from the hotel website",
            "type": "boolean",
            "description": "Open the hotel site (homepage + contact pages) and merge public mailboxes TripAdvisor did not publish. A mailbox found only on the site is billed as **with email**. Turn off to keep only the email TripAdvisor already shows.",
            "default": true
          },
          "collectSocials": {
            "title": "Collect Instagram / Facebook / TikTok from the website",
            "type": "boolean",
            "description": "From the same site (or when TripAdvisor already lists a Facebook/Instagram page as the website), keep public social profiles. Billed as a **$2 / 1k** add-on only when at least one profile is found. Turn off if you only want emails and phones.",
            "default": true
          },
          "collectOffers": {
            "title": "Collect OTA prices (Booking, Agoda, Hotels.com…)",
            "type": "boolean",
            "description": "Read the **Check prices for your travel dates** panel. Keep provider, price, currency, TripAdvisor click-out and the resolved affiliate URL when the redirect is public. Does **not** scrape Booking / Agoda / Hotels.com pages.",
            "default": true
          },
          "checkIn": {
            "title": "Check-in",
            "type": "string",
            "description": "YYYY-MM-DD. Default: **today + 10 days**."
          },
          "checkOut": {
            "title": "Check-out",
            "type": "string",
            "description": "YYYY-MM-DD. Default: **today + 11 days** (one night)."
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Rooms sent to the TripAdvisor price panel. Default **1**.",
            "default": 1
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Guests sent to the TripAdvisor price panel. Default **2**.",
            "default": 2
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "ISO code (EUR, USD, GBP…). Default **EUR** — fetches tripadvisor.fr + fr-FR so the price panel shows euros (273 €). USD stays on tripadvisor.com.",
            "default": "EUR"
          },
          "collectNearbyRestaurants": {
            "title": "Collect nearby restaurants",
            "type": "boolean",
            "description": "Restaurants listed on the hotel page (name, TripAdvisor URL, rating, reviews, distance, cuisine when present).",
            "default": true
          },
          "collectNearbyAttractions": {
            "title": "Collect nearby activities",
            "type": "boolean",
            "description": "Attractions / things to do listed on the hotel page (name, TripAdvisor URL, rating, reviews, distance, category when present).",
            "default": true
          },
          "collectAmenities": {
            "title": "Collect amenities",
            "type": "boolean",
            "description": "Wifi, parking, pets, pool, spa and the other facilities listed on the public hotel page (`amenities[]` plus `hasWifi` / `hasPool` / `hasSpa` / `hasParking` / `petsAllowed`).",
            "default": true
          },
          "collectPhotos": {
            "title": "Collect photo URLs",
            "type": "boolean",
            "description": "Hero image and gallery URLs only (`heroPhotoUrl`, `photos[]`). Files are not downloaded.",
            "default": true
          },
          "collectReviews": {
            "title": "Collect review excerpts (5–10 latest)",
            "type": "boolean",
            "description": "Latest public reviews: title, rating, date, snippet, author. **Off by default.** Billed as **$1 / 1k** (`hotel-reviews-excerpt`) only when at least one excerpt is stored. Max 10. Not a full review dump.",
            "default": false
          },
          "maxPagesPerWebsite": {
            "title": "Pages crawled per website",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Homepage plus contact / about / legal / reservation pages, same domain only. Used when extra emails and/or socials are on.",
            "default": 6
          },
          "maxListingPages": {
            "title": "Max listing pages per city URL",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How far to walk a city hotels list. Stops earlier if Max hotels is reached.",
            "default": 20
          },
          "pageStep": {
            "title": "Hotels per listing page",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "TripAdvisor typically shows 30 hotels per page.",
            "default": 30
          },
          "delayMsBetweenListingPages": {
            "title": "Pause between listing pages (ms)",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Optional pause between city listing pages.",
            "default": 800
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional backup. Direct access is the default.",
            "default": {
              "useApifyProxy": false
            }
          },
          "verboseLogs": {
            "title": "Verbose logs",
            "type": "boolean",
            "description": "Print extra diagnostics in the run log.",
            "default": false
          },
          "navigationTimeoutSecs": {
            "title": "Page wait (seconds)",
            "minimum": 15,
            "maximum": 180,
            "type": "integer",
            "description": "How long to wait for each hotel page.",
            "default": 60
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}