# Free Booking Reviews Scraper (`mof1re/free-booking-reviews-scraper`) Actor

Free Booking review scraper. No per-result charge, pay only Apify proxy/compute costs. Get full review text, guest details, stay data, and hotel rating breakdowns via Booking's internal API, no browser needed. Bypasses WAF automatically. 10 runs/day, 5 hotels/run.

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

## Pricing

from $0.00005 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Scrape Booking.com Reviews | 🆓 Free

Scrape Booking.com reviews for free, straight from the site's internal review API, not a headless browser. No per-result charge, no subscription: this is a free Booking.com review scraper, you only cover Apify's own platform usage (proxy traffic and compute), nothing goes to the developer. You get the full review content (positive, negative, and title) alongside guest details, stay data, and hotel-wide rating breakdowns, all in one clean dataset.

Looking for a way to extract Booking hotel review data without paying per review? This free actor calls the same API Booking.com's own frontend uses, so it stays fast and stays online after layout changes that break HTML scrapers, at zero cost beyond your own proxy and compute usage.

### 🆓 Free tier limits

This is a free Booking Reviews Scraper: no charge per result, no rental fee. You only pay Apify for the proxy and compute your run uses, same as you would running any actor with your own proxy. To keep the free plan sustainable, these limits apply:

- **10 runs per day** for free-tier accounts. Paid Apify accounts skip this limit.
- **Up to 5 hotels per run** on the free tier, up to 25 on a paid Apify account.
- **No cap on reviews per hotel.** `maxResults` is yours to set

Need more than that? A proxy is required either way. Use Apify Proxy (Residential or Datacenter) or plug in your own proxy URLs under "Proxy configuration" in the input, the actor won't start without one.

### ⚡ Why use this free Booking Reviews Scraper

- **Free, not a limited trial.** No credit card charge per result and no expiring trial period. Most Booking.com review scrapers you find charge per row from the first run; this one only bills you for the proxy and compute you'd pay for anyway.
- **Full dataset, not a summary.** Every review comes with the complete positive/negative text split, guest profile info, room and stay details, and the hotel's reply where present. Most tools that scrape Booking.com reviews for free give you a score and a snippet of text and stop there.
- **Bypasses Booking.com's bot protection automatically.** Booking.com puts an AWS WAF challenge in front of its pages specifically to slow down scrapers. This actor solves that challenge on its own, on every run, so you never see a blocked request.
- **Hotel-wide rating breakdown included.** Per-category scores (cleanliness, comfort, location, and more) are attached to every review, not buried behind a separate call.
- **Flexible filtering.** Sort order and translation language match what's available on the live site, plus keyword search across the review title, positive text, and negative text at once.
- **Batch scraping.** Crawl and extract reviews for up to 5 hotels in a single free run.
- **Fast, no-code extraction.** No browser, no rendering wait. Pure HTTP calls to the same internal API the Booking.com frontend uses.

### 🎯 Who uses this free Booking Reviews Scraper

- **Hotel operators & revenue managers** monitoring guest feedback across their own properties and reacting to recurring complaints before they hit occupancy.
- **Market researchers & hospitality analysts** studying guest sentiment, category-score trends, or seasonal patterns across a city or hotel chain.
- **Competitor analysis teams** benchmarking review scores and category ratings against rival properties to spot where they're losing on cleanliness, location, or service.
- **Data teams running sentiment analysis** feeding positive/negative review text straight into NLP pipelines for topic and trend detection.
- **Reputation monitoring tools** tracking new reviews and hotel replies over time to measure response rate and tone.

### 🧾 What you get, per review

- Review content: title, positive text, negative text, overall score, approval status
- Guest info: username, guest type, review count, country, avatar, anonymity flag, join date
- Stay details: room type, check-in/check-out dates, customer type, stay status
- Hotel reply: reply message, when the hotel responded
- Hotel-wide ratings: category-by-category score breakdown for the hotel
- Keyword match: whether and where a search term was found

### 🔧 Input options

