# Airbnb Scraper — Vacation Rental Prices & Availability (`lergassy/airbnb-scraper`) Actor

Scrape Airbnb listings for any city and dates: nightly rate and total stay price, availability, rating and review count, property type, beds, amenities, host and coordinates. Short-term rental data for occupancy and pricing research, without a login or an API key.

- **URL**: https://apify.com/lergassy/airbnb-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** Travel, Real estate, Automation
- **Stats:** 10 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

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

**Airbnb Scraper** extracts Airbnb listings for any place and dates: the price for the stay and per night in the currency you choose, rating and review count, property type and area, coordinates, bedrooms and beds, Guest favorite and Superhost badges, and photos. Switch on details and every listing also comes with its description, the full amenities list by group, the host with response rate and time, guest capacity, bathrooms, the six category sub-scores, cancellation policy and house rules; switch on the calendar for **minimum nights, day-by-day availability and occupancy per month**, and reviews for the **guest reviews with the host's replies** — all on the same listing row. It reads the data Airbnb renders into its own pages, so there is no browser and no login — a search of sixty listings takes a few seconds and costs a fraction of a cent in platform usage. Airbnb stops a search after about 270 results whatever the page claims; this Actor keeps going through price bands and de-duplicates by listing, so **400 listings for Seminyak came back from one run in 36 seconds**.

![One run of Airbnb Scraper: Seminyak listings with the total and per-night price, rating and review count.](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/airbnb-scraper/airbnb-scraper-output-table.png)

Give it a place the way you would type it into Airbnb, a check-in and check-out date and the party size, or paste Airbnb search URLs with your own filters, or listing URLs to open in full. Export as JSON, CSV or Excel, run it on a schedule, or call it from the API and AI agents.

### Tested head-to-head — 23 September 2026

