# Tripadvisor Reviews Scraper - Fast & Browserless (`mof1re/tripadvisor-reviews-scraper-browserless`) Actor

⚡ Scrapes Tripadvisor reviews via raw HTTP requests — no browser, no headless Chrome. Structured output: ratings, reviewer info, review text, owner replies, trip type, visit date, and category subratings. Filter by rating, date range, month, trip type, and keyword. Built for speed and clean data.

- **URL**: https://apify.com/mof1re/tripadvisor-reviews-scraper-browserless.md
- **Developed by:** [Vladimir Efimenco](https://apify.com/mof1re) (community)
- **Categories:** Travel, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Reviews Scraper | ⚡ Fast Browserless

Browserless Tripadvisor review scraper built on the site's internal GraphQL API, not a headless browser. Returns full review content alongside reviewer details, owner replies, trip type, visit dates, and category subratings — for hotels, restaurants, attractions, and attraction products (tours/activities).

### ⚡ Why this one

- **Full dataset, not a summary** — every review comes with the review text, rating, trip type, visit date, reviewer profile info, and the owner's reply where present.
- **Listing-wide rating breakdown included** — overall rating distribution and category subratings are attached alongside each review.
- **Flexible filtering** — rating, date range (relative period or exact date), month, trip type, and keyword search that can run server-side or locally.
- **Batch by design** — scrape multiple listings in a single run (up to 5 in parallel), with a configurable result cap per listing or unlimited collection.
- **Proxies included** — proxy pool is built in. You don't need to bring your own.
- **Fast** — no browser, no rendering wait. Pure HTTP calls to the same internal API the Tripadvisor app uses.

### 📋 Example output

```json
[
  {
    "listing_title": "Restaurant Armònia",
    "listing_url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "reviews_stats": {
      "reviews_total": 672,
      "listing_rating": 4.9,
      "listing_rating_text": "Excellent",
      "ratings_stats": {
        "Excellent": {
          "count": 627,
          "percentage": 93
        },
        "Good": {
          "count": 23,
          "percentage": 3
        },
        "Average": {
          "count": 9,
          "percentage": 1
        },
        "Poor": {
          "count": 6,
          "percentage": 1
        },
        "Terrible": {
          "count": 7,
          "percentage": 1
        }
      },
      "subratings_stats": {
        "atmosphere": 4.9,
        "food": 4.8,
        "service": 4.9,
        "value": 4.7
      }
    },
    "review_id": "1067268891",
    "rating": 5.0,
    "title": "Magnificent!!!",
    "text": "We chose the Armonia restaurant at the Mazzarò Sea Palace to celebrate a birthday, and we could not have made a better choice.<br /><br />From the moment we arrived, we felt welcomed with sincere attention and great professionalism. The staff was impeccable, always present, and knew how to handle all our specific needs with extreme care, making us experience a serene and special evening.<br /><br />The cuisine was simply excellent: every dish was attended to in the smallest details, with ingredients of the highest quality and refined flavors that highlight the local area without ever being excessive. A gastronomic journey that captivated us from beginning to end.<br /><br />There are places where you don't go just to eat well, but to live an experience that leaves a fond memory. For us, Armonia was exactly that: the perfect place to celebrate an important moment. <br />A special thanks to Deborah who accompanied us throughout the evening with attention, sensitivity, and a smile that made this occasion even more special.<br />We will definitely return!!",
    "text_clean": "We chose the Armonia restaurant at the Mazzarò Sea Palace to celebrate a birthday, and we could not have made a better choice.\n\nFrom the moment we arrived, we felt welcomed with sincere attention and great professionalism. The staff was impeccable, always present, and knew how to handle all our specific needs with extreme care, making us experience a serene and special evening.\n\nThe cuisine was simply excellent: every dish was attended to in the smallest details, with ingredients of the highest quality and refined flavors that highlight the local area without ever being excessive. A gastronomic journey that captivated us from beginning to end.\n\nThere are places where you don't go just to eat well, but to live an experience that leaves a fond memory. For us, Armonia was exactly that: the perfect place to celebrate an important moment. \nA special thanks to Deborah who accompanied us throughout the evening with attention, sensitivity, and a smile that made this occasion even more special.\nWe will definitely return!!",
    "published_date": "4 days ago",
    "visited_date": "Jun 2026",
    "trip_type": "Friends",
    "tip": null,
    "helpful_votes": 0,
    "photos": [],
    "review_url": "https://www.tripadvisor.com/ShowUserReviews-g187892-d12850867-r1067268891-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=Review&contentId=1067268891&locationId=12850867",
    "author": {
      "name": "HelenaJFK",
      "profile_url": "https://www.tripadvisor.com/Profile/HelenaJFK",
      "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/04/33/37/e3/djuza.jpg",
      "hometown": "Milan, Italy",
      "contributions": 11,
      "helpful_votes": 6
    },
    "owner_response": {
      "author": {
        "name": "VOIhotels sede centrale",
        "profile_url": "https://www.tripadvisor.com/Profile/VOIhotelsITA",
        "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/2d/7f/6e/ba/voihotelsita.jpg",
        "position": "Marketing at Restaurant Armònia"
      },
      "published_date": "July 10, 2026",
      "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=OwnerResponse&contentId=1067797705&locationId=12850867",
      "text": "Gentile HelenaJFK,\n\nLa ringraziamo di cuore per aver scelto Armonia per celebrare un'occasione così speciale e per aver condiviso la sua splendida esperienza.\n\nSiamo felici che abbia apprezzato l'accoglienza, l'attenzione del nostro staff e il percorso gastronomico proposto dalla nostra cucina. Sapere di aver contribuito a rendere il vostro compleanno un momento piacevole e memorabile ci gratifica molto.\n\nNon vediamo l'ora di accogliervi nuovamente per regalarvi un'altra esperienza speciale.\n\nDana Muscalu\nRestaurant Manager\n",
      "text_clean": "Gentile HelenaJFK,\n\nLa ringraziamo di cuore per aver scelto Armonia per celebrare un'occasione così speciale e per aver condiviso la sua splendida esperienza.\n\nSiamo felici che abbia apprezzato l'accoglienza, l'attenzione del nostro staff e il percorso gastronomico proposto dalla nostra cucina. Sapere di aver contribuito a rendere il vostro compleanno un momento piacevole e memorabile ci gratifica molto.\n\nNon vediamo l'ora di accogliervi nuovamente per regalarvi un'altra esperienza speciale.\n\nDana Muscalu\nRestaurant Manager\n"
    },
    "subratings": {
      "Value": 5,
      "Service": 5,
      "Food": 5,
      "Atmosphere": 5
    },
    "keyword_query": "amazing",
    "keyword_match": false
  },
  {
    "listing_title": "Restaurant Armònia",
    "listing_url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "reviews_stats": {
      "reviews_total": 672,
      "listing_rating": 4.9,
      "listing_rating_text": "Excellent",
      "ratings_stats": {
        "Excellent": {
          "count": 627,
          "percentage": 93
        },
        "Good": {
          "count": 23,
          "percentage": 3
        },
        "Average": {
          "count": 9,
          "percentage": 1
        },
        "Poor": {
          "count": 6,
          "percentage": 1
        },
        "Terrible": {
          "count": 7,
          "percentage": 1
        }
      },
      "subratings_stats": {
        "atmosphere": 4.9,
        "food": 4.8,
        "service": 4.9,
        "value": 4.7
      }
    },
    "review_id": "1066490363",
    "rating": 3.0,
    "title": "Nice but not memorable.",
    "text": "Ambience was very good as was the service.  Unfortunately I felt that the portion size of the courses was disappointing.  The flavours were nice but for the price it did not make me think that I would wish to repeat going back as in all honesty we did not leave saying wow that was worth it.",
    "text_clean": "Ambience was very good as was the service.  Unfortunately I felt that the portion size of the courses was disappointing.  The flavours were nice but for the price it did not make me think that I would wish to repeat going back as in all honesty we did not leave saying wow that was worth it.",
    "published_date": "1 week ago",
    "visited_date": "Jun 2026",
    "trip_type": "Couples",
    "tip": null,
    "helpful_votes": 0,
    "photos": [],
    "review_url": "https://www.tripadvisor.com/ShowUserReviews-g187892-d12850867-r1066490363-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=Review&contentId=1066490363&locationId=12850867",
    "author": {
      "name": "Bill M",
      "profile_url": "https://www.tripadvisor.com/Profile/billmW5230UQ",
      "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/e7/7b/default-avatar-2020-56.jpg",
      "hometown": "Plymouth, UK",
      "contributions": 5,
      "helpful_votes": 4
    },
    "owner_response": {
      "author": {
        "name": "VOIhotels sede centrale",
        "profile_url": "https://www.tripadvisor.com/Profile/VOIhotelsITA",
        "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/2d/7f/6e/ba/voihotelsita.jpg",
        "position": "Marketing at Restaurant Armònia"
      },
      "published_date": "July 4, 2026",
      "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=OwnerResponse&contentId=1066913668&locationId=12850867",
      "text": "Dear Bill M,\n\nThank you for taking the time to share your feedback and for your kind words about our ambience, service, and the flavours of our dishes.\nWe are sorry to hear that the portion sizes did not meet your expectations and that, overall, you did not feel the experience represented good value for the price. \nYour comments are truly appreciated and we hope to have the opportunity to welcome you back to Armonia Restaurant in the future. \n\nDana Muscalu \nRestaurant Manager \n",
      "text_clean": "Dear Bill M,\n\nThank you for taking the time to share your feedback and for your kind words about our ambience, service, and the flavours of our dishes.\nWe are sorry to hear that the portion sizes did not meet your expectations and that, overall, you did not feel the experience represented good value for the price. \nYour comments are truly appreciated and we hope to have the opportunity to welcome you back to Armonia Restaurant in the future. \n\nDana Muscalu \nRestaurant Manager \n"
    },
    "subratings": {},
    "keyword_query": "amazing",
    "keyword_match": false
  },
  {
    "listing_title": "Restaurant Armònia",
    "listing_url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "reviews_stats": {
      "reviews_total": 672,
      "listing_rating": 4.9,
      "listing_rating_text": "Excellent",
      "ratings_stats": {
        "Excellent": {
          "count": 627,
          "percentage": 93
        },
        "Good": {
          "count": 23,
          "percentage": 3
        },
        "Average": {
          "count": 9,
          "percentage": 1
        },
        "Poor": {
          "count": 6,
          "percentage": 1
        },
        "Terrible": {
          "count": 7,
          "percentage": 1
        }
      },
      "subratings_stats": {
        "atmosphere": 4.9,
        "food": 4.8,
        "service": 4.9,
        "value": 4.7
      }
    },
    "review_id": "1065745909",
    "rating": 5.0,
    "title": "Amazing evening",
    "text": "We had an incredible dinner at Armonia. The staff were attentive and helpful. We requested a table close to the sea view which was stunning. The food and wine pairings were amazing as well. We would 100% recommend going if you’re looking for a special evening.",
    "text_clean": "We had an incredible dinner at Armonia. The staff were attentive and helpful. We requested a table close to the sea view which was stunning. The food and wine pairings were amazing as well. We would 100% recommend going if you’re looking for a special evening.",
    "published_date": "2 weeks ago",
    "visited_date": "Jun 2026",
    "trip_type": "Couples",
    "tip": null,
    "helpful_votes": 0,
    "photos": [
      "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/33/aa/9b/96/caption.jpg"
    ],
    "review_url": "https://www.tripadvisor.com/ShowUserReviews-g187892-d12850867-r1065745909-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html",
    "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=Review&contentId=1065745909&locationId=12850867",
    "author": {
      "name": "George B",
      "profile_url": "https://www.tripadvisor.com/Profile/C241EKgeorgeb",
      "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/1a/f6/f1/79/default-avatar-2020-21.jpg",
      "hometown": null,
      "contributions": 5,
      "helpful_votes": 0
    },
    "owner_response": {
      "author": {
        "name": "VOIhotels sede centrale",
        "profile_url": "https://www.tripadvisor.com/Profile/VOIhotelsITA",
        "avatar_url": "https://dynamic-media-cdn.tripadvisor.com/media/photo-o/2d/7f/6e/ba/voihotelsita.jpg",
        "position": "Marketing at Restaurant Armònia"
      },
      "published_date": "June 27, 2026",
      "report_url": "https://www.tripadvisor.com/SocialIapReporting?objectType=OwnerResponse&contentId=1065973244&locationId=12850867",
      "text": "Dear C241EKgeorgeb,\n\nThank you so much for sharing your experience and for choosing Armonia Restaurant!\n\nWe’re delighted to hear that your evening with us was so special and that you enjoyed both the attentive service from our staff and the stunning sea view. \n\nWe truly appreciate your recommendation and look forward to welcoming you back soon for another beautiful dinner by the sea.\n\nDana Muscalu \nRestaurant Manager ",
      "text_clean": "Dear C241EKgeorgeb,\n\nThank you so much for sharing your experience and for choosing Armonia Restaurant!\n\nWe’re delighted to hear that your evening with us was so special and that you enjoyed both the attentive service from our staff and the stunning sea view. \n\nWe truly appreciate your recommendation and look forward to welcoming you back soon for another beautiful dinner by the sea.\n\nDana Muscalu \nRestaurant Manager "
    },
    "subratings": {},
    "keyword_query": "amazing",
    "keyword_match": true
  }
]
````

### 🧾 What you get, per review

- Review content — title, text, rating, published date, visited date, trip type, tip
- Reviewer info — name, profile URL, avatar, hometown, contributions, helpful votes
- Owner reply — reply text and date, if the business responded
- Category subratings — e.g. Service, Value, Location, depending on listing type
- Listing-wide stats — total review count, overall rating, rating distribution
- Keyword match — whether the search query matched this review

### 🔍 How keyword search works

The `search` field is a single query, same as what you'd type into Tripadvisor's own review search box.

- **`searchIsLocalFilter` unchecked (default):** the query is sent to Tripadvisor as a server-side filter — only matching reviews are returned, and every one of them is marked `keyword_match: true`.
- **`searchIsLocalFilter` checked:** the query is *not* sent to Tripadvisor. Every review is still fetched and returned, but each one is checked locally against the title and text, and gets a `keyword_match` flag showing whether it was found.

Use the checked option when you want the full, unfiltered review set but still want to know which reviews mention your keyword.

### 📅 How the date filter works

- **`sincePeriod`** — a relative window (last 1 month / 3 months / 6 months / 1 year), computed from today's date.
- **`sinceDate`** — an exact calendar date. If set, it overrides `sincePeriod`.

Leave both empty to fetch reviews from any date.

### 🔧 Input options

| Field | Description |
|---|---|
| `listingUrls` | One or more Tripadvisor listing page URLs (hotel, restaurant, attraction, or attraction product) |
| `maxResults` | Max reviews to collect per listing. Leave empty to collect all available |
| `rating` | Filter by star rating (1–5), multi-select |
| `sincePeriod` | Relative date window: last 1/3/6 months or 1 year |
| `sinceDate` | Exact start date, overrides `sincePeriod` if set |
| `months` | Filter reviews written in specific calendar months, multi-select |
| `type` | Filter by trip type — Business, Couples, Family, Friends, Solo |
| `search` | Keyword to search for in reviews |
| `searchIsLocalFilter` | If checked, `search` tags reviews locally instead of filtering them via Tripadvisor |

### 📊 Data Fields

#### 📝 Review Details

| Field | Description |
|---|---|
| `listing_url` | Tripadvisor listing page URL this review belongs to |
| `listing_title` | Title of the listing |
| `review_id` | Unique ID of the review |
| `rating` | Reviewer's overall star rating |
| `title` / `text` | Review title and body text (HTML) |
| `published_date` | Localized date the review was published |
| `visited_date` | Localized date the reviewer visited |
| `trip_type` | Business, Couples, Family, Friends, or Solo |
| `tip` | Reviewer's tip for future visitors, if provided |
| `helpful_votes` | Number of helpful votes the review received |
| `photos` | URLs of photos attached to the review |
| `review_url` | Shareable public URL of the review |

#### 👤 Reviewer

| Field | Description |
|---|---|
| `author` | Name, profile URL, avatar, hometown, contributions, helpful votes count |

#### 🏢 Owner

| Field | Description |
|---|---|
| `owner_response` | Author, published date, report URL, and reply text — if the owner replied |

#### ⭐ Ratings & Matching

| Field | Description |
|---|---|
| `subratings` | Category subratings (e.g. Service, Value, Location), keyed by category label |
| `reviews_stats` | Listing-wide aggregate stats — total reviews, overall rating, rating distribution |
| `keyword_query` | The search keyword provided in actor input, if any |
| `keyword_match` | True if the query matched this review — verified locally, or because Tripadvisor's own filter already applied it |

### 🚀 Running the actor

#### Via Apify Console

Open the actor page, fill in the input form, and click **Start**.

#### Via Apify API — Python

```python
import requests

APIFY_TOKEN = "your_apify_token"
ACTOR_ID = "mof1re~tripadvisor-reviews-scraper"

run_input = {
    "listingUrls": [
        {"url": "https://www.tripadvisor.com/Hotel_Review-g187497-d232778-Reviews-Hotel_Arc_La_Rambla-Barcelona_Catalonia.html"}
    ],
    "maxResults": 200,
    "rating": ["4", "5"],
    "sincePeriod": "6_months",
    "sinceDate": None,
    "months": [],
    "type": [],
    "search": "",
    "searchIsLocalFilter": False
}

response = requests.post(
    f"https://api.apify.com/v2/acts/{ACTOR_ID}/run-sync-get-dataset-items",
    params={"token": APIFY_TOKEN},
    json=run_input,
)

reviews = response.json()
print(f"Fetched {len(reviews)} reviews")
```

#### Via Apify API — Node.js

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

const client = new ApifyClient({ token: 'your_apify_token' });

const input = {
    listingUrls: [
        { url: 'https://www.tripadvisor.com/Hotel_Review-g187497-d232778-Reviews-Hotel_Arc_La_Rambla-Barcelona_Catalonia.html' }
    ],
    maxResults: 200,
    rating: ['4', '5'],
    sincePeriod: '6_months',
    sinceDate: null,
    months: [],
    type: [],
    search: '',
    searchIsLocalFilter: false,
};

const run = await client.actor('mof1re/tripadvisor-reviews-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

console.log(`Fetched ${items.length} reviews`);
```

#### Example input JSON

```json
{
  "listingUrls": [
    { "url": "https://www.tripadvisor.com/Hotel_Review-g187497-d232778-Reviews-Hotel_Arc_La_Rambla-Barcelona_Catalonia.html" },
    { "url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html" }
  ],
  "maxResults": 200,
  "rating": ["1", "2", "3", "4", "5"],
  "sincePeriod": "3_months",
  "sinceDate": null,
  "months": ["1", "3", "4"],
  "type": ["Business", "Couples", "Family", "Friends", "Solo"],
  "search": "good",
  "searchIsLocalFilter": false
}
```

### 💳 Pricing

Pay-per-result. You're charged for reviews actually delivered, not for pages fetched or requests made.

### ⚠️ Notes

- Free-tier accounts are capped at a small sample size per run, and to a single listing per run — upgrade to a paid Apify plan for full volume and batch scraping.
- Data reflects what's publicly listed on tripadvisor.com at the time of the run; the source updates continuously.

### 🔗 See also

Need reviews from another platform? Check out:

- [Booking.com Reviews Scraper](https://apify.com/mof1re/booking-reviews-scraper-browserless)
- [AirBnb Reviews Scraper](https://apify.com/mof1re/airbnb-reviews-scraper-browserless)
- [Trustpilot Reviews Scraper](https://apify.com/mof1re/trustpilot-scraper-fast-browserlessapif)

# Actor input Schema

## `listingUrls` (type: `array`):

Tripadvisor listing URLs to scrape reviews from.

## `maxResults` (type: `integer`):

Maximum number of reviews to scrape per listing. Leave empty to try to get all reviews.

## `rating` (type: `array`):

Filter reviews by star rating. Leave empty to include all ratings.

## `sincePeriod` (type: `string`):

Show reviews from the selected period, relative to today. Ignored if "Reviews since (exact date)" below is set.

## `sinceDate` (type: `string`):

Optional. Pick an exact start date for reviews. Overrides "Reviews since (period)" if set.

## `months` (type: `array`):

Filter reviews written in these months. Leave empty to include all months.

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

Filter reviews by trip type. Leave empty to include all types.

## `search` (type: `string`):

Filter reviews containing this keyword.

## `searchIsLocalFilter` (type: `boolean`):

If enabled, keyword filtering is applied locally to already-fetched reviews. If disabled, the keyword is sent to Tripadvisor and results returned are treated as already matched.

## Actor input object example

```json
{
  "listingUrls": [
    {
      "url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html"
    }
  ],
  "maxResults": 100,
  "rating": [],
  "months": [],
  "type": [],
  "searchIsLocalFilter": false
}
```

# Actor output Schema

## `jobAds` (type: `string`):

No description

# 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 = {
    "listingUrls": [
        {
            "url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mof1re/tripadvisor-reviews-scraper-browserless").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 = { "listingUrls": [{ "url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html" }] }

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

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

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

```

## CLI example

```bash
echo '{
  "listingUrls": [
    {
      "url": "https://www.tripadvisor.com/Restaurant_Review-g187892-d12850867-Reviews-Restaurant_Armonia-Taormina_Province_of_Messina_Sicily.html"
    }
  ]
}' |
apify call mof1re/tripadvisor-reviews-scraper-browserless --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mof1re/tripadvisor-reviews-scraper-browserless",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tripadvisor Reviews Scraper - Fast & Browserless",
        "description": "⚡ Scrapes Tripadvisor reviews via raw HTTP requests — no browser, no headless Chrome. Structured output: ratings, reviewer info, review text, owner replies, trip type, visit date, and category subratings. Filter by rating, date range, month, trip type, and keyword. Built for speed and clean data.",
        "version": "0.1",
        "x-build-id": "JLuwExlKKhhBYjmiW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mof1re~tripadvisor-reviews-scraper-browserless/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mof1re-tripadvisor-reviews-scraper-browserless",
                "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/mof1re~tripadvisor-reviews-scraper-browserless/runs": {
            "post": {
                "operationId": "runs-sync-mof1re-tripadvisor-reviews-scraper-browserless",
                "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/mof1re~tripadvisor-reviews-scraper-browserless/run-sync": {
            "post": {
                "operationId": "run-sync-mof1re-tripadvisor-reviews-scraper-browserless",
                "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": [
                    "listingUrls"
                ],
                "properties": {
                    "listingUrls": {
                        "title": "🔗 Listing URLs",
                        "type": "array",
                        "description": "Tripadvisor listing URLs to scrape reviews from.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "🔢 Max reviews per listing",
                        "type": "integer",
                        "description": "Maximum number of reviews to scrape per listing. Leave empty to try to get all reviews.",
                        "default": 100
                    },
                    "rating": {
                        "title": "⭐ Rating",
                        "type": "array",
                        "description": "Filter reviews by star rating. Leave empty to include all ratings.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "⭐ 1 star",
                                "⭐⭐ 2 stars",
                                "⭐⭐⭐ 3 stars",
                                "⭐⭐⭐⭐ 4 stars",
                                "⭐⭐⭐⭐⭐ 5 stars"
                            ]
                        },
                        "default": []
                    },
                    "sincePeriod": {
                        "title": "📅 Reviews since (period)",
                        "enum": [
                            "",
                            "1_month",
                            "3_months",
                            "6_months",
                            "1_year"
                        ],
                        "type": "string",
                        "description": "Show reviews from the selected period, relative to today. Ignored if \"Reviews since (exact date)\" below is set."
                    },
                    "sinceDate": {
                        "title": "📅 Reviews since (exact date)",
                        "type": "string",
                        "description": "Optional. Pick an exact start date for reviews. Overrides \"Reviews since (period)\" if set."
                    },
                    "months": {
                        "title": "🗓️ Months",
                        "type": "array",
                        "description": "Filter reviews written in these months. Leave empty to include all months.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6",
                                "7",
                                "8",
                                "9",
                                "10",
                                "11",
                                "12"
                            ],
                            "enumTitles": [
                                "January",
                                "February",
                                "March",
                                "April",
                                "May",
                                "June",
                                "July",
                                "August",
                                "September",
                                "October",
                                "November",
                                "December"
                            ]
                        },
                        "default": []
                    },
                    "type": {
                        "title": "🧳 Trip type",
                        "type": "array",
                        "description": "Filter reviews by trip type. Leave empty to include all types.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Business",
                                "Couples",
                                "Family",
                                "Friends",
                                "Solo"
                            ],
                            "enumTitles": [
                                "💼 Business",
                                "❤️ Couples",
                                "👨‍👩‍👧 Family",
                                "👯 Friends",
                                "🧍 Solo"
                            ]
                        },
                        "default": []
                    },
                    "search": {
                        "title": "🔍 Search keyword",
                        "type": "string",
                        "description": "Filter reviews containing this keyword."
                    },
                    "searchIsLocalFilter": {
                        "title": "🔄 Search is local filter",
                        "type": "boolean",
                        "description": "If enabled, keyword filtering is applied locally to already-fetched reviews. If disabled, the keyword is sent to Tripadvisor and results returned are treated as already matched.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