| Field | Description |
|---|---|
| `hotelUrls` | One or more Booking.com hotel page URLs (max 5 on free tier) |
| `maxResults` | Max reviews to collect per hotel. Leave empty to collect all available |
| `sort` | Sort order: most relevant, newest, oldest, highest or lowest score |
| `lang` | Language reviews are auto-translated into (40+ supported) |
| `search` | Keywords to tag in reviews, matched against title, positive, and negative text |
| `proxyConfiguration` | Required. Apify Proxy (Residential/Datacenter) or your own proxy URLs |

#### Example input

```json
{
    "hotelUrls": [
        { "url": "https://www.booking.com/hotel/it/al-mascaron-ridente.html" },
        { "url": "https://www.booking.com/hotel/it/palazzo-ti-tti.html" }
    ],
    "maxResults": 500,
    "search": ["amazing", "good"],
    "sort": "MOST_RELEVANT",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### 🐍 Run it with Python

Install the client:

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

Then run the actor and pull the results:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "hotelUrls": [
        {"url": "https://www.booking.com/hotel/it/al-mascaron-ridente.html"},
        {"url": "https://www.booking.com/hotel/it/palazzo-ti-tti.html"},
    ],
    "maxResults": 500,
    "search": ["amazing", "good"],
    "sort": "MOST_RELEVANT",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

run = client.actor("mof1re/booking-reviews-scraper-browserless").call(run_input=run_input)

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["hotel_name"], review["review_score"], review["review_title"])
```

`call()` blocks until the run finishes. If you're kicking off a long run and don't want to wait, use `client.actor(...).start(run_input=run_input)` instead, then poll or fetch the dataset later with the returned run ID.

### 🤖 Use it from Claude via MCP

This actor also runs as a tool inside Claude (or any other MCP-compatible AI client), no code needed. Apify runs a hosted MCP server at `https://mcp.apify.com` that exposes Actors from Apify Store as callable tools.

**Hosted server (recommended)**

Add a custom connector in Claude Desktop with server URL `https://mcp.apify.com` and sign in with your Apify account. The default tool set already includes Actor search and detail lookup, so you can just ask: *"Scrape reviews for these two Booking.com hotels and tag any mentioning 'amazing' or 'good'."* Claude finds this actor in Apify Store and runs it with the input you described.

To skip the search step and expose this actor directly, add it to the `tools` query parameter:

```
https://mcp.apify.com?tools=mof1re/booking-reviews-scraper-browserless
```

**Local stdio server**

For clients that don't support the remote URL, run the server locally:

```json
{
  "mcpServers": {
    "actors-mcp-server": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

To limit the local server to this actor, pass `--tools` on the command line instead:

```
npx @apify/actors-mcp-server --tools mof1re/booking-reviews-scraper-browserless
```

Full setup and tool reference: [Apify MCP server docs](https://docs.apify.com/platform/integrations/mcp).

### 📊 Data Fields

#### 📝 Review Details

| Field | Description                                                |
|---|------------------------------------------------------------|
| `hotel_url` | Hotel page URL this review belongs to                      |
| `hotel_name` | Name of the hotel                                          |
| `accommodation_type` | Type of accommodation (hotel, apartment, etc.)             |
| `review_score` | Reviewer's overall score for this stay                     |
| `review_approved` | Whether the review passed moderation                       |
| `review_title` | Review headline                                            |
| `review_positive_text` | Positive part of the review                                |
| `review_negative_text` | Negative part of the review                                |
| `review_photos` | Photos attached to review in max resolution (if available) |
| `review_reply` | Hotel's reply to the review, if any                        |

#### 👤 Guest

| Field | Description |
|---|---|
| `guest_username` | Display name of the reviewer |
| `guest_type` | Type of guest (e.g. couple, solo, family) |
| `guest_reviews` | Total number of reviews written by this guest |
| `guest_country` | Reviewer's country name |
| `guest_country_code` | Reviewer's country code |
| `guest_avatar` | URL of the reviewer's avatar image |
| `guest_anonymous` | Whether the reviewer chose to stay anonymous |
| `guest_join_date` | Date the reviewer joined |

#### 🛏️ Stay Details

| Field | Description |
|---|---|
| `booking_room` | Room type booked by the guest |
| `booking_checkin` | Check-in date of the stay |
| `booking_checkout` | Check-out date of the stay |
| `booking_customer_type` | Customer type for this booking |
| `booking_stay_status` | Status of the stay (e.g. completed) |

#### ⭐ Ratings & Matching

| Field | Description |
|---|---|
| `rating_statistics` | Hotel-wide rating breakdown by category (cleanliness, comfort, etc.). Same for every review of a given hotel |
| `keyword_match` | True if search keywords were set and at least one matched this review |
| `matched_keywords` | Map of matched keyword to the field it was found in (title, positive, or negative text) |

### 📋 Example output

```json
[
  {
    "hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html",
    "hotel_name": "Flora Hotel Apartments",
    "accommodation_type": "HOTEL",
    "review_score": 9.0,
    "review_approved": true,
    "review_title": "Very enjoyable  weekend break at tha Flora Hotel Appts which was very enjoyable.",
    "review_positive_text": "This was a short two day break to Protaras for my wife’s birthday.\nMy only slight gripe was the mattresses on the beds.\nI don’t know if they were new but they were very hard.\nWe had two breakfasts and one evening meal which were all delicious\nA special shout out to all the staff who were all brilliant.\nThis was our second short stay at the Flora Hotel Appts and we will definitely be back later in the year.",
    "review_negative_text": null,
    "review_photos": null,
    "review_reply": "Thank you for choosing Flora Hotel Apartments for your wife's birthday getaway! We are thrilled to hear that you enjoyed your stay with us and found the breakfasts and evening meal delicious. Your feedback on the mattresses is greatly appreciated, and we will look into improving this for your next visit. We are grateful for your kind words about our staff; they work hard to ensure our guests have a memorable experience. We can't wait to welcome you back later this year for another enjoyable stay.",
    "guest_username": "Brian",
    "guest_type": "Couple",
    "guest_reviews": 19,
    "guest_country": "Cyprus",
    "guest_country_code": "cy",
    "guest_avatar": "https://xx.bstatic.com/static/img/review/avatars/ava-b.png",
    "guest_anonymous": false,
    "guest_join_date": "2013-06-03",
    "booking_room": "Standard Apartment",
    "booking_checkin": "2025-04-04",
    "booking_checkout": "2025-04-06",
    "booking_customer_type": "COUPLES",
    "booking_stay_status": "stayed",
    "rating_statistics": {
      "hotel_staff": {
        "rating_rounded": 9.0,
        "rating_orig": 9.00786304473877,
        "name_translated": "Staff"
      },
      "hotel_services": {
        "rating_rounded": 7.7,
        "rating_orig": 7.72118091583252,
        "name_translated": "Facilities"
      },
      "hotel_clean": {
        "rating_rounded": 8.2,
        "rating_orig": 8.20839023590088,
        "name_translated": "Cleanliness"
      },
      "hotel_comfort": {
        "rating_rounded": 8.1,
        "rating_orig": 8.10650062561035,
        "name_translated": "Comfort"
      },
      "hotel_value": {
        "rating_rounded": 8.5,
        "rating_orig": 8.52496433258057,
        "name_translated": "Value for money"
      },
      "hotel_location": {
        "rating_rounded": 9.2,
        "rating_orig": 9.24711036682129,
        "name_translated": "Location"
      },
      "hotel_free_wifi": {
        "rating_rounded": 8.5,
        "rating_orig": 8.51440048217773,
        "name_translated": "Free Wifi"
      }
    },
    "keyword_match": false,
    "matched_keywords": {}
  },
  {
    "hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html",
    "hotel_name": "Flora Hotel Apartments",
    "accommodation_type": "HOTEL",
    "review_score": 9.0,
    "review_approved": true,
    "review_title": null,
    "review_positive_text": "Great location, right on top of the northern end of the strip, few minutes walk down to the beach. Room was clean, WiFi was stable, staff were polite and attentive. Would happily stay again if a cheap and cheerful place was needed.",
    "review_negative_text": null,
    "review_photos": null,
    "review_reply": "Thank you for taking the time to share your thoughts! We are thrilled to hear you enjoyed our central location, clean rooms, reliable WiFi, and our attentive staff. It's wonderful to know that you had a pleasant stay with us. We look forward to welcoming you back to Flora Hotel Apartments whenever you need a \"cheap and cheerful\" place in the area. Your kind words mean a lot to us!",
    "guest_username": "Mark",
    "guest_type": "Family",
    "guest_reviews": 14,
    "guest_country": "United Kingdom",
    "guest_country_code": "gb",
    "guest_avatar": "https://graph.facebook.com/v2.9/10157434864745648/picture?type=square&height=64&width=64",
    "guest_anonymous": false,
    "guest_join_date": "2016-09-30",
    "booking_room": "One-Bedroom Apartment",
    "booking_checkin": "2025-03-29",
    "booking_checkout": "2025-03-30",
    "booking_customer_type": "FAMILIES",
    "booking_stay_status": "stayed",
    "rating_statistics": {
      "hotel_staff": {
        "rating_rounded": 9.0,
        "rating_orig": 9.00786304473877,
        "name_translated": "Staff"
      },
      "hotel_services": {
        "rating_rounded": 7.7,
        "rating_orig": 7.72118091583252,
        "name_translated": "Facilities"
      },
      "hotel_clean": {
        "rating_rounded": 8.2,
        "rating_orig": 8.20839023590088,
        "name_translated": "Cleanliness"
      },
      "hotel_comfort": {
        "rating_rounded": 8.1,
        "rating_orig": 8.10650062561035,
        "name_translated": "Comfort"
      },
      "hotel_value": {
        "rating_rounded": 8.5,
        "rating_orig": 8.52496433258057,
        "name_translated": "Value for money"
      },
      "hotel_location": {
        "rating_rounded": 9.2,
        "rating_orig": 9.24711036682129,
        "name_translated": "Location"
      },
      "hotel_free_wifi": {
        "rating_rounded": 8.5,
        "rating_orig": 8.51440048217773,
        "name_translated": "Free Wifi"
      }
    },
    "keyword_match": false,
    "matched_keywords": {}
  },
  {
    "hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html",
    "hotel_name": "Flora Hotel Apartments",
    "accommodation_type": "HOTEL",
    "review_score": 8.0,
    "review_approved": true,
    "review_title": "Nice option for a short stay",
    "review_positive_text": "Friendly staff",
    "review_negative_text": "Mattress are very hard",
    "review_reply": null,
    "guest_username": "Milos",
    "guest_type": "Solo traveler",
    "guest_reviews": 129,
    "guest_country": "United Kingdom",
    "guest_country_code": "gb",
    "guest_avatar": "https://xx.bstatic.com/static/img/review/avatars/ava-m.png",
    "guest_anonymous": false,
    "guest_join_date": "2013-03-25",
    "booking_room": "One-Bedroom Apartment with Pool View",
    "booking_checkin": "2024-09-27",
    "booking_checkout": "2024-09-30",
    "booking_customer_type": "SOLO_TRAVELLERS",
    "booking_stay_status": "stayed",
    "rating_statistics": {
      "hotel_staff": {
        "rating_rounded": 9.0,
        "rating_orig": 9.00786304473877,
        "name_translated": "Staff"
      },
      "hotel_services": {
        "rating_rounded": 7.7,
        "rating_orig": 7.72118091583252,
        "name_translated": "Facilities"
      },
      "hotel_clean": {
        "rating_rounded": 8.2,
        "rating_orig": 8.20839023590088,
        "name_translated": "Cleanliness"
      },
      "hotel_comfort": {
        "rating_rounded": 8.1,
        "rating_orig": 8.10650062561035,
        "name_translated": "Comfort"
      },
      "hotel_value": {
        "rating_rounded": 8.5,
        "rating_orig": 8.52496433258057,
        "name_translated": "Value for money"
      },
      "hotel_location": {
        "rating_rounded": 9.2,
        "rating_orig": 9.24711036682129,
        "name_translated": "Location"
      },
      "hotel_free_wifi": {
        "rating_rounded": 8.5,
        "rating_orig": 8.51440048217773,
        "name_translated": "Free Wifi"
      }
    },
    "keyword_match": false,
    "matched_keywords": {}
  }
]
```

### ❓ FAQ

**How is this different from other free tools that scrape Booking.com reviews?** Most either charge per result from the first row or parse the rendered HTML page, which breaks every time Booking.com updates its layout, and most stop cold at Booking.com's WAF challenge. This actor calls the internal API directly, solves the WAF challenge automatically, and doesn't charge per result.

**Is this actor really free?** Yes. There's no per-result charge. You only pay Apify for the platform usage your run consumes, mainly proxy traffic and compute time, same as running any actor with your own proxy.

**Does this scraper need an account or API key?** No Booking.com account needed. It extracts publicly available review data. You do need an Apify API token to run it via the API or Python client.

**Do I need to provide my own proxy?** You need a proxy either way. Use Apify Proxy (Residential or Datacenter, billed by Apify at platform rates) or your own proxy URLs. The actor won't run without one set in the input.

**How many reviews can I extract per hotel?** Up to the limit you set in `maxResults`, or all available reviews if left empty. No cap here, just the 5-hotels-per-run and 10-runs-per-day limits.

**Can I filter reviews by keyword?** Yes. Set the `search` field to match against the review title, positive text, and negative text at once.

**Does it work without a browser?** Yes. It calls the internal review API directly instead of rendering pages in a browser, which makes it faster and cheaper per review than browser-based crawlers.

**Can I get reviews in a specific language?** Yes. The `lang` field matches Booking.com's own review auto-translation options.

**Is this legal? Can I scrape publicly available reviews?** This tool extracts publicly available review data. You're responsible for complying with the target site's terms of service and applicable data protection laws for your use case.

### 💳 Pricing

Free. No per-result charge, no rental fee. You're billed by Apify only for platform usage (proxy and compute), not by this actor's developer.

### ⚠️ Notes

- Limited to 5 hotels per run and 10 runs per day, see Free tier limits above.
- A proxy (Apify Proxy or your own) is required to run this actor.
- Data reflects what's publicly listed on Booking.com at the time of the run; the source updates continuously.

### 🔗 See also

Need a scraper for another platform? Check out:

- [Trustpilot Reviews Scraper](https://apify.com/mof1re/trustpilot-scraper-fast-browserlessapif)
- [AirBNB Reviews Scraper](https://apify.com/mof1re/airbnb-reviews-scraper-browserless)
- [TripAdvisor Reviews Scraper](https://apify.com/mof1re/tripadvisor-reviews-scraper-browserless)
- [Arbeitsagentur Scraper, Most Complete Result Dataset on Apify](https://apify.com/mof1re/arbeitsagentur-scraper)

# Actor input Schema

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

Booking.com hotel page URLs to scrape reviews from.

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

How many reviews to collect per hotel. Leave empty to get all (free-tier is capped at 50 anyway).

## `sort` (type: `string`):

Order in which reviews are fetched from Booking.

## `lang` (type: `string`):

Language Booking will auto-translate reviews into.

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

Keywords to tag/flag in reviews (does not filter them out). Every review is still returned, but each one gets marked with keyword\_match and matched\_keywords showing whether/where a keyword was found (title, positive, or negative text).

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

Required. Choose Apify Proxy (Residential or Datacenter) or provide your own proxy URLs. This free actor does not run without a proxy.

## Actor input object example

```json
{
  "hotelUrls": [
    {
      "url": "https://www.booking.com/hotel/tr/veyron-hotels-amp-spa.html"
    }
  ],
  "maxResults": 100,
  "sort": "MOST_RELEVANT",
  "lang": "en-us",
  "search": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "hotelUrls": [
        {
            "url": "https://www.booking.com/hotel/tr/veyron-hotels-amp-spa.html"
        }
    ],
    "search": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mof1re/free-booking-reviews-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 = {
    "hotelUrls": [{ "url": "https://www.booking.com/hotel/tr/veyron-hotels-amp-spa.html" }],
    "search": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mof1re/free-booking-reviews-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 '{
  "hotelUrls": [
    {
      "url": "https://www.booking.com/hotel/tr/veyron-hotels-amp-spa.html"
    }
  ],
  "search": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call mof1re/free-booking-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mof1re/free-booking-reviews-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/qmuhQGiabbQ1U7W81/builds/gcgOveJKTu0v32sDh/openapi.json