![Airbnb Scraper tested against 4 popular Airbnb scrapers: lowest price per 1,000 listings, 97% of fields filled, 0% failed runs](https://raw.githubusercontent.com/lergassy/actor-assets/main/benchmarks/airbnb-tested-2026-09-23.png)

Same search for every scraper (Seminyak, Bali, 10–15 Nov 2026, 2 adults, 50 listings) against four popular
Airbnb scrapers in the Store. This Actor returned all 50 listings with **97% of fields filled**, has **0% failed
runs** over the last 30 days, and gives prices as **numbers** — total, per night and original — so they sort and
sum in a spreadsheet without cleanup. From 7 October 2026 the price is **$1.20 per 1,000 listings**.

### What is Airbnb Scraper?

It is an **Airbnb data scraper** for people who need listing prices and availability as a table rather than a screen: hosts and property managers comparing their rates with the street, analysts sizing a short-term rental market, travel apps, and anyone building a price watch for a destination. It answers "what does a two-bedroom in Canggu cost that week", "which villas in Ubud are Guest favorites under $80 a night" and "what amenities does this listing actually have".

### What data can Airbnb Scraper extract?

| Field | Example |
|---|---|
| `name`, `propertyType`, `area` | Hidden Point Villa "WOODEN HOUSE" · Villa · Ubud |
| `priceTotal`, `pricePerNight`, `currency`, `nights` | 159 · 53 · USD · 3 |
| `priceOriginal` | 210 — the struck-through price when a discount is shown |
| `rating`, `reviewCount` | 4.97 · 346 |
| `badges`, `isGuestFavorite` | \["Guest favorite"] · true |
| `bedInfo` | \["1 bedroom", "1 queen bed", "1 bath"] |
| `highlights` | \["Free cancellation", "Book early to save"] |
| `latitude`, `longitude` | -8.5069 · 115.2625 (approximate, as Airbnb shows before booking) |
| `images` | photo URLs |
| `checkIn`, `checkOut`, `adults` | the dates and party the price was quoted for |
| `url`, `listingId`, `position`, `page`, `place` | link, id, order collected, page, how Airbnb understood the place |

With **Open every listing page** switched on:

| Field | Example |
|---|---|
| `description` | Full text, HTML removed |
| `amenities`, `amenityGroups` | 45 items, grouped as Bathroom, Bedroom and laundry, Entertainment… |
| `hostName`, `isSuperhost`, `hostingSince` | I Wayan · true · 8 months hosting |
| `personCapacity`, `bedrooms`, `beds`, `bathrooms` | 2 · 1 · 1 · 1 |
| `roomType`, `propertyTypeDetail`, `overviewTitle` | Entire home/apt · Entire villa · Entire villa in Ubud, Indonesia |
| `ratingAverage`, `ratingCount`, `reviewTags` | 4.97 · 346 · Pool 133, Hospitality 300, Breakfast 149 |
| `sleepingArrangements`, `highlightsDetail` | \["1 queen bed"] · \["Outdoor entertainment"] |
| `locationText`, `isExactLocation` | Ubud, Bali, Indonesia · false |
| `hostResponseRate`, `hostResponseTime`, `hostIsAirbnbManaged` | 98 · within an hour · false |
| `ratingDistribution` | {stars5: 91.7, stars4: 8.3, stars3: 0, …} — share of reviews per star |
| `categoryRatings` | {cleanliness: 4.8, accuracy: 4.9, check\_in: 5, communication: 4.7, location: 4.8, value: 4.9} |
| `discountPercent` | 19 — how far the nightly price sits below the struck-through original |
| `cancellationPolicy` | Free cancellation for 24 hours. Cancel before October 8 for a partial refund. |
| `houseRules`, `checkInTime`, `checkOutTime`, `safetyItems` | \["Check-in after 3:00 PM", "Checkout before 12:00 PM", "4 guests maximum"] · 3:00 PM · 12:00 PM · \["Smoke alarm not reported"] |

With **Availability calendar and minimum nights** switched on:

| Field | Example |
|---|---|
| `minNights`, `maxNights`, `availableOnCheckIn` | 2 · 1125 · true |
| `availabilityByMonth` | \[{month: 2026-10, days: 31, available: 10, occupancyPercent: 68}, …] |
| `availableDaysAhead`, `calendar` | 21 · one entry per day with available, bookable, check-in/out allowed, min and max nights |

With **Guest reviews** switched on:

| Field | Example |
|---|---|
| `reviews` | \[{rating: 5, date: "3 weeks ago", text: "Great stay, fantastic location…", reviewerName: "Jenny", reviewerLocation: "Sydney, Australia", hostResponse: null}, …] |

### What other Airbnb scrapers get wrong — and what this one does instead

The issue trackers and reviews of the most-used Airbnb scrapers on Apify repeat the same complaints. Each one is a design decision here.

| Complaint on other actors | Airbnb Scraper |
|---|---|
| "Only 41 results returned when Airbnb shows 478", "requested 2,000 items, received 243" | Plain paging is the first pass, then the same search runs again in nine price bands and every listing is kept once — 400 for Seminyak in one run, measured |
| "checkIn date not being read from startUrls" | Dates and guests in a pasted search URL win over the form, per URL |
| "Add minimum nights to output" — open on the leading actor for weeks | `minNights` and `maxNights` on the check-in date, plus the day-by-day calendar and occupancy per month |
| Reviews only through a second, separate actor | `reviews` on the listing row, up to 200, with the host's replies |
| "not scraping descriptions", "half the titles missing", "bed and bath not available" | Every field is read from the JSON Airbnb ships in its own page, not from the layout — description, title, beds, baths, amenities on every detailed row |
| "Charged me despite the limits", "no data returned but charged" | Billing is per listing row and per opened page; error rows and empty searches cost nothing, and `maxListings` is a hard cap |
| "Can't export data if it's too much" | Rows are flat, one per listing; arrays are short lists, not nested blobs |
| "Wrong price" | Total for the stay, average per night, the struck-through original and the discount in percent — and the dates and party the quote was for on the same row |

### How much does it cost to scrape Airbnb?

> **Until 22 September 2026 this Actor still bills on Apify platform usage, not on the prices below.**
> The per-event pricing on this page takes effect on 22 September 2026; the **Pricing** tab shows whichever
> model is active today. Runs before that date are charged as compute and proxy usage, which for a
> small test is a few cents.

Pricing is **pay per listing**: **$3.00 per 1,000 listings** returned, and **$4.44 per 1,000** listings opened in full for the description, amenities, host and sub-scores. The most-used Airbnb scraper on Apify charges $4.00 and $6.00 for the same two things — this one is a quarter cheaper on both, with no start fee. There is no browser in this Actor, so platform usage stays low — a search page is one plain request and a listing page one more. Error rows and empty searches are never charged. Bronze, Silver and Gold plans get 10 %, 20 % and 30 % off.

#### Bulk export: what 50,000 listings actually cost

This Actor is built for bulk jobs — put hundreds of inputs into one run, or call it from the API on
a schedule. There is **no fee per run, no fee per page and no proxy charge**: you pay for the rows
you keep, and error rows are free. That is what decides the bill once you pull a whole market
rather than a single search.

| Job | This Actor | Most-used Actor in this category |
|---|---|---|
| 50,000 listings across 100 runs | **$150** | $200.01 |

Checked on the Apify Store on 21 September 2026 against the Actor with the most monthly users in
this category; its per-run fee is counted in, as ours would be if we charged one. Some Actors here
ask less per row — this table compares against the one buyers actually use most.

### How to scrape Airbnb listings

1. Type the place into **📍 Where** — `Ubud, Bali`, `Lisbon, Portugal`, `Brooklyn, NY`. Several places, one per line, run in one go.
2. Set **📅 Check-in** and **📅 Check-out**. Airbnb quotes a price only for a date range; without dates the Actor searches a stay one month out and says so in the log.
3. Set **👥 Adults** to the real party size — prices change with occupancy.
4. Choose **💯 Maximum listings** and **💱 Currency**.
5. Switch on **🔎 Open every listing page** if you need amenities, description and host.
6. Click **Start**, then export from the **Output** tab or read the dataset through the API.

To use Airbnb's own filters, run the search on airbnb.com, copy the URL from the address bar and paste it into **🔗 Airbnb URLs** — every filter in that URL is honoured. Listing URLs pasted there are always opened in full: name, description, amenities, sleeping arrangements, house rules, host, rating and coordinates. Prices are the one thing a listing URL cannot give you — Airbnb quotes a stay inside a search, so run a place or a search URL when you need nightly and total price.

### ⬇️ Input

![Airbnb Scraper input form: the fields a buyer fills in before pressing Start](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/airbnb-scraper/airbnb-scraper-input-form.png)

```json
{
  "locationQueries": ["Ubud, Bali, Indonesia"],
  "checkIn": "2026-10-12",
  "checkOut": "2026-10-15",
  "adults": 2,
  "currency": "USD",
  "maxListings": 60,
  "includeDetails": false
}
```

#### Filtered search from an Airbnb URL

```json
{
  "startUrls": ["https://www.airbnb.com/s/Canggu--Bali--Indonesia/homes?checkin=2026-11-03&checkout=2026-11-06&adults=2&min_bedrooms=2&price_max=150"],
  "maxListings": 100
}
```

#### One listing in full

```json
{
  "startUrls": ["https://www.airbnb.com/rooms/1591176990185841592"],
  "checkIn": "2026-10-12",
  "checkOut": "2026-10-15"
}
```

#### Occupancy and minimum stay for a market

```json
{
  "locationQueries": ["Seminyak, Bali, Indonesia"],
  "maxListings": 100,
  "includeCalendar": true,
  "calendarMonths": 3
}
```

Every listing comes back with `minNights`, `availableOnCheckIn` and `availabilityByMonth` — a hundred properties' occupancy for the next quarter in one table.

#### Reviews for a shortlist

```json
{
  "startUrls": ["https://www.airbnb.com/rooms/43597370", "https://www.airbnb.com/rooms/1591176990185841592"],
  "includeReviews": true,
  "maxReviews": 100
}
```

### ⬆️ Output

```json
{
  "type": "listing",
  "listingId": "30279779",
  "url": "https://www.airbnb.com/rooms/30279779",
  "name": "Hidden Point Villa \"WOODEN HOUSE\"",
  "propertyType": "Villa",
  "area": "Ubud",
  "latitude": -8.5069,
  "longitude": 115.2625,
  "priceTotal": 159,
  "priceOriginal": null,
  "pricePerNight": 53,
  "priceText": "$159",
  "priceQualifier": "for 3 nights",
  "currency": "USD",
  "nights": 3,
  "rating": 4.97,
  "reviewCount": 346,
  "badges": ["Guest favorite"],
  "isGuestFavorite": true,
  "bedInfo": ["1 bedroom", "1 queen bed", "1 bath"],
  "highlights": ["Free cancellation"],
  "images": ["https://a0.muscache.com/im/pictures/…"],
  "query": "Ubud, Bali, Indonesia",
  "place": "Ubud, Indonesia",
  "checkIn": "2026-10-12",
  "checkOut": "2026-10-15",
  "adults": 2,
  "position": 1,
  "page": 1,
  "scrapedAt": "2026-09-03T14:00:00.000Z"
}
```

With details on, the same row also carries `description`, `amenities`, `amenityGroups`, `hostName`, `isSuperhost`, `hostingSince`, `personCapacity`, `bedrooms`, `beds`, `bathrooms`, `roomType`, `ratingAverage`, `ratingCount`, `reviewTags`, `sleepingArrangements`, `locationText` and `isExactLocation`. A page that could not be read arrives as a `type: "error"` row with the URL and the reason, never as a silently missing listing.

### Use cases for Airbnb data

#### Pricing your own place

Pull every comparable listing in your area for the same dates and see where your nightly rate sits, which badges the competition carries, and what they offer that you do not.

#### Sizing a short-term rental market

Count listings, property types, ratings and prices for a town before buying or managing there. Run it monthly and keep the history.

#### Watching prices for a trip

Schedule the same search weekly and watch `pricePerNight` move for the dates you want.

#### Travel and property products

Feed listings, coordinates and prices into a map, a comparison page or a recommendation model without maintaining a scraper of your own.

#### AI agents

An agent asked "find me a villa in Ubud with a pool under $80" can call this Actor with the place, dates and a price cap, and filter on `amenities`.

### Integrations and Airbnb API

Run it from the [Apify API](https://docs.apify.com/api/v2), the JavaScript and Python clients, a schedule, or a webhook, and push the dataset to Google Sheets, Slack or a database through **n8n**, **Make** or **Zapier**. Airbnb has no public API for this data; the Actor is the practical substitute.

### 🤖 For AI Agents & LLM Apps

Compact reference for agents calling this Actor through the [Apify MCP server](https://mcp.apify.com) or the Apify API (`lergassy/airbnb-scraper`).

**Purpose:** returns Airbnb listings for a place and a date range, priced for that stay, with rating, location, beds and badges — and, on request, the description, amenities, host and capacity of each listing. Use it to answer "what does a stay in X cost on these dates", "which listings in X have a pool and a 4.9+ rating" and "what does this listing offer".

**Minimal input:**

```json
{ "locationQueries": ["Ubud, Bali, Indonesia"], "checkIn": "2026-10-12", "checkOut": "2026-10-15", "adults": 2 }
```

**Output:** one row per listing — `listingId`, `url`, `name`, `propertyType`, `area`, `latitude`, `longitude`, `priceTotal`, `pricePerNight`, `priceOriginal`, `currency`, `nights`, `rating`, `reviewCount`, `badges`, `isGuestFavorite`, `bedInfo`, `highlights`, `images`, `place`, `checkIn`, `checkOut`, `adults`, `position`, `page`, `scrapedAt`. With `includeDetails: true` also `description`, `amenities`, `amenityGroups`, `hostName`, `isSuperhost`, `personCapacity`, `bedrooms`, `beds`, `bathrooms`, `roomType`, `ratingAverage`, `ratingCount`, `reviewTags`, `locationText`, `isExactLocation`. Unreadable pages come back as `type: "error"`.

**Behaviors an agent should know:**

- **Prices exist only for a date range.** Pass `checkIn` and `checkOut`; without them the Actor picks a stay one month out and logs it. `priceTotal` is for the whole stay, `pricePerNight` is derived from it.
- `adults` changes the price. Pass the real party size.
- `maxListings` (default 60) caps the run; Airbnb serves 18 per page and rarely more than about 270 per search, so ask for a narrower place rather than a bigger number.
- `includeDetails` costs one request per listing and is the only way to get amenities, description and host. Leave it off for price comparisons.
- Airbnb's own filters (`price_max`, `min_bedrooms`, `room_types[]`…) work through `startUrls`: paste a filtered search URL. `priceMin`, `priceMax`, `minBedrooms`, `minBeds`, `minBathrooms` and `roomTypes` cover the common ones directly.
- Coordinates are approximate until booking; `isExactLocation` says whether Airbnb shows the exact spot.
- `rating` and `reviewCount` are empty for new listings without reviews — not zero.
- Apify Proxy is on by default, because Airbnb rate-limits repeat callers by IP address. If Airbnb starts refusing pages mid-run, the Actor moves itself onto residential addresses and carries on; if it is refused there too, the run fails with the reason instead of handing you an empty table that says "succeeded".

### Short-term rental data: nightly rates, availability and occupancy

Every listing comes back with the nightly rate and the total price for the dates you asked about, so the same
run answers what a place costs and whether it is free. Run a city on a schedule and the results stack into an
availability history — the raw material for occupancy and pricing research on a market, without paying for a
short-term rental analytics subscription.

### Rental prices by city, in one table

Give it several places at once and every row carries its own location, dates, currency, property type and bed
count. That is a like-for-like comparison of holiday rental prices across cities, which is the question most
people are actually asking when they open Airbnb with a spreadsheet next to them.

### ❓ FAQ

#### Is it legal to scrape Airbnb?

The Actor reads public listing pages and returns the information any visitor sees: prices, ratings, descriptions and amenities. It does not log in, does not collect guest data and does not bypass any access control. How you use the data is subject to your local law and Airbnb's terms — consult a lawyer for commercial use at scale.

#### Why does a listing show a different price on Airbnb?

Prices depend on dates, party size and currency. The Actor quotes the price for exactly the `checkIn`, `checkOut`, `adults` and `currency` you set; change any of them and the number changes on Airbnb too. Taxes and fees are as Airbnb displays them in the total.

#### Can I get more than 270 listings for a place?

Yes. Airbnb caps a search at roughly fifteen pages, so the Actor runs the same search again in price bands (Airbnb filters those server-side) and keeps each listing once. Set `maxListings` to what you need; 400 for Seminyak took 27 pages and 36 seconds. For a very large city, neighbourhoods or several date ranges still add coverage on top.

#### Do I need a proxy?

No. Airbnb serves search and listing pages to plain requests from Apify's servers. The proxy field exists for the day that changes.

#### Can I use it with the Apify API or an MCP server?

Yes. It runs from the API and the official clients, and AI agents reach it through the Apify MCP server without extra setup.

#### Does it return guest reviews?

Yes — switch on **Guest reviews** and each listing carries its latest reviews (up to 200): rating, date, text, language, reviewer name and location, and the host's reply. The **Guest reviews** table view unwinds them one per line.

#### Does it return minimum nights and the availability calendar?

Yes — switch on **Availability calendar and minimum nights**. Each listing gets the host's minimum and maximum stay on your check-in date, whether that date is open, a day-by-day calendar for the months you choose, and occupancy per month (the share of days booked or blocked). The most-used Airbnb scraper has an open request for minimum nights that has gone unanswered.

### Your feedback

Found a place it mis-reads or a field that is empty when it should not be? Open an issue on the **Issues** tab — every one gets answered.

### You might also like

| Actor | What it does |
|---|---|
| [Trip.com Scraper](https://apify.com/lergassy/tripcom-scraper) | Hotel prices and availability for a city and dates |
| [Agoda Reviews Scraper](https://apify.com/lergassy/agoda-reviews-scraper) | Hotel reviews, including the Booking.com reviews shown on Agoda |
| [Google Flights Scraper](https://apify.com/lergassy/google-flights-scraper) | Live flight prices, layovers and booking options |
| [Email Verifier & Phone Number Validator](https://apify.com/lergassy/email-phone-verifier) | Checks e-mails and phone numbers in bulk |

### Also known as

People look for this Actor as an Airbnb scraper, an Airbnb listings API, an Airbnb price scraper, a vacation rental data source, a short-term rental scraper, a holiday rental scraper, an STR analytics feed, and a way to get nightly rates and availability by city.

# Actor input Schema

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

Places to search, one per line, the way you would type them into Airbnb: <code>Ubud, Bali</code>, <code>Lisbon, Portugal</code>, <code>Brooklyn, NY</code>.

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

First night, YYYY-MM-DD. Airbnb quotes a price only for a date range; leave both dates empty and the Actor searches a stay one month out.

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

Departure day, YYYY-MM-DD.

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

Prices change with occupancy, so set the real party size.

## `maxListings` (type: `integer`):

Cap per run across all places. Airbnb returns 18 listings per page and rarely more than about 270 per search.

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

Currency the prices are quoted in.

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

Adds description, amenities, host, capacity, bedrooms and beds, review tags and exact-location flag. One extra request per listing.

## `includeCalendar` (type: `boolean`):

For each listing, read the host's calendar: day-by-day availability, the minimum and maximum nights on your check-in date, and occupancy per month. Needs the listing page, so it is billed as a detail row — no extra event.

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

How many months ahead to read, counting from check-in. 1–12.

## `includeReviews` (type: `boolean`):

For each listing, the latest guest reviews with rating, date, text, reviewer and the host's reply. Billed as a detail row — no extra event.

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

Newest first, up to 200.

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

Instead of a place: paste Airbnb search URLs (with your own filters) or listing URLs like <code>https://www.airbnb.com/rooms/1591176990185841592</code>. Listing URLs are always opened in full.

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

Children in the party.

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

Infants in the party.

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

Pets travelling.

## `priceMin` (type: `integer`):

In the chosen currency.

## `priceMax` (type: `integer`):

In the chosen currency.

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

Filter applied by Airbnb itself.

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

Filter applied by Airbnb itself.

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

Filter applied by Airbnb itself.

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

Leave empty for all types.

## `maxPages` (type: `integer`):

Each page holds 18 listings. The run stops earlier when a page adds nothing new.

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

Apify Proxy is on by default — Airbnb rate-limits repeat callers by IP address. If Airbnb starts refusing pages, the run switches itself to residential addresses; you can also pick residential here up front for large jobs.

## Actor input object example

```json
{
  "locationQueries": [
    "Seminyak, Bali, Indonesia"
  ],
  "adults": 2,
  "maxListings": 60,
  "currency": "USD",
  "includeDetails": false,
  "includeCalendar": false,
  "calendarMonths": 3,
  "includeReviews": false,
  "maxReviews": 24,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "maxPages": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per listing: name, property type and area, coordinates, total and per-night price for the searched dates, rating and review count, badges such as Guest favorite, bed info, images. With details on: description, amenities by group, host and Superhost flag, capacity, bedrooms, beds, bathrooms, review tags.

# 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 = {
    "locationQueries": [
        "Seminyak, Bali, Indonesia"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/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 = { "locationQueries": ["Seminyak, Bali, Indonesia"] }

# Run the Actor and wait for it to finish
run = client.actor("lergassy/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 '{
  "locationQueries": [
    "Seminyak, Bali, Indonesia"
  ]
}' |
apify call lergassy/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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