# TripAdvisor Hotels · Emails, Prices & Amenities (`corent1robert/tripadvisor-hotel-details-scraper`) Actor

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.

- **URL**: https://apify.com/corent1robert/tripadvisor-hotel-details-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Travel, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 hotel with emails

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TripAdvisor hotel details

**Turn a TripAdvisor hotel URL *or* a city hotels listing into CRM-ready rows: name, phone, email, official website, Instagram / Facebook / TikTok, OTA prices (Booking / Agoda / Hotels.com click-outs), nearby restaurants and activities, address, star class and ranking.**

Paste one hotel page, a city listing, or a mix. Each dataset row is one hotel. Export CSV or JSON.

**No login. No API key. No TripAdvisor account.**

***

### Also available

| Actor | Use when |
|-------|----------|
| [TripAdvisor restaurant details](https://console.apify.com/actors/6aXohphOwgWP96zLN) | Restaurant page **or** city restaurants listing → phone, email, website, Instagram |
| [TripAdvisor restaurant URL discovery](https://console.apify.com/actors/r63zaonzpROWPHZCS) | Restaurant **profile URLs** only |
| [Booking Pro Host](https://apify.com/corent1robert/booking-pro-host-scraper) | Hotel / apartment **host contacts** on Booking.com (different source) |
| **This Actor — hotel details** | Hotel page **or** city hotels listing → phone, email, OTA prices, nearby restaurants / activities |

***

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| **Outbound / SDR** | Phone, email, website and Instagram for hotel outreach | City listing URL · **Max hotels** 25 · view **Outreach — CRM** |
| **CRM / RevOps** | Structured hotel records | Bulk profile URLs · export CSV |
| **PMS / channel / insurance sales** | Rank, neighborhood, star class, closed flag | Full JSON export |
| **Market research** | Ratings, price band, hotel mix | View **Hotels** · 20–50 URLs |
| **Agency / local SEO** | Competitor contacts in one city | City `Hotels-g…` listing |

**What you get by default:** name, TripAdvisor URL, location ID, phone, email when TripAdvisor **or the hotel website** publishes it, extra mailboxes in `emails[]`, official website, **Instagram / Facebook / TikTok / etc. from the site**, **EUR OTA offers**, **amenities** + wifi/pool/spa/parking/pets flags, **photo URLs**, **nearby restaurants and activities**, street / city / postal / country, neighborhood, rating, review count, ranking, star class, room count, check-in/out when listed, closed flag, owner-verified, Travelers’ Choice when present, lat/lng. Review excerpts are **off** unless you check the box.

**Website:** the mobile HTML often ships an empty Website button even when desktop shows the site. The Actor then calls the same public GraphQL used for location contact fields (`websiteUrlSource: graphql` when a hotel URL is in that payload). A real href or JSON-LD link on the page still wins (`page`). If GraphQL is empty, a **custom email domain** is guessed (`hotel@ducdesaintsimon.com` → `https://www.ducdesaintsimon.com`, source `email-domain`). Free mailboxes (Gmail, etc.) are not guessed. Two independent options then apply: extra emails from the site, and/or social profiles. Uncheck either — or both — if you only want TripAdvisor fields. `emailSource` is `tripadvisor` or `website`.

**When a field is empty:** it was not on the public page. Failed rows have `error` — they are not silent blanks.

***

### Quick start

1. Paste a `Hotel_Review` URL **or** a city `Hotels-g…` listing (or a mix)
2. Keep **Max hotels** at **25** for a preview (raise it for a full city)
3. Click **Start**
4. Open dataset view **Outreach — CRM** for email, phone, Instagram, website and address

***

### What does it extract?

| Category | Fields |
|----------|--------|
| **Identity** | `name`, `url`, `locationId`, `imageUrl`, `hotelClass`, `starRating`, `numberOfRooms` |
| **Contact** | `email`, `emails`, `emailSource`, `telephone`, `websiteUrl`, `websiteUrlSource`, `instagramUrl`, `facebookUrl`, `tiktokUrl`, `twitterUrl`, `youtubeUrl`, `linkedinUrl`, `pinterestUrl`, `socialUrls` |
| **Location** | `address`, `street`, `city`, `region`, `postalCode`, `countryCode`, `neighborhood`, `neighborhoods`, `latitude`, `longitude` |
| **Reputation** | `rating`, `reviews`, `ranking`, `rankingPosition`, `rankingOutOf`, `travelersChoiceYear`, `travelersChoiceAward`, `hasVerifiedOwner` |
| **OTA prices** | `offers[]` (`provider`, `price`, `currency`, `clickoutUrl`, `affiliateUrl`), `offersCount`, `lowestOfferPrice`, `lowestOfferProvider`, `offersCheckIn` / `offersCheckOut` — default **EUR** via tripadvisor.fr |
| **Amenities** | `amenities[]`, `hasWifi`, `hasPool`, `hasSpa`, `hasParking`, `petsAllowed` |
| **Photos** | `heroPhotoUrl`, `photos[]` (URLs only) |
| **Reviews** | `reviewsExcerpt[]` (optional, 5–10 latest) |
| **Nearby** | `nearbyRestaurants[]`, `nearbyAttractions[]` (name, url, rating, reviewCount, distanceKm, category) |
| **Ops** | `priceRange`, `checkinTime`, `checkoutTime`, `openingHours`, `isClosed`, `description`, `reviewsUrl` |

Dataset views: **Hotels** (overview) and **Outreach — CRM** (email, phone, Instagram / Facebook / TikTok, website, address).

***

### How much does it cost to scrape TripAdvisor hotels?

HTTP-only (no browser). You pay **pay-per-event**: a hotel row (cheaper without email, higher with email) plus a **socials add-on** only if **Collect Instagram / Facebook / TikTok** is on and a profile is found. Actor-start is a few hundredths of a cent.

This Actor is **$3 / 1k** without email, **$5 / 1k** with email, and **+$2 / 1k** when social profiles are found (FREE plan). Same price grid as the restaurant sibling. **OTA offers, nearby POIs, amenities and photo URLs are included in the hotel row.** Review excerpts are a **$1 / 1k** add-on and are **off** unless you check the box.

| Event | FREE | Bronze | Gold |
|-------|------|--------|------|
| Hotel without email | $3 / 1k | $2.70 | $2.10 |
| Hotel with email | $5 / 1k | $4.50 | $3.50 |
| Social profiles (add-on) | $2 / 1k | $1.80 | $1.40 |
| Review excerpt (add-on) | $1 / 1k | $0.90 | $0.70 |

| Scenario | FREE |
|----------|------|
| 25 profiles, ~80% email, ~80% socials | ~$0.16 |
| 1,000 profiles without email, no socials | $3.00 |
| 1,000 profiles with email, no socials | $5.00 |
| 1,000 profiles with email + socials | $7.00 |
| 1,000 mixed (~80% email, ~70% socials) | ~$6.00 |

Residential proxy is **not** required by default. Platform compute on 1024 MB is extra and typically small next to PPE.

***

### Is it legal to scrape TripAdvisor hotel pages?

This Actor only reads **public** hotel profile pages (the same HTML a visitor can open without an account) and, when enabled, public pages on the hotel’s own website. It does not log in or open host dashboards.

Phones, emails, addresses and social profile URLs can be personal data. Use them under **GDPR**, CAN-SPAM and local marketing rules. See [Apify's guide to web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

***

### Input

Console: paste **TripAdvisor URL(s)** (hotel and/or city listing) and click Start.

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotels-g187147-Paris_Ile_de_France-Hotels.html"
  ],
  "maxItems": 25
}
```

| Parameter | Console | Default | Description |
|-----------|---------|---------|-------------|
| `startUrls` | Yes | — | Hotel `Hotel_Review` URLs and/or city `Hotels-g…` listings |
| `maxItems` | Yes | `25` | Max hotels to enrich. City listings paginate (~30/page) until this cap |
| `crawlWebsite` | Yes | `true` | Extra public emails from the hotel website |
| `collectSocials` | Yes | `true` | Instagram / Facebook / TikTok from the website (**+$2 / 1k** if found) |
| `collectOffers` | Yes | `true` | OTA prices + resolved affiliate URLs (Booking / Agoda / Hotels.com…) |
| `checkIn` / `checkOut` | Yes | +10 / +11 days | Dates for the price panel (`YYYY-MM-DD`) |
| `rooms` / `adults` | Yes | `1` / `2` | Occupancy sent to TripAdvisor |
| `currency` | Yes | `EUR` | `EUR` → tripadvisor.fr + fr-FR (euro prices). `USD` → .com |
| `collectAmenities` | Yes | `true` | Facilities + wifi / pool / spa / parking / pets flags |
| `collectPhotos` | Yes | `true` | Hero + gallery URLs (no download) |
| `collectReviews` | Yes | `false` | 5–10 latest reviews (**+$1 / 1k** if any) |
| `collectNearbyRestaurants` | Yes | `true` | Nearby restaurants on the hotel page |
| `collectNearbyAttractions` | Yes | `true` | Nearby activities / things to do |
| `maxConcurrency` | Hidden | `2` | Profiles in parallel |
| `delayMsBetweenBatches` | Hidden | `600` | Pause between batches (ms) |
| `maxRetries` | Hidden | `3` | Extra attempts per profile |
| `resume` | Hidden | `false` | Skip URLs already in the dataset |
| `maxPagesPerWebsite` | Hidden | `6` | Same-domain pages crawled per site |
| `proxyConfiguration` | Hidden | no proxy | Optional backup |
| `verboseLogs` | Hidden | `false` | Extra diagnostics |
| `navigationTimeoutSecs` | Hidden | `60` | Wait per TripAdvisor page |

***

### Output example

```json
{
  "url": "https://www.tripadvisor.com/Hotel_Review-g187147-d188737-Reviews-Hotel_Duc_de_Saint_Simon-Paris_Ile_de_France.html",
  "name": "Hotel Duc de Saint-Simon",
  "email": "hotel@ducdesaintsimon.com",
  "emails": ["hotel@ducdesaintsimon.com"],
  "emailSource": "tripadvisor",
  "telephone": "+33 1 44 39 20 20",
  "websiteUrl": "https://www.ducdesaintsimon.com/",
  "websiteUrlSource": "email-domain",
  "hotelClass": "4-star",
  "starRating": 4,
  "neighborhood": "7e Arr. – Palais Bourbon",
  "numberOfRooms": 34,
  "hasWifi": true,
  "hasParking": true,
  "petsAllowed": true,
  "amenities": [{ "name": "Wifi gratuit" }, { "name": "Parking" }],
  "heroPhotoUrl": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/0e/b4/....jpg",
  "photos": ["https://dynamic-media-cdn.tripadvisor.com/media/photo-o/0e/b4/....jpg"],
  "reviews": "890",
  "rating": 4.7,
  "address": "14 Rue de Saint-Simon, Paris, Ile-de-France, 75007, FR",
  "street": "14 Rue de Saint-Simon",
  "city": "Paris",
  "ranking": "#669 of 1,885 hotels",
  "offersCheckIn": "2026-08-30",
  "offersCheckOut": "2026-08-31",
  "offersCount": 8,
  "lowestOfferPrice": 262,
  "lowestOfferProvider": "Agoda.com",
  "offers": [
    {
      "provider": "Booking.com",
      "price": 336,
      "currency": "EUR",
      "clickoutUrl": "https://www.tripadvisor.fr/Commerce?p=BookingCom&src=32429624&geo=188737",
      "affiliateUrl": "https://www.booking.com/hotel/fr/duc-de-st-simon.html?aid=7344550&checkin=2026-08-30&checkout=2026-08-31"
    }
  ],
  "nearbyRestaurants": [
    { "name": "Akabeko Restaurant", "rating": 4.9, "reviewCount": 242, "distanceKm": 0.242, "category": "French, Japanese" }
  ],
  "nearbyAttractions": [
    { "name": "Musee Maillol", "rating": 4.2, "category": "Speciality Museums" }
  ],
  "isClosed": false,
  "hasVerifiedOwner": true
}
```

***

### How it works

1. You paste a hotel page, a city listing, or both
2. City listings are expanded into hotel profile URLs (up to **Max hotels**)
3. The Actor reads each public TripAdvisor profile on **tripadvisor.fr** when `currency=EUR` (GraphQL + price panel included)
4. Amenities, photo URLs and nearby POIs come from the same page. Review excerpts only if that box is checked
5. If **Collect OTA prices** is on, it reads the price panel and follows `/Commerce` redirects (it does **not** scrape Booking / Agoda / Hotels.com)
6. If a website is known **and** you left emails and/or socials checked, it opens that site for those fields
7. Rows appear in the dataset as they complete — export CSV/JSON anytime

No TripAdvisor account. Empty fields mean they were not published.

***

### Local development

```bash
npm ci
node --test tests/*.test.js
apify run
```

Requires [Apify CLI](https://docs.apify.com/cli). Default `input.json` includes one Paris hotel profile.

***

### FAQ

**Do I need a proxy?** Not for typical hotel pages. Pass `proxyConfiguration` in JSON only if a run returns empty profiles.

**Why is the official website sometimes guessed?** The iPhone HTML often leaves the Website button empty. If GraphQL does not return a hotel URL, a **custom email domain** is used (`email-domain`). A real page href or JSON-LD `sameAs` still wins (`page`).

**Where do extra emails and socials come from?** Two Console checkboxes, independent. Extra emails: crawl contact pages (`crawlWebsite`). Socials: Instagram / Facebook / TikTok / etc. (`collectSocials`), billed **$2 / 1k** only when a profile is found.

**Where do Booking / Agoda prices come from?** The public TripAdvisor **Check prices** panel for the stay dates you set (or today+10 / +11). Default `currency=EUR` fetches **tripadvisor.fr** + `fr-FR` so the panel shows euros. `clickoutUrl` is the TripAdvisor `/Commerce` link; `affiliateUrl` is the Location after following that redirect. The Actor never scrapes the OTA site itself. If a hop stays on TripAdvisor or needs a login, only the click-out is kept.

**Are nearby restaurants paid extra?** No. Nearby restaurants, activities, amenities and photo URLs are part of the hotel row.

**Why were prices in USD before?** tripadvisor.com + a US locale hydrates the panel in dollars. Default `currency=EUR` now rewrites the fetch to **tripadvisor.fr** + `fr-FR`. Set `currency` to `USD` if you want dollars.

**Review excerpts?** Check **Collect review excerpts**. Off by default so a normal run is not billed the $1 / 1k add-on. Max 10 latest public reviews — not a full dump.

**Can I paste a city URL?** Yes. Use the city **hotels** listing (`Hotels-g…`). A city tourism page (`Tourism-g…`) is converted to that listing. Restaurant pages are ignored.

**Is this Booking host contacts?** No. This is public TripAdvisor hotel listings. [Booking Pro Host](https://apify.com/corent1robert/booking-pro-host-scraper) is a different source (Booking.com host contacts).

***

### Support

Issues tab, or <corentin@outreacher.fr> for a custom scraper or integration.

# Actor input Schema

## `startUrls` (type: `array`):

One URL per line:

- a **hotel** page (`Hotel_Review`)
- a **city hotels** listing (`Hotels-g…`, e.g. Paris or New York)

You can mix both. A city listing is paginated until **Max hotels** is reached, then each profile is enriched.

## `maxItems` (type: `integer`):

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.

## `maxConcurrency` (type: `integer`):

How many hotel pages to read at once.

## `maxRetries` (type: `integer`):

Extra attempts when a public page does not load on the first try.

## `delayMsBetweenBatches` (type: `integer`):

Optional pause after each parallel batch.

## `resume` (type: `boolean`):

Continue a previous run without re-enriching the same hotel URLs.

## `crawlWebsite` (type: `boolean`):

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.

## `collectSocials` (type: `boolean`):

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.

## `collectOffers` (type: `boolean`):

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.

## `checkIn` (type: `string`):

YYYY-MM-DD. Default: **today + 10 days**.

## `checkOut` (type: `string`):

YYYY-MM-DD. Default: **today + 11 days** (one night).

## `rooms` (type: `integer`):

Rooms sent to the TripAdvisor price panel. Default **1**.

## `adults` (type: `integer`):

Guests sent to the TripAdvisor price panel. Default **2**.

## `currency` (type: `string`):

ISO code (EUR, USD, GBP…). Default **EUR** — fetches tripadvisor.fr + fr-FR so the price panel shows euros (273 €). USD stays on tripadvisor.com.

## `collectNearbyRestaurants` (type: `boolean`):

Restaurants listed on the hotel page (name, TripAdvisor URL, rating, reviews, distance, cuisine when present).

## `collectNearbyAttractions` (type: `boolean`):

Attractions / things to do listed on the hotel page (name, TripAdvisor URL, rating, reviews, distance, category when present).

## `collectAmenities` (type: `boolean`):

Wifi, parking, pets, pool, spa and the other facilities listed on the public hotel page (`amenities[]` plus `hasWifi` / `hasPool` / `hasSpa` / `hasParking` / `petsAllowed`).

## `collectPhotos` (type: `boolean`):

Hero image and gallery URLs only (`heroPhotoUrl`, `photos[]`). Files are not downloaded.

## `collectReviews` (type: `boolean`):

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.

## `maxPagesPerWebsite` (type: `integer`):

Homepage plus contact / about / legal / reservation pages, same domain only. Used when extra emails and/or socials are on.

## `maxListingPages` (type: `integer`):

How far to walk a city hotels list. Stops earlier if Max hotels is reached.

## `pageStep` (type: `integer`):

TripAdvisor typically shows 30 hotels per page.

## `delayMsBetweenListingPages` (type: `integer`):

Optional pause between city listing pages.

## `proxyConfiguration` (type: `object`):

Optional backup. Direct access is the default.

## `verboseLogs` (type: `boolean`):

Print extra diagnostics in the run log.

## `navigationTimeoutSecs` (type: `integer`):

How long to wait for each hotel page.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tripadvisor.com/Hotel_Review-g187147-d188737-Reviews-Hotel_Duc_de_Saint_Simon-Paris_Ile_de_France.html"
  ],
  "maxItems": 25,
  "maxConcurrency": 2,
  "maxRetries": 3,
  "delayMsBetweenBatches": 600,
  "resume": false,
  "crawlWebsite": true,
  "collectSocials": true,
  "collectOffers": true,
  "rooms": 1,
  "adults": 2,
  "currency": "EUR",
  "collectNearbyRestaurants": true,
  "collectNearbyAttractions": true,
  "collectAmenities": true,
  "collectPhotos": true,
  "collectReviews": false,
  "maxPagesPerWebsite": 6,
  "maxListingPages": 20,
  "pageStep": 30,
  "delayMsBetweenListingPages": 800,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "verboseLogs": false,
  "navigationTimeoutSecs": 60
}
```

# Actor output Schema

## `dataset` (type: `string`):

Full hotel rows — one profile per item

## `overview` (type: `string`):

Name, phone, email, Instagram, website, city, lowest OTA price, rating, ranking

## `outreachCrm` (type: `string`):

Email, phone, socials, website, address for outreach

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.tripadvisor.com/Hotel_Review-g187147-d188737-Reviews-Hotel_Duc_de_Saint_Simon-Paris_Ile_de_France.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/tripadvisor-hotel-details-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.tripadvisor.com/Hotel_Review-g187147-d188737-Reviews-Hotel_Duc_de_Saint_Simon-Paris_Ile_de_France.html"] }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/tripadvisor-hotel-details-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.tripadvisor.com/Hotel_Review-g187147-d188737-Reviews-Hotel_Duc_de_Saint_Simon-Paris_Ile_de_France.html"
  ]
}' |
apify call corent1robert/tripadvisor-hotel-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/tripadvisor-hotel-details-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/638ioZ6XjYa34XbBv/builds/j2vZwMD1kEq5HgTpW/openapi.json
