# Multi Booking Scraper API: Airbnb, Booking.com, Vrbo & More (`openclawai/hotel-rental-scraper`) Actor

$5/1K. Multi booking scraper API: search Airbnb, Booking.com, Vrbo, Expedia, Hotels.com, Agoda, Google Hotels, Hostelworld & TripAdvisor for one or many cities in one run. Prices for your dates, photos, ratings, amenities, links. Hotel price tracker, STR data, MCP-ready. No login.

- **URL**: https://apify.com/openclawai/hotel-rental-scraper.md
- **Developed by:** [Pika Choo](https://apify.com/openclawai) (community)
- **Categories:** Travel, E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$5.00 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Multi Booking Scraper API: Airbnb, Booking.com, Vrbo, Expedia, Agoda, Google Hotels, TripAdvisor & Hostelworld

**The multi booking scraper: one API for hotel and vacation rental data from 9 sites. $5 per 1,000 results, no login, no API key, no partner account.** Give it one place or a list of places, dates and guests. It searches **Airbnb, Booking.com, Vrbo, Expedia, Hotels.com, Agoda, Google Hotels, Hostelworld and TripAdvisor** in parallel and returns one clean table: price per night and total for your dates (with taxes and discounts), up to 30 photos, a 0–10 rating you can compare across sites, sub-scores, reviews, amenities, free-cancellation dates, map coordinates and a direct booking link. Google Hotels rows add **every booking site's price for the same hotel**. Tick one box to add **tours, attractions and experiences**.

Use it as an **Airbnb API**, a **Booking.com API**, a **Vrbo listings** feed, a **hotel price tracker**, **short-term rental (STR) data** for market research, or as an **MCP tool for AI agents**.

### The Airbnb, Booking.com, Vrbo and Expedia API you can actually use

| Site | Official API | This Actor |
|---|---|---|
| Airbnb | No public API (partner programme only) | ✅ Listings, nightly + total price, fees, photos, rating, badges, experiences |
| Booking.com | Demand/Affiliate API for approved partners | ✅ Hotels & apartments, price with taxes, discounts, cancellation date, room, sub-score |
| Vrbo | No public API | ✅ Vacation rental listings, price for your dates, bedrooms, photos, rating |
| Expedia / Hotels.com | Rapid API for vetted partners | ✅ Hotels, nightly + all-in total, badges, amenities, rating |
| Agoda | Affiliate partners only | ✅ Hotels with sub-scores, review quote, landmarks, taxes, pay-later |
| Google Hotels | No public prices API | ✅ Hotels + **price on every booking site** |
| TripAdvisor | Content API capped at 5 reviews / 5 photos per location | ✅ Hotels + tours, attractions and experiences with prices |
| Hostelworld | No public API | ✅ Hostels with dorm & private prices, 7 sub-scores |

No partner application, no approval wait, no rate-limited keys. Sign in to Apify, run it, get JSON, CSV or Excel, or call it from your code or agent.

### Why this travel scraper

- 🌐 **9 sites, one run, one schema.** No more five different Actors with five output formats. Every site runs in parallel and lands in the same columns.
- 💵 **Real prices for your dates.** Price per night *and* total for the check-in and nights you choose, plus the crossed-out price when there's a discount.
- ⚖️ **Price comparison built in.** Google Hotels rows carry `otherSitePrices`: the cheapest nightly rate on Booking.com, Expedia, Hotels.com, the hotel's own site and more, with links.
- ⭐ **Ratings you can compare.** Airbnb rates out of 5, Booking out of 10, Hostelworld out of 100. `rating` puts them all on 0–10; `ratingOriginal` keeps the site's own number.
- 🎟️ **Things to do included.** Tours, attractions and experiences with rating, reviews, price from and photos.
- 🛡️ **Built not to come back empty.** Every site has a fallback chain: fresh residential IPs on every retry, then a real browser with a fresh device fingerprint, then a heavy-duty unblocking route. In our 23-run stress test (20 cities + 3 large searches at once) every selected site returned results in every run.
- 🧱 **One slow site never sinks the run.** Sites run in parallel and independently; if a site can't be reached in time you still get everything else, plus a free hint row naming it.
- 💱 **One currency per run.** Pick a currency and every price in the table is in it. Sites that only quote USD are converted at the European Central Bank daily rate, and the row keeps `originalCurrency` and `exchangeRate` so nothing is hidden.
- ⏱️ **Fast.** 9 sites × 20 results + things to do in under a minute. Short run timeouts end with partial results, not a failed run.
- 💰 **One flat price.** $5 per 1,000 results. Hint rows are free. No start fee, no add-on events.

### How it compares

Store figures as of September 30, 2026. This Actor is new; what it offers is every major stays site in one run and one format.

| Actor | Sites | Price (Free plan) | Photos | Price for your dates | Things to do |
|---|---|---|---|---|---|
| **This Actor** | **9** | **$5 / 1,000** | Gallery (up to 30) | Per night + total | ✅ |
| Top Booking.com scraper | 1 | $5 / 1,000 + $5 / 1,000 for room details | 1 photo | Total | ❌ |
| Top Airbnb scraper | 1 | $4 / 1,000 ($6 enriched) | Gallery | Per night + total | ❌ |
| Top Google Hotels scraper | 1 | $4.99 / 1,000 | Gallery | Per night | ❌ |
| Best multi-site travel Actor found | 3 | $50 / 1,000 tool calls | varies | varies | partial |

### Search many places in one run

Like our Multi Job Board Scraper's multiple search terms, `locations` takes up to 10 places. Every site runs for every place in parallel, results are merged and de-duplicated (a property found for two overlapping places is returned and charged once), and each row's `searchLocation` tells you which place it came from.

```json
{
    "locations": ["Paris, France", "Rome, Italy", "Barcelona, Spain"],
    "checkIn": "45 days",
    "nights": 3,
    "adults": 2,
    "sites": ["airbnb", "booking", "vrbo", "google_hotels"],
    "maxResultsPerSite": 50,
    "currency": "EUR"
}
```

Cost scales with places: 3 places × 4 sites × 50 results ≈ 600 results ≈ $3.00. For 5+ places, raise the run timeout.

### Use cases

#### 🏷️ Hotel price tracker

Schedule the Actor daily for the same place and dates. Track `pricePerNight`, `priceTotalWithTaxes` and `discountPercent` per property over time, and read `otherSitePrices` to see which booking site is cheapest for each hotel. Use a webhook or the Apify integrations (Google Sheets, Slack, Make, Zapier) to alert on drops.

#### 📊 Short-term rental (STR) data and an AirDNA alternative

Pull Airbnb and Vrbo listings for a market with nightly rate, total price, bedrooms, beds, bathrooms, rating, review count, Superhost / Guest favorite badges and coordinates. Run it for several date windows to model seasonality and compare supply per neighbourhood, at $5 per 1,000 listings instead of a monthly subscription.

#### ⚖️ Rate parity and rate shopping

`sites: ["google_hotels"]` returns each hotel's price on Booking.com, Expedia, Hotels.com, the hotel's own site and more (`otherSitePrices`, `cheapestSite`). Revenue managers use it to spot parity breaks and undercutting OTAs.

#### 🧳 Travel apps, agencies and AI travel assistants

One normalised schema across 9 sites means one parser, one database table and one prompt. Every row has the same `rating` scale (0–10), `currency` and field names, whichever site it came from.

#### 🎟️ Things to do

`includeThingsToDo: true` adds TripAdvisor tours and attractions and Airbnb Experiences with rating, review count, price from, duration and photos.

### Use it from AI agents (MCP)

Any MCP client (Claude, ChatGPT, Cursor, OpenAI Agents SDK, LangChain) can call this Actor as a tool through the Apify MCP server:

```json
{
  "mcpServers": {
    "hotel-rental-scraper": {
      "url": "https://mcp.apify.com?tools=openclawai/hotel-rental-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Then ask your agent things like *"Find 2-bedroom apartments in Lisbon for 12–15 March under €200 a night across Airbnb, Booking.com and Vrbo, sorted by rating"*. The agent fills the input (`location`, `checkIn`, `nights`, `adults`, `sites`) and gets structured rows back.

### Call it from your code (API)

**cURL** (runs the Actor and returns the results in one request):

```bash
curl -X POST "https://api.apify.com/v2/acts/openclawai~hotel-rental-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location": "Lisbon, Portugal", "checkIn": "30 days", "nights": 3, "adults": 2, "sites": ["airbnb", "booking", "vrbo"], "maxResultsPerSite": 50}'
```

**Python**:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("openclawai/hotel-rental-scraper").call(run_input={
    "location": "Paris, France",
    "checkIn": "2026-12-20",
    "nights": 4,
    "adults": 2,
    "currency": "EUR",
    "sites": ["booking", "airbnb", "expedia", "google_hotels"],
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["site"], row["name"], row.get("pricePerNight"), row.get("rating"))
```

