# Airbnb Scraper - Listings, Prices & Reviews (`logiover/airbnb-scraper`) Actor

Unofficial Airbnb API & scraper: get listings at scale — price, rating, reviews, room type, amenities, coordinates & images. No login, no API key. Hundreds per search.

- **URL**: https://apify.com/logiover/airbnb-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Travel, Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 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

<div align="center">

## 🏠 Airbnb Scraper - Listings, Prices & Reviews

#### Scrape Airbnb listings at scale — title, price, rating, reviews, location, room type, amenities, coordinates & images. No login.

<br>

![No login](https://img.shields.io/badge/✓_No_login-no_cookies-2ea44f?style=for-the-badge)
![No API key](https://img.shields.io/badge/✓_No_API_key-needed-2ea44f?style=for-the-badge)
![High volume](https://img.shields.io/badge/📦_Hundreds-per_search-1f6feb?style=for-the-badge)
![Export](https://img.shields.io/badge/Export-JSON·CSV·Excel·API-f59e0b?style=for-the-badge)
![Account safe](https://img.shields.io/badge/0%25-ban_risk-9333ea?style=for-the-badge)

<br>

**Point it at any city, region or Airbnb search URL and pull every public listing with full detail — nightly price, total price, rating, review count, GPS coordinates, room layout, photos and more.**
The fast, no-API-key way to build large Airbnb datasets for market research, pricing and analytics.

</div>

---

### 📌 Overview

The **Airbnb Scraper** collects short-term-rental listings from any list of
**locations or Airbnb search URLs** and returns each listing with rich,
analysis-ready metadata: **title, price, rating, review count, exact
coordinates, room type, bed/bath layout, badges (e.g. Guest favorite), payment
messages and all listing photos**. It paginates each search to pull **hundreds
of listings per location** and de-duplicates across pages.

It needs **no login, no cookies and no API key** — it reads only public search
data through residential proxies, so there's **zero risk to any Airbnb account**.
With **no headless browser**, it's a **fast and low-cost** way to assemble large
rental datasets.

> ✅ Add many locations (or paste filtered search URLs) and raise `maxResults` to
> build a **market-wide Airbnb dataset** in a single run.

---

### ✨ Features

| | Feature | Description |
|---|---|---|
| 📦 | **Hundreds per search** | Cursor pagination walks the full public result set per location. |
| 💲 | **Full pricing** | Nightly or total-for-stay price, currency and qualifier. |
| ⭐ | **Ratings & reviews** | Average rating and review count per listing. |
| 📍 | **GPS coordinates** | Exact latitude / longitude for mapping & geo-analysis. |
| 🛏️ | **Room layout** | Room type, bedrooms, beds and bathrooms. |
| 🖼️ | **All photos** | Every listing image URL, plus a thumbnail. |
| 🏅 | **Badges & signals** | Guest favorite, free cancellation, "Pay $0 today" and more. |
| 👤 | **Host details** | Optional: host name, Superhost status, profile link, years hosting, rating & highlights. |
| 🧰 | **Full amenities** | Optional: complete grouped amenities list (available **and** unavailable). |
| 📝 | **Rich detail** | Optional: full description, house rules, cancellation policy and per-category rating breakdown. |
| 🗓️ | **Date & guest filters** | Check-in / check-out, guests, price, bedrooms, room type. |
| ⚡ | **No browser** | Lightweight HTTP access — fast and cheap at scale. |
| 🛡️ | **Login-free & safe** | Public data over residential proxies — no account, no ban risk. |
| 📤 | **Any format** | Export to JSON, CSV, Excel, HTML or pull via API & webhooks. |

---

### 🎯 Who it's for

- **Real-estate & STR investors** — analyse supply, pricing and occupancy signals in a market.
- **Revenue managers & hosts** — benchmark comparable listings and tune nightly rates.
- **Travel & proptech products** — power search, maps and price-comparison features.
- **Data science & ML** — build geo-tagged rental datasets for modelling and trends.
- **Market researchers** — measure inventory and amenity mix across cities.

---

### 🧾 Input

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | A place to search, e.g. `Paris, France`. |
| `locations` | array | Search several places in one run. |
| `searchUrls` | array | Paste full Airbnb search URLs (any filters/map area applied). |
| `checkIn` / `checkOut` | string | Optional stay dates (`YYYY-MM-DD`). Prices become total-for-stay. |
| `adults` / `children` / `infants` / `pets` | integer | Guest counts. |
| `minPrice` / `maxPrice` | integer | Nightly price range filter. |
| `minBedrooms` / `minBeds` / `minBathrooms` | integer | Layout filters. |
| `roomTypes` | array | Entire home/apt · Private room · Shared room · Hotel room. |
| `currency` | string | Price currency (ISO code). Default `USD`. |
| `maxResults` | integer | Global cap on listings saved. Default `200`. |
| `includeDetails` | boolean | Visit each listing's room page to add **host, full amenities, description, house rules, per-category rating breakdown and highlights**. Adds **1 request per listing**. Default `false`. |
| `detailConcurrency` | integer | Parallel detail-page fetches when `includeDetails` is on (1–10). Default `5`. |
| `proxyConfiguration` | object | Residential proxy (required). Pre-configured for you. |

#### Example input

```json
{
  "location": "Paris, France",
  "checkIn": "2026-08-01",
  "checkOut": "2026-08-05",
  "adults": 2,
  "currency": "EUR",
  "maxResults": 300
}
````

***

### 📦 Output

Each listing is saved as one structured record:

```json
{
  "id": "49770156",
  "url": "https://www.airbnb.com/rooms/49770156",
  "name": "Bright apartment with Eiffel Tower view",
  "title": "Apartment in 15th Arrondissement",
  "subtitle": "Bright apartment with Eiffel Tower view",
  "roomType": "Apartment in 15th Arrondissement",
  "rating": 5.0,
  "reviewsCount": 13,
  "ratingLabel": "5.0 (13)",
  "price": 1406,
  "priceLabel": "$1,406",
  "priceQualifier": "for 5 nights",
  "currency": "$",
  "coordinates": { "latitude": 48.8532, "longitude": 2.29504 },
  "roomInfo": { "bedrooms": "1 bedroom", "beds": "1 bed", "bathrooms": "1 bath" },
  "badges": ["Guest favorite"],
  "isGuestFavorite": true,
  "paymentMessages": ["Pay $0 today", "Free cancellation"],
  "images": [
    "https://a0.muscache.com/im/pictures/hosting/.../original/....jpeg"
  ],
  "thumbnail": "https://a0.muscache.com/im/pictures/hosting/.../original/....jpeg",
  "searchLocation": "Paris, France",
  "scrapedAt": "2026-06-04T12:00:00.000Z"
}
```

#### 📖 Output field reference

| Field | Description |
|-------|-------------|
| `id` / `url` | Listing ID and direct `airbnb.com/rooms/...` link |
| `name` / `title` / `subtitle` | Listing name, headline (room type + area) and tagline |
| `roomType` | Property/room type as shown in search |
| `rating` / `reviewsCount` / `ratingLabel` | Average rating, number of reviews and raw label |
| `price` / `priceLabel` / `priceQualifier` / `currency` | Numeric price, display string, qualifier and currency |
| `coordinates` | Latitude / longitude for mapping |
| `roomInfo` | Bedrooms, beds and bathrooms |
| `badges` / `isGuestFavorite` | Listing badges and the Guest-favorite flag |
| `paymentMessages` | e.g. "Free cancellation", "Pay $0 today" |
| `images` / `thumbnail` | All photo URLs and a thumbnail |
| `searchLocation` / `searchUrl` / `scrapedAt` | Provenance and timestamp |

##### 🔎 Extra fields when `includeDetails` is enabled

Setting `includeDetails: true` visits each listing's room page (**1 extra request per
listing**) and merges these fields into the record:

| Field | Description |
|-------|-------------|
| `host` | `{ name, id, url, isSuperhost, isVerified, profilePictureUrl, ratingAverage, ratingCount, yearsHosting, monthsHosting, highlights[], about }` |
| `amenities` | Full list of available amenities (e.g. Wifi, Kitchen, Washer) |
| `amenitiesUnavailable` | Amenities the place explicitly does **not** offer |
| `amenityGroups` | Amenities grouped by category with `available` flag and subtitles |
| `description` | Full listing description (plain text) |
| `propertyType` | e.g. "Entire rental unit in Paris, France" |
| `capacity` | e.g. `["2 guests", "1 bedroom", "1 bed", "1 bath"]` |
| `summaryTitle` | Compact summary line, e.g. "Rental unit in Paris · ★5.0 · 1 bedroom · 1 bed · 1 shared bath" |
| `ratingBreakdown` | Per-category ratings: `cleanliness`, `accuracy`, `checkin`, `communication`, `location`, `value` |
| `houseRules` / `houseRulesDetailed` | Quick rules and the grouped house-rules sections |
| `cancellationPolicy` | Cancellation policy name (e.g. "Flexible") |
| `highlights` | Listing highlights (headline + body) |
| `locationSubtitle` | Neighbourhood / area subtitle |

> ⚠️ `includeDetails` adds **one request per listing**, so runs are slower and use
> a little more compute. Leave it off (default) for fast, low-cost search-only scraping.

```json
{
  "host": {
    "name": "Marguerite",
    "id": "45878911",
    "url": "https://www.airbnb.com/users/show/45878911",
    "isSuperhost": true,
    "ratingAverage": 4.81,
    "ratingCount": 97,
    "yearsHosting": 10,
    "highlights": ["Speaks English, French, and Spanish"]
  },
  "amenities": ["Kitchen", "Wifi", "Washer", "Hair dryer", "Refrigerator"],
  "amenitiesUnavailable": ["TV", "Dryer", "Air conditioning"],
  "ratingBreakdown": { "cleanliness": 4.8, "accuracy": 5.0, "checkin": 5.0, "communication": 5.0, "location": 5.0, "value": 4.9 },
  "houseRules": ["Flexible check-in", "Checkout before 12:00 PM", "2 guests maximum"],
  "cancellationPolicy": "Flexible"
}
```

***

### ⚙️ How it works

1. You provide one or more **locations** or **Airbnb search URLs** (with any filters).
2. The actor loads each public search page over a residential proxy and reads the embedded listing data.
3. It paginates the result set, parsing each listing into a clean, geo-tagged record.
4. Results are de-duplicated and streamed to your dataset.

No login, no cookies, no API keys — and **no Airbnb account is ever used or risked**.

***

### ❓ FAQ

#### Is there an Airbnb API, and do I need a key?

Airbnb has no public listings API for scraping prices and reviews. This actor is a no-API-key Airbnb alternative — it reads public search pages, so you get listing data with **no Airbnb developer key, no login and no cookies**.

#### Does this Airbnb scraper need a login?

No. It collects only public listing data over residential proxies, so no Airbnb account is ever used or put at risk.

#### How many Airbnb listings can I scrape per search?

Hundreds per location — it paginates the full public result set. Add multiple locations or paste filtered search URLs to scale into the thousands of listings.

#### Are GPS coordinates included?

Yes — every listing includes exact latitude and longitude, ideal for maps, heatmaps and geo-analysis.

#### Can I export Airbnb data to CSV or Excel?

Yes — results stream to a dataset you can download as **CSV, JSON, Excel or HTML**, or pull live via the Apify API and webhooks.

#### Can I use my own filtered Airbnb search URL?

Yes — paste any Airbnb search URL into `searchUrls` (dates, guests, price, map area, room type) and the actor paginates it as-is.

#### Do I get total price or nightly price?

Set `checkIn` and `checkOut` to get the total-for-stay price; leave them empty for the nightly display price.

#### Is this an unofficial Airbnb API / Airbnb API alternative?

Yes — think of it as an unofficial Airbnb API. Airbnb has no public data API, so this actor is the practical Airbnb API alternative: call it over HTTP, pass a location or search URL, and get structured JSON back — no scraper code to maintain.

#### How do I export an Airbnb dataset (CSV / JSON / Excel)?

Every run builds a clean Airbnb dataset you can download as CSV, JSON, Excel or HTML, or pull straight into your warehouse via the Apify API. Ideal for an Airbnb price dataset, market research or short-term-rental analytics.

#### Can I get Airbnb rental price data for a whole city or market?

Yes — point it at a city, neighborhood or filtered map area and it returns every public listing's price, availability and reviews, so you can build city-level Airbnb rental data and track price trends over time.

***

### 🔗 Works great with

- 🏨 **Booking.com Hotels & Prices Scraper** — compare hotel and rental pricing side by side.
- 🗺️ **Google Maps / Places datasets** — enrich listing coordinates with nearby POIs.

***

<div align="center">

**Airbnb Scraper · Airbnb API alternative · Unofficial Airbnb API · Airbnb Listings Scraper · Airbnb Price Scraper · Airbnb Data Export · Airbnb Dataset (CSV/JSON) · Airbnb Reviews & Ratings · Vacation Rental Data · Short-Term Rental Scraper · No-API-key Airbnb data**

<sub>⚖️ Collects publicly available listing data only. You are responsible for compliance with Airbnb's Terms and applicable laws, including bulk-access limits.</sub>

</div>

### 📝 Changelog

#### 2026-06-07

- 📚 Docs: added coverage for **Airbnb API alternative**, **Airbnb data export / dataset** and **city-level rental price data** use cases.

#### 2026-06-05

- 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- ⚡ Stability & performance hardening; fresh rebuild.

#### 2026-06-04

- Added optional **`includeDetails`** mode — enriches each listing from its room page with **host (name, Superhost, profile, stats), full amenities list (available + unavailable), description, house rules, cancellation policy, per-category rating breakdown, highlights and coordinates**. Adds 1 request per listing; search-only behaviour unchanged when off.
- Initial release — search by location or URL, full listing fields, cursor pagination.

# Actor input Schema

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

A place to search, e.g. 'Paris, France', 'New York', 'Rome--Italy'. Leave empty if you use Locations or Search URLs.

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

Search several places in one run. Each becomes its own paginated search.

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

Paste full Airbnb search URLs (any filters/map area already applied). Overrides the location filters below.

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

Optional check-in date (YYYY-MM-DD). Prices become total-for-stay when set.

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

Optional check-out date (YYYY-MM-DD).

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

Number of adult guests.

## `children` (type: `integer`):

Number of children.

## `infants` (type: `integer`):

Number of infants.

## `pets` (type: `integer`):

Number of pets.

## `minPrice` (type: `integer`):

Minimum nightly price filter.

## `maxPrice` (type: `integer`):

Maximum nightly price filter.

## `minBedrooms` (type: `integer`):

Minimum number of bedrooms.

## `minBeds` (type: `integer`):

Minimum number of beds.

## `minBathrooms` (type: `integer`):

Minimum number of bathrooms.

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

Filter by room type.

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

Currency for prices (ISO code).

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

Max listings to collect across all searches. Each search paginates ~270 listings.

## `includeDetails` (type: `boolean`):

Visit each listing's room page to add host (name, superhost, profile), full amenities list, description, house rules, per-category rating breakdown, coordinates and highlights. Adds 1 request per listing, so runs are slower and a bit more expensive. Leave off for fast search-only scraping.

## `detailConcurrency` (type: `integer`):

How many listing detail pages to fetch in parallel when 'Include listing details' is on.

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

Airbnb requires residential proxies. Keep the default (Apify Proxy · RESIDENTIAL · US).

## Actor input object example

```json
{
  "location": "Paris, France",
  "locations": [
    "Lisbon, Portugal",
    "Barcelona, Spain"
  ],
  "searchUrls": [
    "https://www.airbnb.com/s/Rome--Italy/homes?adults=2"
  ],
  "checkIn": "2026-08-01",
  "checkOut": "2026-08-05",
  "currency": "EUR",
  "maxResults": 200,
  "includeDetails": false,
  "detailConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `name` (type: `string`):

Listing name

## `roomType` (type: `string`):

Room type

## `price` (type: `string`):

Price

## `rating` (type: `string`):

Rating

## `reviews` (type: `string`):

Review count

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

Search location

## `host` (type: `string`):

Host name (with includeDetails)

## `superhost` (type: `string`):

Superhost flag (with includeDetails)

## `amenities` (type: `string`):

Amenities (with includeDetails)

## `url` (type: `string`):

Listing URL

# 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": "Paris, France",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/airbnb-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": "Paris, France",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/airbnb-scraper").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 '{
  "location": "Paris, France",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call logiover/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Scraper - Listings, Prices & Reviews",
        "description": "Unofficial Airbnb API & scraper: get listings at scale — price, rating, reviews, room type, amenities, coordinates & images. No login, no API key. Hundreds per search.",
        "version": "1.0",
        "x-build-id": "e2iO6euJCYaFs0n8t"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~airbnb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/logiover~airbnb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/logiover~airbnb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "A place to search, e.g. 'Paris, France', 'New York', 'Rome--Italy'. Leave empty if you use Locations or Search URLs."
                    },
                    "locations": {
                        "title": "Locations (multiple)",
                        "type": "array",
                        "description": "Search several places in one run. Each becomes its own paginated search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Paste full Airbnb search URLs (any filters/map area already applied). Overrides the location filters below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkIn": {
                        "title": "Check-in date",
                        "type": "string",
                        "description": "Optional check-in date (YYYY-MM-DD). Prices become total-for-stay when set."
                    },
                    "checkOut": {
                        "title": "Check-out date",
                        "type": "string",
                        "description": "Optional check-out date (YYYY-MM-DD)."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of adult guests."
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of children."
                    },
                    "infants": {
                        "title": "Infants",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of infants."
                    },
                    "pets": {
                        "title": "Pets",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of pets."
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum nightly price filter."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum nightly price filter."
                    },
                    "minBedrooms": {
                        "title": "Min bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bedrooms."
                    },
                    "minBeds": {
                        "title": "Min beds",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of beds."
                    },
                    "minBathrooms": {
                        "title": "Min bathrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bathrooms."
                    },
                    "roomTypes": {
                        "title": "Room types",
                        "type": "array",
                        "description": "Filter by room type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Entire home/apt",
                                "Private room",
                                "Shared room",
                                "Hotel room"
                            ]
                        }
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency for prices (ISO code).",
                        "default": "USD"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Max listings to collect across all searches. Each search paginates ~270 listings.",
                        "default": 200
                    },
                    "includeDetails": {
                        "title": "Include listing details (host + amenities)",
                        "type": "boolean",
                        "description": "Visit each listing's room page to add host (name, superhost, profile), full amenities list, description, house rules, per-category rating breakdown, coordinates and highlights. Adds 1 request per listing, so runs are slower and a bit more expensive. Leave off for fast search-only scraping.",
                        "default": false
                    },
                    "detailConcurrency": {
                        "title": "Detail concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many listing detail pages to fetch in parallel when 'Include listing details' is on.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Airbnb requires residential proxies. Keep the default (Apify Proxy · RESIDENTIAL · US).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
