# Airbnb Scraper: Listings, Prices, Calendar - No Login (`cliqtomedia/airbnb-scraper`) Actor

Get Airbnb listings with total stay prices, discounts, calendars, reviews and area price summaries from a city or link. Track changes over time. No login or API key.

- **URL**: https://apify.com/cliqtomedia/airbnb-scraper.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (community)
- **Categories:** Travel, Real estate
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.89 / 1,000 listings

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

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

## What's an Apify Actor?

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

Enter a city, an Airbnb search link or a room link, and get listings with nightly and total stay prices, discounts, ratings, calendars and reviews from [Airbnb](https://www.airbnb.com). You get a table for CSV, Excel or API use, plus an area price summary. You do not need a login or an API key. A run with 10 listings takes about 35 seconds and costs about $0.03.

![Airbnb Scraper turns a city or link into a table of listings with stay prices, discounts, calendars and reviews](https://api.apify.com/v2/key-value-stores/fKjaZspmrIWm2daou/records/airbnb-stay-hero-20261104.png)

### Table of contents

- [What it does](#what-it-does)
- [How it works](#how-it-works)
- [Quick start](#quick-start)
- [Use cases](#use-cases)
- [Input](#input)
- [Output](#output)
- [Pricing](#pricing)
- [Limits](#limits)
- [API, export and integrations](#api-export-and-integrations)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Support](#support)

### What it does

This Actor has five modes:

- **Search listings:** find listings by city, area, map box or Airbnb search link.
- **Listing details:** get full data for room links you already have.
- **Calendar:** get open days and minimum stay, one row per day. Daily prices are optional.
- **Reviews:** get review text, rating, date and language, one row per review.
- **Track changes:** compare a search with your last run and mark each listing as new, changed, unchanged, missing or removed.

Each run also saves an area summary with average price, median price, average rating and superhost share.

#### Good fit

- You compare stay prices for the same dates in a city or area.
- You check open days and minimum stay for a set of listings.
- You read reviews to learn what guests like or dislike.
- You track new listings and price changes on a schedule.

It is not a good fit if you need host contact details, guest identities or actual booking numbers. The Actor has no contact or profile fields, and Airbnb does not show bookings.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### How it works

1. You enter a location or links and choose your dates. If you set no dates, the Actor uses 3 nights starting 30 days from today.
2. The Actor reads public Airbnb pages. It makes about 1 request per second, and you need no proxy or account.
3. It saves one row per listing, day or review. You can open the rows in the table, export them, or get them by API.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Quick start

[![Input form with Mode, Location and Maximum listings marked](https://api.apify.com/v2/key-value-stores/fKjaZspmrIWm2daou/records/quick-start-form-20261104.png)](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)

1. Open the **Input** tab and keep **Mode** on **Search listings** (box 1).
2. Keep **Pattaya** in **Location**, or type your city (box 2).
3. Keep **Maximum listings** at **10** (box 3).
4. Click **Start**.
5. When the run ends, open the **Output** tab (box 5).

[![Output table with listing prices, currency, rating and review count](https://api.apify.com/v2/key-value-stores/fKjaZspmrIWm2daou/records/output-table-20261104.png)](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)

6. Check `pricePerNight`, `totalPrice`, `currency`, `rating` and `reviewsCount` (box 6).

**Expected result:** about 10 rows in about 35 seconds, for about $0.03.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Use cases

| Buyer job                         | Input path                                           | Output entity                                          | Key fields                                               | Next integration                            |
| --------------------------------- | ---------------------------------------------------- | ------------------------------------------------------ | -------------------------------------------------------- | ------------------------------------------- |
| Compare prices in an area         | `search`, `location`, `checkIn`, `checkOut`          | Listing rows, area summary                             | `pricePerNight`, `totalPrice`, `originalPrice`, `rating` | CSV or Excel for price analysis             |
| Compare one area on several dates | `search`, `location`, `dateRanges`                   | One row per listing and date range, summary per period | `checkIn`, `checkOut`, `totalPrice`                      | Google Sheets through API                   |
| Check open days for a listing     | `calendar`, `listingUrls`, `calendarMonths`          | Day rows                                               | `date`, `available`, `minNights`, `pricePerNight`        | Your pricing sheet                          |
| Learn from guest reviews          | `reviews`, `listingUrls`, `maxReviews`               | Review rows                                            | `text`, `rating`, `createdAt`, `language`                | A text analysis tool                        |
| Track an area over time           | `monitor`, `location`, `snapshotName`, `onlyChanges` | Changed listing rows                                   | `changeStatus`, `pricePerNight`, `fetchedAt`             | Apify Schedule with Slack or Notion summary |

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Input

No field is required by the form. **Search listings** and **Track changes** search Pattaya when you give no location or link. **Listing details**, **Calendar** and **Reviews** stop with `INVALID_INPUT` if you give no links.

#### Input fields

| Field                | Plain name                        | Type          | Required                                                      | Default / prefill       | Allowed values                                                    | Effect                                                                                                                                       | Example                                                       | Recommendation                                        |
| -------------------- | --------------------------------- | ------------- | ------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------- |
| `mode`               | Mode                              | string        | No                                                            | `search`                | `search`, `details`, `calendar`, `reviews`, `monitor`             | Chooses what the run collects                                                                                                                | `search`                                                      | Start with `search`                                   |
| `location`           | Location                          | string        | No                                                            | Prefill `Pattaya`       | City or area                                                      | Searches this place                                                                                                                          | `Pattaya`                                                     | Use a city name                                       |
| `maxItems`           | Maximum listings                  | integer       | No                                                            | `10`                    | 1 or more. Tested up to 1000 fast rows and 240 full rows          | Row limit across all inputs and date ranges, shared evenly between searches. In reviews mode it is also the default review limit per listing | `10`                                                          | Test with 10 first                                    |
| `locationQueries`    | More locations                    | string array  | No                                                            | Empty                   | City or area names                                                | Adds more places to search                                                                                                                   | `["Phuket"]`                                                  | `maxItems` is shared evenly between places            |
| `startUrls`          | Airbnb search or room links       | URL list      | No                                                            | Empty                   | Airbnb links                                                      | Uses the link, its dates and its filters. Country links change to www.airbnb.com                                                             | `[{ "url": "https://www.airbnb.com/s/Pattaya/homes" }]`       | Good when you already set filters on Airbnb           |
| `listingUrls`        | Listing links                     | string array  | For details, calendar and reviews, unless you use `startUrls` | Empty                   | Room links with a numeric ID                                      | Reads these listings                                                                                                                         | `https://www.airbnb.com/rooms/1770178382370231943`            | Use for known listings                                |
| `includeDetails`     | Include full listing details      | boolean       | No                                                            | `true`                  | `true`, `false`                                                   | `true` adds description, amenities, rules and more, but runs slower                                                                          | `false`                                                       | Use `false` for large runs                            |
| `checkIn`            | Check-in date                     | string        | No                                                            | 30 days from today      | `YYYY-MM-DD`                                                      | Start of the stay                                                                                                                            | `2026-12-04`                                                  | Set both dates, or the run stops with `INVALID_INPUT` |
| `checkOut`           | Check-out date                    | string        | No                                                            | 3 nights after check-in | `YYYY-MM-DD`                                                      | End of the stay                                                                                                                              | `2026-12-07`                                                  | Must be later than `checkIn`                          |
| `dateRanges`         | Multiple date ranges              | object array  | No                                                            | Empty                   | `{checkIn, checkOut}`                                             | One listing row per date range. Each range gets an even share of `maxItems`                                                                  | `[{"checkIn":"2026-12-04","checkOut":"2026-12-07"}]`          | Raise `maxItems` to get more rows per range           |
| `adults`             | Adults                            | integer       | No                                                            | `2`                     | 1 or more                                                         | Guests used for the price                                                                                                                    | `2`                                                           | Use your real group size                              |
| `children`           | Children                          | integer       | No                                                            | `0`                     | 0 or more                                                         | Guests used for the price                                                                                                                    | `1`                                                           | Optional                                              |
| `infants`            | Infants                           | integer       | No                                                            | `0`                     | 0 or more                                                         | Guests used for the price                                                                                                                    | `1`                                                           | Optional                                              |
| `pets`               | Pets                              | integer       | No                                                            | `0`                     | 0 or more                                                         | Guests used for the price                                                                                                                    | `1`                                                           | Optional                                              |
| `currency`           | Currency                          | string        | No                                                            | `USD`                   | 48 currency codes                                                 | Currency of prices                                                                                                                           | `EUR`                                                         | Keep one currency per comparison                      |
| `locale`             | Language                          | string        | No                                                            | `en`                    | Airbnb language code                                              | Language of listing text, when Airbnb has it                                                                                                 | `de`                                                          | See [Limits](#limits)                                 |
| `priceMin`           | Minimum nightly price             | number        | No                                                            | Empty                   | 0 or more                                                         | Search filter                                                                                                                                | `50`                                                          | Check the currency                                    |
| `priceMax`           | Maximum nightly price             | number        | No                                                            | Empty                   | 0 or more                                                         | Search filter                                                                                                                                | `200`                                                         | Check the currency                                    |
| `minBeds`            | Minimum beds                      | integer       | No                                                            | Empty                   | 0 or more                                                         | Search filter                                                                                                                                | `2`                                                           | Optional                                              |
| `minBedrooms`        | Minimum bedrooms                  | integer       | No                                                            | Empty                   | 0 or more                                                         | Search filter                                                                                                                                | `1`                                                           | Optional                                              |
| `minBathrooms`       | Minimum bathrooms                 | number        | No                                                            | Empty                   | 0 or more                                                         | Search filter                                                                                                                                | `1`                                                           | Optional                                              |
| `roomTypes`          | Room types                        | string array  | No                                                            | Empty                   | `Entire home/apt`, `Private room`, `Shared room`, `Hotel room`    | Search filter                                                                                                                                | `["Private room"]`                                            | Optional                                              |
| `amenities`          | Amenity IDs                       | integer array | No                                                            | Empty                   | Airbnb amenity IDs                                                | Search filter                                                                                                                                | `[4]`                                                         | Copy IDs from an Airbnb search link                   |
| `instantBook`        | Instant Book only                 | boolean       | No                                                            | Off                     | `true`, `false`                                                   | Search filter                                                                                                                                | `true`                                                        | Optional                                              |
| `superhost`          | Superhosts only                   | boolean       | No                                                            | Off                     | `true`, `false`                                                   | Search filter                                                                                                                                | `true`                                                        | Optional                                              |
| `boundingBox`        | Map area                          | object        | No                                                            | Empty                   | `neLat`, `neLng`, `swLat`, `swLng`                                | Searches inside this box. Set `location` too                                                                                                 | `{"neLat":12.97,"neLng":100.92,"swLat":12.88,"swLng":100.85}` | Use it for one area of a city                         |
| `splitMap`           | Split large map searches          | boolean       | No                                                            | `true`                  | `true`, `false`                                                   | Splits a large area when Airbnb shows only part of it                                                                                        | `true`                                                        | Keep it on                                            |
| `calendarMonths`     | Calendar months                   | integer       | No                                                            | `0`                     | 0 to 12. Calendar mode uses 1 when 0                              | Months of days to read                                                                                                                       | `3`                                                           | See the cost note below                               |
| `calendarStartDate`  | Calendar start                    | string        | No                                                            | Check-in date or today  | `YYYY-MM-DD`                                                      | First calendar day                                                                                                                           | `2026-12-01`                                                  | Optional                                              |
| `calendarEndDate`    | Calendar end                      | string        | No                                                            | Empty                   | `YYYY-MM-DD`, within 12 months                                    | Last calendar day                                                                                                                            | `2027-02-28`                                                  | Optional                                              |
| `includeDailyPrices` | Quote each available date         | boolean       | No                                                            | `false`                 | `true`, `false`                                                   | Gets a price for each day that allows check-in. Slower                                                                                       | `true`                                                        | Use for short periods                                 |
| `maxReviews`         | Reviews per listing               | integer       | No                                                            | `0`                     | 0 or more. Reviews mode uses `maxItems` when 0                    | Review limit per listing                                                                                                                     | `50`                                                          | Keep 0 in search if you do not need reviews           |
| `reviewSort`         | Review order                      | string        | No                                                            | `MOST_RECENT`           | `MOST_RECENT`, `MOST_RELEVANT`, `HIGHEST_RATING`, `LOWEST_RATING` | Order of reviews                                                                                                                             | `MOST_RECENT`                                                 | Keep it with `reviewsSince`                           |
| `reviewsSince`       | Reviews since                     | string        | No                                                            | Empty                   | `YYYY-MM-DD`                                                      | Keeps newer reviews only                                                                                                                     | `2026-01-01`                                                  | Stops early only with most recent order               |
| `snapshotName`       | Snapshot name                     | string        | No                                                            | `default`               | Letters, numbers and dashes, up to 63                             | Name of the saved history                                                                                                                    | `pattaya-weekly`                                              | Use one name per tracked search                       |
| `onlyChanges`        | Return only changes               | boolean       | No                                                            | `false`                 | `true`, `false`                                                   | Saves only rows that changed                                                                                                                 | `true`                                                        | Good for schedules                                    |
| `outputFormat`       | Output format                     | string        | No                                                            | `nested`                | `nested`, `flat`                                                  | Keeps nested objects or flattens them                                                                                                        | `flat`                                                        | Use `flat` for spreadsheets                           |
| `maxResults`         | Maximum results (compatibility)   | integer       | No                                                            | Empty                   | 1 or more                                                         | Other name for `maxItems`. It wins if you set both                                                                                           | `10`                                                          | Use `maxItems`                                        |
| `deliveryConnector`  | Send results to (optional)        | connector     | No                                                            | Empty                   | Your Slack or Notion connector                                    | Sends a short summary                                                                                                                        | See [Send results](#send-results-to-slack-or-notion)          | Optional                                              |
| `deliveryTarget`     | Notion page or channel (optional) | string        | No                                                            | Empty                   | Slack channel ID or Notion page link                              | Place for the summary                                                                                                                        | `C0123456789`                                                 | Optional                                              |

#### Interacting settings

| When                  | Input A                           | Input B          | Effective behavior                                                                                          | Example                                           | Cost/result effect                                                             |
| --------------------- | --------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------ |
| Search speed          | `includeDetails: true`            | `maxItems`       | Reads each listing page, about 2.3 seconds per listing                                                      | 100 listings take about 4 minutes                 | Same price per row, more time                                                  |
| Fast search           | `includeDetails: false`           | `maxItems`       | Skips listing pages                                                                                         | 1000 listings take 3.5 to 4.5 minutes             | Fewer fields, same price per row                                               |
| Many dates or places  | `dateRanges` or `locationQueries` | `maxItems`       | Each search gets an even share. Rows a search does not use move to the next one, not back to an earlier one | 2 ranges and `maxItems: 10` give 5 rows per range | A run can save fewer rows than `maxItems` when a later search has few listings |
| Links with dates      | `startUrls`                       | `checkIn`        | Dates in the link are used for that link                                                                    | A link with December dates                        | Prices follow the link dates                                                   |
| Calendar in a listing | `mode: search` or `details`       | `calendarMonths` | Adds days inside the listing row                                                                            | `calendarMonths: 1`                               | Pays `calendar` per month, no `calendar-day`                                   |
| Calendar rows         | `mode: calendar`                  | `calendarMonths` | Saves one row per day                                                                                       | 12 months give about 362 rows                     | Pays `calendar` and `calendar-day`, about $1.00 per listing for a year         |
| Daily prices          | `includeDailyPrices`              | `calendarMonths` | Asks a price only for days that are open and allow check-in                                                 | 12 of 28 days got a price                         | Pays `daily-price` only for a price received                                   |
| Reviews in search     | `mode: search`                    | `maxReviews`     | Saves reviews as their own rows                                                                             | `maxReviews: 20`                                  | Pays `review-page` and `review`                                                |
| Review date stop      | `reviewsSince`                    | `reviewSort`     | Stops early only with `MOST_RECENT`                                                                         | Other orders read further                         | Other orders can cost more pages                                               |
| Tracking              | `mode: monitor`                   | `onlyChanges`    | Unchanged listings get no row                                                                               | 3 rows and 7 checks                               | Unchanged listing costs `check`, not `result`                                  |

#### Input examples

##### Small search

```json
{ "mode": "search", "location": "Pattaya", "maxItems": 10 }
```

**Expected output:** about 10 listing rows with full details in about 35 seconds.
**Cost note:** about $0.03.

##### Large fast search

```json
{
  "mode": "search",
  "location": "Pattaya",
  "maxItems": 1000,
  "includeDetails": false
}
```

**Expected output:** up to 1000 rows without description, amenities and rules.
**Limit or cost note:** about $2.87. Set the run timeout to 600 seconds. With the default 300 seconds, most tests finished 1000 rows in 3.5 to 4.5 minutes. One run on an early build stopped at 931 rows.

##### Calendar with daily prices

```json
{
  "mode": "calendar",
  "listingUrls": ["https://www.airbnb.com/rooms/1443378340723218199"],
  "calendarMonths": 1,
  "includeDailyPrices": true
}
```

**Expected output:** one row per day. Days that allow check-in also get a price.
**Cost note:** our test had 28 days and 12 prices, took about 35 seconds and cost about $0.11.

##### Reviews

```json
{
  "mode": "reviews",
  "listingUrls": ["https://www.airbnb.com/rooms/1230348487323461725"],
  "maxReviews": 60
}
```

**Expected output:** up to 60 review rows, in 5 to 8 seconds.
**Cost note:** about $0.16 for 60 reviews.

##### Track changes

```json
{
  "mode": "monitor",
  "location": "Pattaya",
  "maxItems": 10,
  "snapshotName": "pattaya-weekly",
  "onlyChanges": true
}
```

**Expected behavior:** the first run marks all rows as `new`. Later runs save only rows that changed.
**Cost note:** first run about $0.03. A later run with 2 changes and 8 unchanged listings cost about $0.017.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Output

The table has three views: **Listings and prices**, **Calendar** and **Reviews**. Use `recordType` to tell the rows apart in API data.

#### Output fields

Listing rows (`recordType: listing`):

| Field                           | Meaning                         | Type    | Can be empty?      | Example / enum                                                                                                                     | Source / notes                                             |
| ------------------------------- | ------------------------------- | ------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| `listingId`                     | Airbnb listing ID               | string  | No                 | `1770178382370231943`                                                                                                              | Room link                                                  |
| `url`                           | Listing link                    | string  | No                 | `https://www.airbnb.com/rooms/...`                                                                                                 | Airbnb                                                     |
| `title`                         | Listing title                   | string  | Rarely             | `Deluxe Room Edge Condo...`                                                                                                        | Airbnb                                                     |
| `roomType`                      | Room type                       | string  | Yes                | `Entire home/apt`                                                                                                                  | Full details only                                          |
| `propertyType`                  | Property type                   | string  | Yes                | `Entire rental unit`                                                                                                               | Airbnb                                                     |
| `personCapacity`                | Guests allowed                  | integer | Yes                | `2`                                                                                                                                | Full details only                                          |
| `bedrooms`, `beds`, `bathrooms` | Room counts                     | number  | Yes                | `1`                                                                                                                                | Filled for about 9 in 10 listings                          |
| `pricePerNight`                 | Price per night for these dates | number  | Yes                | `59.24`                                                                                                                            | Empty when Airbnb gives no price                           |
| `averageTotalPerNight`          | Total divided by nights         | number  | Yes                | `59.24`                                                                                                                            | Calculated                                                 |
| `totalPrice`                    | Stay price shown by Airbnb      | number  | Yes                | `177.73`                                                                                                                           | For the listed dates and guests                            |
| `originalPrice`                 | Price before a discount         | number  | Yes                | `275`                                                                                                                              | Only when Airbnb shows it. In tests, about 1 in 5 listings |
| `priceLabel`                    | Price text from Airbnb          | string  | Yes                | `$178 for 3 nights`                                                                                                                | Airbnb                                                     |
| `priceBreakdown`                | Lines of the price              | array   | Yes                | `[{"label":"3 nights x $59.24","amount":177.73}]`                                                                                  | Can show discounts                                         |
| `priceIncludesTaxes`            | Taxes in the price              | boolean | Often              | `true`                                                                                                                             | Empty when Airbnb does not say                             |
| `fees`                          | Cleaning, service and tax       | object  | Values often empty | `{"cleaning":null,"service":null,"taxes":null}`                                                                                    | Empty in all 341 test listings                             |
| `currency`                      | Currency code                   | string  | No                 | `USD`                                                                                                                              | Your input                                                 |
| `checkIn`, `checkOut`           | Stay dates                      | string  | No                 | `2026-12-04`                                                                                                                       | Your input or the default                                  |
| `rating`                        | Average rating                  | number  | Yes                | `5`                                                                                                                                | Empty with no rating yet                                   |
| `reviewsCount`                  | Number of reviews               | integer | Yes                | `5`                                                                                                                                | Airbnb                                                     |
| `lat`, `lng`                    | Map position                    | number  | Rarely             | `12.9311`                                                                                                                          | Airbnb's public map position                               |
| `hostIsSuperhost`               | Superhost mark                  | boolean | Yes                | `false`                                                                                                                            | Full details only                                          |
| `description`                   | Listing text                    | string  | Yes                | `A stylish condominium...`                                                                                                         | Full details only                                          |
| `photos`                        | Photo links                     | array   | Rarely             | `["https://a0.muscache.com/..."]`                                                                                                  | Airbnb                                                     |
| `amenities`                     | Amenities                       | array   | Yes                | `[{"group":"Bathroom","title":"Hair dryer","available":true}]`                                                                     | Full details only                                          |
| `houseRules`                    | House rules                     | array   | Yes                | `[{"title":"No pets"}]`                                                                                                            | Full details only                                          |
| `categoryRatings`               | Ratings by category             | array   | Yes                | `[{"category":"cleanliness","rating":5}]`                                                                                          | Full details only                                          |
| `ratingDistribution`            | Share per star                  | array   | Yes                | `[{"stars":5,"share":1}]`                                                                                                          | Full details only                                          |
| `cancellationPolicy`            | Cancellation text               | string  | Yes                | `Free cancellation for 24 hours...`                                                                                                | Full details only                                          |
| `calendar`                      | Days inside the listing         | array   | Yes                | See calendar rows                                                                                                                  | With `calendarMonths`                                      |
| `occupancy`                     | Share of closed days            | object  | Yes                | `{"observedDays":28,"unavailableDays":16,"unavailableShare":0.57,"method":"unavailable_calendar_days","isBookingOccupancy":false}` | Closed days, not bookings                                  |
| `reviewSummary`                 | Common review words             | object  | Yes                | `{"collectedCount":44,"topics":[{"term":"clean","mentions":9}]}`                                                                   | With `maxReviews`                                          |
| `available`                     | Open for these dates            | boolean | Yes                | `true`                                                                                                                             | When known                                                 |
| `changeStatus`                  | Change since last run           | string  | Yes                | `new`, `changed`, `unchanged`, `missing_from_search`, `reappeared`, `removed`, `unknown`                                           | Track changes mode                                         |
| `status`                        | Row problem                     | string  | Yes                | `not_found`, `partial`                                                                                                             | A listing that could not be fully read                     |
| `calendarStatus`                | Calendar problem                | string  | Yes                | `partial`                                                                                                                          | Part of the calendar is missing                            |
| `source`                        | Source name                     | string  | No                 | `Airbnb`                                                                                                                           | Fixed                                                      |
| `fetchedAt`                     | Time of reading                 | string  | No                 | `2026-11-04T03:19:56.515Z`                                                                                                         | UTC                                                        |

Calendar rows (`recordType: calendar`):

| Field                                         | Meaning                        | Type    | Can be empty? | Example / enum                                       | Source / notes                                       |
| --------------------------------------------- | ------------------------------ | ------- | ------------- | ---------------------------------------------------- | ---------------------------------------------------- |
| `date`                                        | Calendar day                   | string  | No            | `2026-12-07`                                         | Airbnb                                               |
| `available`, `bookable`                       | Day is open                    | boolean | Rarely        | `true`                                               | Airbnb                                               |
| `availableForCheckIn`, `availableForCheckOut` | Check-in or check-out allowed  | boolean | Rarely        | `true`                                               | Airbnb                                               |
| `minNights`, `maxNights`                      | Stay limits                    | integer | Yes           | `3`                                                  | Airbnb                                               |
| `pricePerNight`, `totalPrice`                 | Price for a stay from this day | number  | Yes           | `87.89`                                              | With `includeDailyPrices`                            |
| `averageTotalPerNight`, `fees`, `priceNights` | More price data                | mixed   | Yes           | `3`                                                  | With a price. `priceNights` is the minimum stay or 1 |
| `priceStatus`                                 | Price result                   | string  | No            | `available`, `unavailable`, `error`, `not_requested` | Only `available` is paid                             |

Review rows (`recordType: review`):

| Field       | Meaning       | Type   | Can be empty? | Example / enum              | Source / notes                      |
| ----------- | ------------- | ------ | ------------- | --------------------------- | ----------------------------------- |
| `reviewId`  | Review ID     | string | No            | `1808350674592173172`       | Airbnb                              |
| `text`      | Review text   | string | Rarely        | `Clean room, great host...` | Contacts are removed from free text |
| `rating`    | Stars         | number | Yes           | `5`                         | Airbnb                              |
| `language`  | Text language | string | Yes           | `en`                        | Airbnb                              |
| `createdAt` | Review date   | string | Yes           | `2026-10-31T01:09:59.000Z`  | Airbnb                              |

#### Output entities and surfaces

| Situation         | Dataset/API/KVS/live view                | Result shape                                                                                                                                                                    | User action                                                   |
| ----------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| Normal item       | Dataset, `RUN_SUMMARY`, `MARKET_SUMMARY` | Rows, `status: succeeded`                                                                                                                                                       | Use the rows                                                  |
| Domain-empty      | Empty dataset, summaries saved           | Run SUCCEEDED, `stopReason: NO_RESULTS`, or `NO_CHANGES` in monitor                                                                                                             | Change the filters, or do nothing for no changes              |
| Partial           | Saved rows, `partial: true`              | Cost limit: SUCCEEDED, `stopReason: CHARGE_LIMIT`. Timeout: SUCCEEDED, `stopReason: DEADLINE`, unfinished inputs in `unprocessedInputs`. A timeout with no saved rows is FAILED | Use saved rows. Raise the limit or timeout                    |
| Technical failure | Summaries, maybe saved rows              | Run FAILED with `stopReason`                                                                                                                                                    | Check [Troubleshooting](#troubleshooting) and run again later |

`MARKET_SUMMARY` has `listingCount`, `quoteCount`, `pricedListingCount`, `averagePricePerNight`, `medianPricePerNight`, `averageRating`, `superhostShare`, `currency`, `partial`, `coverageComplete` and one block per date range in `periods`. It is a summary of the returned rows, not of the whole market.

`RUN_SUMMARY` has `status`, `stopReason`, `mode`, `listingCount`, `savedItems`, `checkedListings`, `searchPages`, `requests`, `calendarDays`, `reviews`, `skippedListings`, `skippedSample`, `dailyPriceErrors`, `partial`, `coverageComplete` and `delivery`. A search stopped by `maxItems` has `coverageComplete: false`. A run stopped by its timeout also has `unprocessedInputCount` and `unprocessedInputs`, up to 25 entries. The first entry can be the input in progress when the run stopped, so rows already saved from it stay in the Dataset and are charged.

#### Output example

Lists are shortened here.

```json
{
  "recordType": "listing",
  "listingId": "1770178382370231943",
  "url": "https://www.airbnb.com/rooms/1770178382370231943",
  "title": "Deluxe Room Edge Condo Pattaya Infinity Pool 31F",
  "roomType": "Entire home/apt",
  "propertyType": "Entire rental unit",
  "personCapacity": 2,
  "bedrooms": 1,
  "beds": 1,
  "bathrooms": 1,
  "pricePerNight": 59.24,
  "averageTotalPerNight": 59.24,
  "totalPrice": 177.73,
  "originalPrice": null,
  "priceLabel": "$178 for 3 nights",
  "priceIncludesTaxes": null,
  "fees": { "cleaning": null, "service": null, "taxes": null },
  "priceBreakdown": [{ "label": "3 nights x $59.24", "amount": 177.73 }],
  "currency": "USD",
  "checkIn": "2026-12-04",
  "checkOut": "2026-12-07",
  "rating": 5,
  "reviewsCount": 5,
  "lat": 12.9311,
  "lng": 100.8823,
  "hostIsSuperhost": false,
  "amenities": [
    {
      "group": "Bathroom",
      "title": "Hair dryer",
      "available": true,
      "description": null
    }
  ],
  "houseRules": [{ "title": "Up to 2 overnight guests", "description": null }],
  "categoryRatings": [{ "category": "cleanliness", "rating": 5 }],
  "cancellationPolicy": "Free cancellation for 24 hours. Cancel before November 27 for a partial refund. Review this host's full policy for details.",
  "calendar": null,
  "occupancy": null,
  "reviewSummary": null,
  "available": true,
  "changeStatus": null,
  "source": "Airbnb",
  "fetchedAt": "2026-11-04T03:19:56.515Z"
}
```

#### Send results to Slack or Notion

Pick your connector in the optional `deliveryConnector` field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in `deliveryTarget`: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.

#### Use case → fields

| Use case         | Fields to read                                                                                      |
| ---------------- | --------------------------------------------------------------------------------------------------- |
| Price comparison | `pricePerNight`, `totalPrice`, `originalPrice`, `priceBreakdown`, `currency`, `checkIn`, `checkOut` |
| Listing quality  | `rating`, `reviewsCount`, `categoryRatings`, `hostIsSuperhost`, `amenities`                         |
| Availability     | `date`, `available`, `availableForCheckIn`, `minNights`, `occupancy.unavailableShare`               |
| Guest opinion    | `text`, `rating`, `createdAt`, `language`, `reviewSummary.topics`                                   |
| Monitoring       | `changeStatus`, `pricePerNight`, `fetchedAt`                                                        |

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Pricing

#### Pricing unit

You pay per event. The main event is one saved listing row (`result`). The developer pays Apify platform usage, so you pay only the events below.

| Event                | When it is charged                                                              | No plan or Free | Gold and above |
| -------------------- | ------------------------------------------------------------------------------- | --------------- | -------------- |
| `result`             | One saved listing row                                                           | $0.0027         | $0.00189       |
| `search-page`        | One search page                                                                 | $0.0016         | $0.00112       |
| `first-listing-page` | First listing link in details, calendar or reviews mode                         | $0.0018         | $0.00126       |
| `listing-page`       | Each more listing link in those modes                                           | $0.0002         | $0.00014       |
| `calendar`           | One calendar month                                                              | $0.0018         | $0.00126       |
| `calendar-day`       | One saved day row in calendar mode                                              | $0.0027         | $0.00189       |
| `daily-price`        | One day that got a price                                                        | $0.0027         | $0.00189       |
| `review-page`        | One page of up to 50 reviews                                                    | $0.0005         | $0.00035       |
| `review`             | One saved review row                                                            | $0.0027         | $0.00189       |
| `check`              | One listing checked with no paid row (unchanged, missing, removed or not found) | $0.0012         | $0.00084       |
| `input-check`        | A run stopped by invalid input                                                  | $0.0016         | $0.00112       |

Bronze saves 10%. Silver saves 20%. Gold, Platinum and Diamond save 30%.

- **Zero results:** a search with no rows pays for the search page it read, about $0.0016.
- **Filter with no match:** same as zero results.
- **Unchanged monitor:** each unchanged listing pays `check` when `onlyChanges` is on.
- **Partial and failed runs:** you pay for the work done before the stop. Pages are charged before the request, so a page that fails can still count.

#### Cost examples

Prices are for no plan or Free, from our test runs.

| Scenario             | Input scope                                          | Expected item/event count                                 | Base charge | Optional charge           | Stop/cap behavior                    |
| -------------------- | ---------------------------------------------------- | --------------------------------------------------------- | ----------- | ------------------------- | ------------------------------------ |
| Small search         | Pattaya, 10 listings, about 35 s                     | 10 `result`, 1 `search-page`                              | $0.0286     | None                      | Stops at `maxItems`                  |
| Medium search        | Bangkok, 100 full listings, about 4 min              | 100 `result`, 7 `search-page`                             | $0.2812     | None                      | Stops at `maxItems`                  |
| Large fast search    | Pattaya, 1000 listings, about 3.5 min, timeout 600 s | 1000 `result`, 92 `search-page`                           | $2.8472     | None                      | Default 300 s can stop near 900 rows |
| Listing details      | 1 link, 3 to 6 s                                     | 1 `first-listing-page`, 1 `result`                        | $0.0045     | None                      | One row per link                     |
| Calendar for a year  | 1 listing, 12 months, 9 to 12 s                      | 1 `first-listing-page`, 12 `calendar`, 362 `calendar-day` | $1.0008     | None                      | Limit with `calendarEndDate`         |
| Calendar with prices | 1 listing, 1 month, about 35 s                       | 1 `first-listing-page`, 1 `calendar`, 28 `calendar-day`   | $0.0792     | 12 `daily-price`: $0.0324 | Total $0.1116                        |
| Reviews              | 1 listing, 60 reviews, 5 to 8 s                      | 1 `first-listing-page`, 2 `review-page`, 60 `review`      | $0.1648     | None                      | Stops at `maxReviews`                |
| Monitor, later run   | 10 listings, 4 changed, about 33 s                   | 4 `result`, 6 `check`, 1 `search-page`                    | $0.0196     | None                      | Unchanged rows are not saved         |
| No match             | Filter with no listings, 2 to 5 s                    | 1 `search-page`                                           | $0.0016     | None                      | Ends with `NO_RESULTS`               |
| Invalid input        | Wrong link, a few seconds                            | 1 `input-check`                                           | $0.0016     | None                      | Run FAILED with `INVALID_INPUT`      |

Set **Maximum cost per run** when you start a run to cap your spend. The run then stops with saved rows and `stopReason: CHARGE_LIMIT`.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Limits

- **Prices:** a price is a quote for your dates and guests at the time of the run. It is not a booking guarantee.
- **Fees:** cleaning, service and tax values stay empty when Airbnb does not show them. They were empty in all 341 listings we tested. Discounts appear in `priceBreakdown` and `originalPrice` when Airbnb shows them.
- **Taxes:** `priceIncludesTaxes` is often empty.
- **Occupancy:** `unavailableShare` is the share of closed days. A host can block days, so it does not prove bookings.
- **Language:** fast search and part of the listing text stay in English. Price breakdowns are in English.
- **Time:** speed changes from run to run. At the default timeout of 300 seconds, 100 full listings finished in about 4 minutes, and 1000-listing fast runs finished in 3.5 to 4.5 minutes. One run on an early build stopped at 931 rows after 286 seconds. With a timeout of 600 seconds, the same fast search finished 1000 rows in 3.5 to 4 minutes. A 240-listing run with full details took about 9 minutes, with a timeout of 900 seconds. Raise the timeout for runs above about 100 full listings or 900 fast listings.
- **Size:** 12 MiB per response, 512 MiB and 100000 requests per run. The Actor makes about 1 request per second and up to 3 attempts per request. A failed search page stops the run with the rows already saved. A listing that cannot be read is skipped without a charge for its row, and the run goes on; 3 failures in a row, or a block, stop the run.
- **Tracking:** run one monitor at a time per `snapshotName`. The saved history holds up to 512 KiB, and old entries are dropped first, so a listing can show as `new` again. A listing is `missing_from_search` only after a search with complete coverage, and `removed` only after its page returns 404 or 410.
- **Privacy:** the Actor has no host or guest profile or contact fields, and it removes contact details from free text. Review text stays as written, so a guest can mention a host's first name in it.
- **Airbnb terms:** Airbnb's terms restrict automated collection and grant no data reuse licence. This Actor is not made or approved by Airbnb. Check that your use fits the terms and your local law.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### API, export and integrations

- **API:** start a run and read rows with the [Apify API](https://docs.apify.com/api/v2). The Actor ID is `cliqtomedia/airbnb-scraper`.
- **Export:** download rows as CSV, Excel, JSON or XML from the **Output** tab.
- **Scheduling:** use [Apify Schedules](https://docs.apify.com/platform/schedules) with Track changes mode.
- **Webhooks:** use [Apify webhooks](https://docs.apify.com/platform/integrations/webhooks) to act when a run ends.
- **SDK and MCP:** use the [Apify client](https://docs.apify.com/api/client/js) or the MCP server below.

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~airbnb-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"location":"Pattaya","maxItems":10}'
```

#### Use with AI agents (MCP)

This Actor works with the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) at `https://mcp.apify.com?tools=cliqtomedia/airbnb-scraper`.

- **Minimal input:** `{"location":"Pattaya","maxItems":10}`
- **Key fields:** `title`, `url`, `pricePerNight`, `totalPrice`, `currency`, `rating`
- **Typical run:** about 35 seconds and about $0.03 for 10 listings.
- **Limits:** prices are quotes for the given dates. `fees` values are often empty. Use `includeDetails: false` for large searches.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Troubleshooting

#### Run has no rows

- **Symptom:** the run succeeded, and the table is empty.
- **Likely reason:** `stopReason` is `NO_RESULTS`, so no listing matches your place and filters. In monitor mode, `NO_CHANGES` means nothing changed.
- **Check:** `RUN_SUMMARY`, `priceMin`, `priceMax`, `currency` and the dates.
- **Action:** remove filters or use a wider area.

#### Run stopped with DEADLINE

- **Symptom:** the run is SUCCEEDED with `partial: true`, and rows are saved. With no saved rows, the run is FAILED.
- **Likely reason:** the timeout ended first. One 1000-listing run on an early build stopped at 931 rows after 286 seconds. In `monitor` with `onlyChanges`, a run with no changed rows saved yet is FAILED, and its `check` events stay charged.
- **Check:** `stopReason`, `savedItems` and `unprocessedInputs` in `RUN_SUMMARY`.
- **Action:** use the saved rows, raise the timeout in the run options, or use `includeDetails: false`.

#### Run failed with INVALID_INPUT

- **Symptom:** the run ends in a few seconds, with no rows.
- **Likely reason:** a link is not an Airbnb link, or a needed field is missing.
- **Check:** `listingUrls`, `startUrls` and the mode.
- **Action:** use room links such as `https://www.airbnb.com/rooms/1770178382370231943`.

#### Run failed with another reason

- **Symptom:** the run is FAILED, and `partial` is true or no rows are saved.
- **Likely reason:** Airbnb blocked requests or changed its page data.
- **Check:** `stopReason` and the run log.
- **Action:** try a small run later. If it fails again, open an issue.

#### Fees or prices are empty

- **Symptom:** `fees` values or `pricePerNight` are `null`.
- **Likely reason:** Airbnb did not show them for these dates and guests.
- **Check:** `priceBreakdown`, `priceLabel` and `available`.
- **Action:** try other dates. Use `totalPrice` and `priceBreakdown` for price checks.

#### Some listings were skipped

- **Symptom:** the run succeeded, `stopReason` is `LISTINGS_SKIPPED`, and `partial` is true.
- **Likely reason:** a listing was removed after the search found it, or its page could not be read.
- **Check:** `skippedListings` and `skippedSample` in `RUN_SUMMARY`. The sample has the listing ID and the reason.
- **Action:** nothing, if the rows you got are enough. You don't pay a row price for a skipped listing, but work done before the failure stays paid: pages read, saved review or calendar rows, and a listing row marked `partial`. To retry, put the listing link in `listingUrls`.

#### Some daily prices are missing

- **Symptom:** `stopReason` is `DAILY_PRICES_INCOMPLETE`, and `partial` is true.
- **Likely reason:** Airbnb did not answer for some days.
- **Check:** `dailyPriceErrors` in `RUN_SUMMARY`. These days have `priceStatus` set to `error`.
- **Action:** run the listing again. You don't pay `daily-price` for a day without a price.

#### Run stopped with CHARGE_LIMIT

- **Symptom:** the run succeeded with fewer rows, and `partial` is true.
- **Likely reason:** the run reached your maximum cost.
- **Check:** `stopReason` in `RUN_SUMMARY`.
- **Action:** raise **Maximum cost per run**, or lower `maxItems`.

#### Listing shows as new again

- **Symptom:** a listing you saw before has `changeStatus: new`.
- **Likely reason:** the history reached its size limit and dropped the old entry, or you changed `snapshotName`.
- **Check:** `snapshotName` and how many listings you track.
- **Action:** use a separate `snapshotName` for each small search.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### FAQ

**Do I need an Airbnb account?**
No. You do not need a login, cookies or an API key.

**Is the total price the final price?**
It is the price Airbnb shows for your dates and guests. Airbnb can change it at checkout.

**Can I get host emails or phone numbers?**
No. The Actor does not output contact details.

**How many listings can I get from one city?**
Set `maxItems` to the number you need. A large search needs more time, so raise the timeout. `splitMap` helps when one area has many listings.

**Do I pay when nothing changed?**
In monitor mode with `onlyChanges`, you pay `search-page` and `check`, not `result`. That is much less than a full row.

**Can I get prices for many dates?**
Yes. Use `dateRanges` for fixed stays, or Calendar mode with `includeDailyPrices` for each open day.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

### Support

Open a request in the **Issues** tab of this Actor. Include the run ID, the input mode and the error text. Do not include tokens or cookies.

> **👉 [Try it now: open the input form](https://console.apify.com/actors/cgMSFTamixhq0pYg1/input)**

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/airbnb-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Search places, read listing links, collect calendars or reviews, or compare listings with a saved snapshot.

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

City or area to search. You can also use locationQueries or Airbnb search links.

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

Maximum listings across all inputs and date ranges. Searches share it evenly. Review mode uses this as its default review limit per listing.

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

Search each city or area in this list.

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

Paste Airbnb search or numeric room links. Country links are converted to www.airbnb.com. URL dates and filters are used with the guests, language and currency selected below.

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

Public Airbnb room links with a numeric ID. Country links are converted to www.airbnb.com; the original host is never requested.

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

Get the description, all photos, amenities, house rules and rating categories.

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

Optional travel date in YYYY-MM-DD format. Set both dates; check-out must be later. Without dates, the Actor uses 3 nights starting 30 days from today.

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

Optional travel date in YYYY-MM-DD format. Set both dates; check-out must be later. Without dates, the Actor uses 3 nights starting 30 days from today.

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

Optional list of {"checkIn":"YYYY-MM-DD","checkOut":"YYYY-MM-DD"}. Each range gets an even share of maxItems, and listings can repeat across ranges.

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

Number used for the search and price quote.

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

Number used for the search and price quote.

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

Number used for the search and price quote.

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

Number used for the search and price quote.

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

Three-letter currency code, such as USD, EUR or THB. Prices use this currency.

## `locale` (type: `string`):

Language for detail labels, such as en or de. Some listing text and fast search stay in English. Price breakdowns use English; currency is set separately.

## `priceMin` (type: `number`):

Optional Airbnb search filter.

## `priceMax` (type: `number`):

Optional Airbnb search filter.

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

Optional Airbnb search filter.

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

Optional Airbnb search filter.

## `minBathrooms` (type: `number`):

Optional Airbnb search filter.

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

Optional room type filter.

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

Optional numeric Airbnb amenity filters. The search URL can also contain filters.

## `instantBook` (type: `boolean`):

Apply this Airbnb search filter.

## `superhost` (type: `boolean`):

Apply this Airbnb search filter.

## `boundingBox` (type: `object`):

Optional map bounds: neLat, neLng, swLat, swLng. North/east must exceed south/west.

## `splitMap` (type: `boolean`):

Split a large map into smaller areas when the source cursor window is full. Results are deduplicated. Coverage depends on the source.

## `calendarMonths` (type: `integer`):

Add up to 12 months of availability. Calendar mode uses one month when this is zero.

## `calendarStartDate` (type: `string`):

Optional inclusive calendar date in YYYY-MM-DD. The start defaults to check-in or today.

## `calendarEndDate` (type: `string`):

Optional last calendar day in YYYY-MM-DD, included in the result. Must be within 12 months of the first calendar day.

## `includeDailyPrices` (type: `boolean`):

Request a separate stay price for every available check-in date. Stay length uses the minimum nights. Extra daily-price events apply; large calendars take longer.

## `maxReviews` (type: `integer`):

Optional maximum reviews per listing. Reviews mode uses maxItems when this is zero. Guest names and profiles are excluded.

## `reviewSort` (type: `string`):

Choose the review order. A since-date stops early only with most recent first.

## `reviewsSince` (type: `string`):

Keep reviews created on or after this date.

## `snapshotName` (type: `string`):

Stable name for monitor history. Use one run at a time for a name. History is limited to 512 KB; removed and oldest listings leave it first.

## `onlyChanges` (type: `boolean`):

In monitor mode, skip unchanged rows. Checked unchanged listings use a lower check event.

## `outputFormat` (type: `string`):

Nested keeps arrays and objects. Flat stores them as JSON text for table exports.

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

Optional alias for maxItems. If set, this value takes priority.

## `deliveryConnector` (type: `string`):

Your Slack, Notion or other MCP connector. After the run the Actor posts a short summary there. Connect services once in Apify Console → MCP connectors.

## `deliveryTarget` (type: `string`):

Where to post the summary: a Notion page link (each run is added on top of that page) or a Slack channel ID. Leave empty to let the connector decide.

## Actor input object example

```json
{
  "mode": "search",
  "location": "Pattaya",
  "maxItems": 10,
  "includeDetails": true,
  "adults": 2,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "currency": "USD",
  "locale": "en",
  "splitMap": true,
  "calendarMonths": 0,
  "includeDailyPrices": false,
  "maxReviews": 0,
  "reviewSort": "MOST_RECENT",
  "snapshotName": "default",
  "onlyChanges": false,
  "outputFormat": "nested"
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `marketSummary` (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": "Pattaya",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/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": "Pattaya",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/airbnb-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": "Pattaya",
  "maxItems": 10
}' |
apify call cliqtomedia/airbnb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cliqtomedia/airbnb-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/cgMSFTamixhq0pYg1/builds/c3QZBlmghSmsymtH1/openapi.json