**JavaScript**:

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('openclawai/hotel-rental-scraper').call({
    location: 'Tokyo, Japan', checkIn: '30 days', nights: 3, adults: 2, currency: 'JPY',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((r) => r.type === 'stay').length, 'stays');
```

### Input

```json
{
    "location": "Lisbon, Portugal",
    "checkIn": "30 days",
    "nights": 2,
    "adults": 2,
    "sites": ["airbnb", "booking", "google_hotels", "expedia", "hotels_com", "vrbo", "agoda", "hostelworld", "tripadvisor"],
    "maxResultsPerSite": 50,
    "includeThingsToDo": false,
    "currency": "USD"
}
```

| Field | What it does |
|---|---|
| `location` | City, region or area. "City, Country" matches best on every site. |
| `locations` | Optional list of up to 10 places searched in the same run (merged, de-duplicated, each row tagged with `searchLocation`). |
| `checkIn` | A date (`2026-12-20`) or a relative date (`30 days`, `2 weeks`). |
| `nights` | Length of stay, 1–30. |
| `adults` | Guests, 1–16. |
| `minPricePerNight` / `maxPricePerNight` | Optional nightly price range in your currency. Sites with their own price filter apply it at the source, so you still get full results; every row is double-checked and out-of-range rows are never charged. |
| `sites` | Any of the 9 sites. All selected sites run at the same time. |
| `maxResultsPerSite` | Cap per site, 1–1,000. |
| `includeThingsToDo` | Adds Tripadvisor tours/attractions and Airbnb experiences. |
| `currency` | Currency for every price in the run. Sites that quote another currency are converted at the ECB daily rate (`originalCurrency` and `exchangeRate` are kept on those rows). |

### Output

One row per property or experience, same columns for every site. Up to **88 fields**, including:

| Group | Fields |
|---|---|
| **Price** | `pricePerNight`, `priceTotal`, **`priceTotalWithTaxes`** (all-in, compare across sites), `taxesAndFees`, `priceIncludesTaxes`, `priceTotalBeforeDiscount`, `discountPercent`, `discounts`, `priceBreakdown` (Airbnb: nights × rate, cleaning, service, taxes), `priceNote` ("recently lowered the price"), `dormPricePerNight` / `privateRoomPricePerNight` (hostels) |
| **Price comparison** | `otherSitePrices` (every booking site's price for the hotel), `cheapestSite`, `cheapestSitePrice` |
| **Booking terms** | `freeCancellation`, `freeCancellationUntil`, `payLater`, `noPrepayment`, `mealPlan`, `breakfastIncluded`, `availability` ("Only 1 left"), `soldOut` |
| **Ratings** | `rating` (0–10 on every site), `ratingOriginal`, `ratingText` ("Exceptional"), `reviewsCount`, **`ratingBreakdown`** (cleanliness, location, staff, value, comfort, facilities…), `ratingHistogram`, `recommendPercent`, `reviewHighlight` (a real guest quote) |
| **The place** | `propertyType`, `unitType`, `roomName`, `size` / `roomSizeSqm`, `bedrooms`, `beds`, `bedTypes`, `bathrooms`, `kitchens`, `stars`, `amenities`, `description`, `badges` (Guest favorite, Superhost, VIP Access, Member Price, Sustainable…), `highlights`, `popularity` ("Booked 25 times today") |
| **Location** | `address`, `area`, `city`, `country`, `latitude`, `longitude`, `distanceFromCenter`, `nearestTransport`, `beachDistance`, `nearby` (landmarks & transit with distance), `goodFor` |
| **Media & links** | `photos` (up to 30 full-size), `url` (opens with your dates and guests) |
| **Search** | `site`, `type`, `id`, `checkIn`, `checkOut`, `nights`, `adults`, `searchLocation`, `scrapedAt` |

Stay row example (Booking.com):

```json
{
    "site": "booking",
    "type": "stay",
    "id": "5180028",
    "name": "Tandem Palacio Alfama Apartments",
    "url": "https://www.booking.com/hotel/pt/tandem-palacio-alfama.html?checkin=2026-10-30&checkout=2026-11-01&group_adults=2&no_rooms=1",
    "propertyType": "Apartment",
    "unitType": "Entire apartment",
    "roomName": "One-Bedroom Apartment",
    "size": "62 m²",
    "address": "Rua dos Remédios, 139",
    "area": "Santa Maria Maior, Lisbon",
    "distanceFromCenter": "1.1 km from downtown",
    "nearestTransport": "Santa Apolónia station is within 400 meters",
    "latitude": 38.712514,
    "longitude": -9.126405,
    "rating": 8.6,
    "ratingOriginal": "8.6/10",
    "ratingText": "Excellent",
    "ratingBreakdown": {"location": 9.3},
    "reviewsCount": 1167,
    "stars": 4,
    "pricePerNight": 173.62,
    "priceTotal": 347.23,
    "taxesAndFees": 18.14,
    "priceIncludesTaxes": false,
    "priceTotalWithTaxes": 365.37,
    "priceTotalBeforeDiscount": 588.52,
    "discountPercent": 41,
    "discounts": ["Limited-time Deal"],
    "currency": "USD",
    "freeCancellation": false,
    "bedrooms": 1,
    "bathrooms": 1,
    "beds": 2,
    "badges": ["Limited-time Deal", "Sustainable property"],
    "photos": ["https://cf.bstatic.com/xdata/images/hotel/max1280x900/203108559.webp?..."],
    "checkIn": "2026-10-30",
    "checkOut": "2026-11-01",
    "nights": 2,
    "adults": 2
}
```

Agoda rows carry the most detail per hotel:

```json
"ratingBreakdown": {"cleanliness": 8.7, "facilities": 8.2, "location": 9.3, "roomComfort": 7.9, "staffPerformance": 8.8, "valueForMoney": 8.3},
"recommendPercent": 84,
"reviewHighlight": {"text": "Has a lovely rooftop bar with amazing views of Lisbon.", "rating": 10, "traveller": "Family with young children", "country": "United Kingdom"},
"freeCancellationUntil": "2026-10-28",
"payLater": true,
"roomSizeSqm": 42,
"popularity": "Booked 4 times today",
"nearby": [{"name": "Martim Moniz Metro Station", "type": "transportation", "distanceMeters": 111}, {"name": "Castelo de S. Jorge", "type": "topLandmark", "distanceMeters": 481}]
```

Google Hotels rows add `otherSitePrices`:

```json
"otherSitePrices": [
    {"site": "Hotels.com", "pricePerNight": 258, "currency": "USD", "room": "Standard Room", "url": "https://www.google.com/aclk?..."},
    {"site": "Expedia.com", "pricePerNight": 258, "currency": "USD", "room": "Standard Room", "url": "https://www.google.com/aclk?..."}
]
```

Things-to-do rows (`type: "experience"`):

```json
{
    "site": "tripadvisor",
    "type": "experience",
    "id": "19008560",
    "name": "Sintra to Cascais: 2 Palaces, 7 Sites, Small Group 10 Hour Tour",
    "category": "Tour / activity",
    "rating": 9.8,
    "ratingOriginal": "4.9/5",
    "reviewsCount": 3491,
    "priceFrom": 87,
    "priceBeforeDiscount": 116,
    "currency": "USD",
    "photos": ["https://dynamic-media-cdn.tripadvisor.com/media/photo-o/33/de/fa/0d/caption.jpg?w=1200&h=-1&s=1"]
}
```

Field coverage depends on what each site shows in its search results. Agoda, Booking.com, Airbnb and Vrbo/Expedia fill the most columns; Tripadvisor hotel rows carry rating, reviews, address, phone and price range (Tripadvisor shows no nightly price without a date session); Airbnb experiences carry rating, reviews, duration and coordinates. Photos: Airbnb and Vrbo/Expedia ~20–30 per listing, Agoda and Google ~10, Hostelworld 4, Booking.com 1–2.

### Pricing

**$5 per 1,000 results** (`result` event, $0.005 each), whichever site they come from. Hint rows are free. You never pay for a site that returned nothing. Set a maximum cost per run in the run options and the Actor stops at that budget.

Examples: 9 sites × 20 results = 180 results ≈ **$0.90**. 3 sites × 200 results = 600 results ≈ **$3.00**.

### Tips

- Use **"City, Country"** for the most exact match everywhere ("Paris, France", not "Paris").
- Prices only exist for dates, so every search uses dates. The default is 30 days from today for 2 nights.
- Want more than a site shows per search? Run a few neighbouring areas ("Lisbon Alfama", "Lisbon Belém") and combine.
- Tripadvisor is the slowest site (up to a minute). Leave it out for the fastest runs.
- A free `type: "hint"` row tells you when a site had no match for your location (try "City, Country") or couldn't finish in time.
- Each run also saves a `SUMMARY` record in its key-value store: results, seconds and price/photo/rating coverage per site. Handy for monitoring scheduled runs.

### FAQ

**Is there an official Airbnb API?** Not for the public. Airbnb's API is limited to approved software partners. This Actor returns Airbnb listings, nightly and total prices (with fees and taxes), photos, ratings and badges for any place and dates, without a partner account.

**Is there a Booking.com API for hotel prices?** Booking.com's Demand/Affiliate API is only for approved partners. This Actor returns Booking.com hotels and apartments with the price for your dates, taxes and fees, discounts, free-cancellation date, room name and rating, with no key.

**How do I get Vrbo listings data?** Vrbo has no public API. Add `"vrbo"` to `sites` and you get Vrbo vacation rentals with price for your dates, bedrooms, beds, photos, rating and link.

**Is there an Expedia or Hotels.com API?** Expedia's Rapid API is for vetted partners. This Actor returns Expedia and Hotels.com hotels with nightly and all-in total price, badges, amenities and rating.

**What's a good AirDNA alternative for short-term rental data?** Run this Actor on Airbnb and Vrbo for your market and dates. You get raw listing-level data (rates, bedrooms, ratings, reviews, coordinates) at $5 per 1,000 listings, which you can aggregate yourself, with no subscription.

**Is there a TripAdvisor API for hotels and things to do?** TripAdvisor's Content API returns at most 5 reviews and 5 photos per location. This Actor returns TripAdvisor hotels plus tours and attractions with rating, review count, price from and photos.

**Can I build a hotel price tracker with it?** Yes. Schedule a daily run for your place and dates and compare `pricePerNight`, `priceTotalWithTaxes` and `otherSitePrices` between runs. Each run also writes a `SUMMARY` record for monitoring.

**Can AI agents use it?** Yes, through the Apify MCP server (see "Use it from AI agents" above) or any agent framework that can call an HTTP API.

**Do I need an account, cookies or API keys for the travel sites?** No. Everything comes from the sites' public search results, as any visitor sees them. You only need an Apify account.

**Which currency?** Choose one in `currency` and every price comes back in it. Expedia, Hotels.com, Vrbo and TripAdvisor tours only quote USD, so those rows are converted at the European Central Bank daily rate and carry `originalCurrency` and `exchangeRate`.

**Can I filter by price?** Yes. Set `minPricePerNight` and/or `maxPricePerNight` in your chosen currency. Booking.com, Airbnb and Google Hotels filter at the source; every other site is checked row by row, and nothing outside the range is returned or charged. Tripadvisor hotel lists show no nightly price, so they're skipped when a price filter is set.

**Can I search several cities at once?** Yes. Put up to 10 places in `locations`. Every site runs for every place, duplicates across places are removed (and not charged), and `searchLocation` tags each row.

**How many results per site?** Up to `maxResultsPerSite`. Typical ceilings for one search: Booking.com ~1,000, Agoda and Expedia/Hotels.com/Vrbo several hundred, Airbnb ~280, Google Hotels ~150, TripAdvisor hotels ~300, things to do ~150.

**Is it legal?** It collects publicly available listing information that anyone can see without logging in, and no personal data about guests. You're responsible for how you use the data; check the terms and the laws that apply to you.

# Actor input Schema

## `location` (type: `string`):

City, region or area to search, e.g. 'Lisbon, Portugal', 'Tokyo', 'Tulum, Mexico'. 'City, Country' gives the most exact match on every site. Use Multiple locations below to search several places in one run.

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

Search several places in one run, e.g. \['Paris, France', 'Rome, Italy', 'Barcelona, Spain']. Results from every location are merged and de-duplicated; each row's searchLocation shows which place it came from. ⚠️ Cost scales with locations: 3 locations ≈ 3× the results. Max 10. Leave empty to use the single Location above.

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

Check-in date (YYYY-MM-DD) or a relative date like '30 days' or '2 weeks' from today. Prices are for these exact dates.

## `nights` (type: `integer`):

Length of stay. Check-out = check-in + nights.

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

Number of adult guests.

## `minPricePerNight` (type: `integer`):

Optional. Only return stays costing at least this much per night, in the selected currency.

## `maxPricePerNight` (type: `integer`):

Optional. Only return stays costing at most this much per night, in the selected currency. Sites that support it filter at the source, so you still get full results; everything is double-checked and out-of-range rows are never charged.

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

Which sites to search. All run at the same time. Airbnb, Booking.com, Vrbo, Agoda and Hostelworld return in seconds; Tripadvisor takes up to a minute.

## `maxResultsPerSite` (type: `integer`):

Upper limit per site (and per things-to-do source). Total results ≈ this × number of sites. Typical ceilings per search: Booking.com ~1,000, Agoda and Expedia/Hotels.com/Vrbo several hundred, Airbnb ~280, Google Hotels ~150, Tripadvisor ~300.

## `includeThingsToDo` (type: `boolean`):

Also return tours, attractions and experiences for the location (Tripadvisor and Airbnb, when those sites are selected). Charged like any other result.

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

Currency for every price in the run. Sites that only quote USD are converted at the European Central Bank daily rate; those rows keep originalCurrency and exchangeRate.

## Actor input object example

```json
{
  "location": "Lisbon, Portugal",
  "checkIn": "30 days",
  "nights": 2,
  "adults": 2,
  "sites": [
    "airbnb",
    "booking",
    "google_hotels",
    "expedia",
    "hotels_com",
    "vrbo",
    "agoda",
    "hostelworld",
    "tripadvisor"
  ],
  "maxResultsPerSite": 20,
  "includeThingsToDo": false,
  "currency": "USD"
}
```

# Actor output Schema

## `results` (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 = {
    "location": "Lisbon, Portugal",
    "checkIn": "30 days",
    "nights": 2,
    "adults": 2,
    "sites": [
        "airbnb",
        "booking",
        "google_hotels",
        "expedia",
        "hotels_com",
        "vrbo",
        "agoda",
        "hostelworld",
        "tripadvisor"
    ],
    "maxResultsPerSite": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("openclawai/hotel-rental-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 = {
    "location": "Lisbon, Portugal",
    "checkIn": "30 days",
    "nights": 2,
    "adults": 2,
    "sites": [
        "airbnb",
        "booking",
        "google_hotels",
        "expedia",
        "hotels_com",
        "vrbo",
        "agoda",
        "hostelworld",
        "tripadvisor",
    ],
    "maxResultsPerSite": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("openclawai/hotel-rental-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 '{
  "location": "Lisbon, Portugal",
  "checkIn": "30 days",
  "nights": 2,
  "adults": 2,
  "sites": [
    "airbnb",
    "booking",
    "google_hotels",
    "expedia",
    "hotels_com",
    "vrbo",
    "agoda",
    "hostelworld",
    "tripadvisor"
  ],
  "maxResultsPerSite": 20
}' |
apify call openclawai/hotel-rental-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openclawai/hotel-rental-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/dfUV9xcvhTnzib5Ty/builds/Q3wI9JeVD8yCVDwwN/openapi.json
