# Airbnb Listing Details & Availability Calendar (`myth84/airbnb-listing-details-scraper`) Actor

Airbnb listing details and availability calendar by URL: description, amenities, house rules, six category ratings, review count, photos, coordinates and a 1–12 month day-by-day availability calendar. One flat row per listing, no personal data about hosts or guests.

- **URL**: https://apify.com/myth84/airbnb-listing-details-scraper.md
- **Developed by:** [Flatrow Data Studio](https://apify.com/myth84) (community)
- **Categories:** Travel, Real estate, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 listing details

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 Listing Details & Availability Calendar Scraper – amenities, house rules, ratings, no personal data

Airbnb listing details scraper and Airbnb availability calendar scraper: get the description, amenities, house rules, category ratings, photos and day-by-day availability of any Airbnb listing URL, as a clean table or through an API — no login. Enrich an Airbnb search export, follow occupancy and minimum stays, or compare amenities across vacation rentals.

**No login, no cookies, no personal data:** nothing to sign in to, no cookies to paste, nothing about hosts or guests in the output.

- **What you get:** one flat row per Airbnb listing URL: description, amenities by category, house rules, six category ratings, review count, photos, coordinates, neighbourhood and an optional 1–12 month availability calendar with minimum stays. No prices, no personal data.
- **For whom:** hosts and property managers (occupancy and minimum-stay monitoring), rental analysts, anyone enriching a search export with amenities and rules, AI agents through MCP.
- **How much:** from $1.50 per 1,000 listings on the Free plan, lower on paid plans; Apify's free monthly credit of $5 covers about 3,333 listings without the optional calendar. A fixed price per listing saved, plus a price per calendar month only when you ask for the calendar, and nothing else (see the Pricing tab); `maxResults` caps every run.

**Sample output**: one real row from a Lisbon listing with its calendar, key columns only (the full row is under *Output example*):

```json
{
  "platformListingId": "21607939",
  "title": "Red Bridge Duplex close to LX Factory",
  "propertyType": "Entire rental unit",
  "rating": 4.96,
  "reviewCount": 658,
  "bedrooms": 2,
  "maxGuests": 5,
  "checkInTime": "Check-in after 4:00 PM",
  "petsAllowed": false,
  "ratingCleanliness": 4.96,
  "availableDays": 7,
  "nextAvailableDate": "2026-11-13"
}
```

Give this Airbnb scraper a list of **listing URLs** (or listing ids) and get **one flat row per listing** with everything the listing page shows and search results do not: the full description as plain text, the complete list of amenities grouped by Airbnb's categories (and what is *not* included), the house rules (check-in and check-out times, maximum guests, pets, smoking, parties, quiet hours), safety features, sleeping arrangements, the overall rating with the **six category ratings** (cleanliness, accuracy, check-in, communication, location, value), the number of reviews, the Guest favorite distinction, photos, coordinates and the neighbourhood. Tick **Include availability calendar** to add, for each listing, a day-by-day calendar for 1 to 12 months (available, check-in / check-out allowed, minimum stay) with summary columns: available days, next available date and whether your dates are free.

**No personal data, by design.** Nothing about hosts or guests is collected: no names, no profile photos, no ids, no "hosted by" texts, no review texts. The output only contains listing-level facts, the average and category ratings and the number of reviews. The dataset is safe to store, share and feed to AI agents.

### What can you do with Airbnb listing data?

- **Enrich a search export**: run the [Airbnb Listings Scraper](https://apify.com/myth84/airbnb-listings-scraper) for prices, then this Actor on the `url` column for amenities, rules and ratings; both share the same first columns and join on `platformListingId`.
- **Monitor availability and minimum stays** of your own or competing listings with the calendar option: occupancy estimates, revenue management, last-minute gap detection.
- **Qualify listings for a use case**: filter on `amenityGroups` (workspace, crib, parking, pool), `petsAllowed`, `maxGuests`, `bedrooms`, `ratingCleanliness`, accessibility features.
- **Feed AI agents, spreadsheets and BI tools** with a stable, documented schema (`travel-listing/1.6`) shared by the travel studio.

### What data does Airbnb Listing Details Scraper extract?

Every row has every column: a value Airbnb does not show on the listing page is `null` (or `[]` / `{}` for lists and groups), so CSV and Excel exports keep the same columns from run to run. The first columns are those of the Airbnb Listings Scraper (`travel-listing/1.5`, its price-monitoring columns included and always `null` here), then come the detail columns.

| Group | Columns |
|---|---|
| Identity | `schemaVersion`, `platform`, `platformListingId`, `url`, `title`, `propertyType`, `propertyTypeCode`, `roomType` |
| Location | `city`, `region`, `country`, `countryCode`, `latitude`, `longitude`, `isExactLocation`, `neighborhood`, `locationSummary`, `neighborhoodDescription` |
| Stay | `checkIn`, `checkOut`, `nights`, `guests`, `isAvailable` |
| Prices (not on listing pages, always `null`) | `currency`, `pricePerNight`, `priceTotal`, `priceBeforeDiscount`, `taxesAndFees`, `taxesIncluded`, `priceTotalAllIn`, `cleaningFee`, `serviceFee` |
| Quality | `rating`, `ratingMax`, `reviewCount`, `ratingCleanliness`, `ratingAccuracy`, `ratingCheckIn`, `ratingCommunication`, `ratingLocation`, `ratingValue`, `isGuestFavorite`, `isSuperhost`, `isNew`, `highlights`, `badges`, `starRating`, `listedBy`, `cancellationPolicy`, `instantBook` |
| Size and amenities | `maxGuests`, `bedrooms`, `beds`, `bathrooms`, `sleepingArrangements`, `amenities`, `amenityGroups`, `unavailableAmenities`, `accessibilityFeatures` |
| House rules and safety | `checkInTime`, `checkOutTime`, `petsAllowed`, `smokingAllowed`, `eventsAllowed`, `quietHours`, `houseRules`, `safetyFeatures` |
| Description and photos | `description`, `imageUrls`, `imageCount` |
| Availability calendar | `calendarStart`, `calendarEnd`, `calendarDays`, `availableDays`, `nextAvailableDate`, `minNights`, `availability` |
| Context | `searchLocation`, `searchRank`, `searchPage`, `viewCountryCode`, `scrapedAt` |
| Price monitoring (not offered by this Actor, always `null`) | `changeType`, `previousPrice`, `priceDelta`, `priceDeltaPercent` |

Columns that listing pages do not carry stay empty for this Actor: every price column (the price of a stay is computed by Airbnb's booking widget, which this Actor does not call; use the Airbnb Listings Scraper with dates for prices), `badges`, `listedBy`, `instantBook`, `cancellationPolicy`, `starRating`, `region` and the `search*` columns. `currency` repeats the currency you asked for so that rows can be joined with price rows.

### How to scrape Airbnb listing details

1. **Paste listing URLs** copied from your browser (`https://www.airbnb.com/rooms/21607939`, any Airbnb country site) or just the numeric ids, one per line. Search result URLs are not accepted.
2. **Optionally add dates and guests**: the dates and the number of adults are written into each row's `url`, the guests are counted in `guests`, and, with the calendar, the row says whether your stay is free (`isAvailable`).
3. **Tick Include availability calendar** and choose the number of months (1 to 12, from the current month) if you need availability and minimum stays.
4. **Run** and open the **Output** tab: the *Overview*, *Ratings*, *Amenities*, *House rules* and *Availability* views show the main columns; export everything as JSON, CSV, Excel or through the API.

### Input

Give at least one listing URL or id in `listingUrls`; `checkIn` and `checkOut` go together. Field names and defaults are those of the input form.

The input of our validation run: three Lisbon listings with a 3-month availability calendar, texts in English, prices (absent from listing pages) in EUR (every other field keeps its default):

```json
{
  "listingUrls": [
    "https://www.airbnb.com/rooms/21607939",
    "https://www.airbnb.com/rooms/29990558",
    "https://www.airbnb.com/rooms/13376882"
  ],
  "adults": 2,
  "includeCalendar": true,
  "calendarMonths": 3,
  "currency": "EUR",
  "locale": "en",
  "domain": "www.airbnb.com",
  "maxResults": 10
}
```

Every field, with its type and default:

| Field | Type | Default | Description |
|---|---|---|---|
| `listingUrls` | string\[] | — | Airbnb listing URLs (`/rooms/<id>`, any country site) or numeric listing ids. Duplicates are fetched once. Prefilled with three Lisbon listings. |
| `checkIn` | string | — | Optional check-in date, YYYY-MM-DD; written into `url`, checked against the calendar when requested. |
| `checkOut` | string | — | Check-out date, YYYY-MM-DD, after check-in. Required when `checkIn` is set. |
| `adults` | integer | `2` | Number of adults written into `url` (`guests` column). |
| `children` | integer | `0` | Children aged 2 to 12 (counted in `guests`). |
| `infants` | integer | `0` | Infants under 2 (not counted in `guests`). |
| `pets` | integer | `0` | Pets travelling with you. |
| `includeCalendar` | boolean | `false` | Also fetch the availability calendar of each listing (one extra request and one `calendar` event per listing-month). |
| `calendarMonths` | integer | `3` | Months of calendar to fetch, from the current month (1 to 12). |
| `maxResults` | integer | `100` | Stop after this many listings. You are never charged for more. Prefilled with 50 in the form. |
| `currency` | string | `"USD"` | ISO 4217 code sent with the listing and calendar requests and recorded in `currency` (prices are not on listing pages). |
| `locale` | string | `"en"` | Airbnb language code for the description, amenities, rules and property type (en, fr, es, de, it, pt, or en-GB style). |
| `domain` | string | `"www.airbnb.com"` | Airbnb site to query, e.g. www.airbnb.fr or www.airbnb.co.uk. Listing URLs use this domain. |
| `proxyConfiguration` | object | `{"useApifyProxy":true}` | Apify datacenter proxies by default, included in the price; keep them, or bring your own proxy URLs. A proxy country is recorded in `viewCountryCode`. |
| `maxRequests` | integer | `500` | Safety cap on requests in one run (one per listing, plus one per listing with the calendar). |
| `delayMs` | integer | `800` | Pause between two listings, in milliseconds. |
| `debugStoreHtml` | boolean | `false` | Debugging only: store every fetched page and calendar response in the key-value store. |

### Output example

One real row, produced by the Actor from a Lisbon listing on airbnb.com (English, EUR, 13–15 November 2026, 2 adults, 2-month calendar). All columns are present, in this order, for every listing; `availability` holds one entry per day of the calendar (61 here):

```json
{
  "schemaVersion": "travel-listing/1.6",
  "platform": "airbnb",
  "platformListingId": "21607939",
  "url": "https://www.airbnb.com/rooms/21607939?check_in=2026-11-13&check_out=2026-11-15&adults=2",
  "title": "Red Bridge Duplex close to LX Factory",
  "propertyType": "Entire rental unit",
  "roomType": "entire_place",
  "city": "Lisbon",
  "region": null,
  "country": "Portugal",
  "countryCode": "PT",
  "latitude": 38.7062,
  "longitude": -9.1753,
  "checkIn": "2026-11-13",
  "checkOut": "2026-11-15",
  "nights": 2,
  "guests": 2,
  "currency": "EUR",
  "pricePerNight": null,
  "priceTotal": null,
  "priceBeforeDiscount": null,
  "cleaningFee": null,
  "serviceFee": null,
  "taxesAndFees": null,
  "taxesIncluded": null,
  "priceTotalAllIn": null,
  "rating": 4.96,
  "ratingMax": 5,
  "reviewCount": 658,
  "starRating": null,
  "bedrooms": 2,
  "beds": 3,
  "bathrooms": 2,
  "maxGuests": 5,
  "amenities": [
    "Courtyard view",
    "Hair dryer",
    "Cleaning products",
    "Shampoo",
    "Hot water",
    "Shower gel",
    "Free washer – In unit",
    "Hangers",
    "Bed linens",
    "Extra pillows and blankets",
    "Room-darkening shades",
    "Iron",
    "Drying rack for clothing",
    "Clothing storage: walk-in closet and closet",
    "Ethernet connection",
    "HDTV with standard cable",
    "Books and reading material",
    "Paid pack ’n play/travel crib - available upon request",
    "Standalone high chair - always at the listing",
    "Children’s dinnerware",
    "Central air conditioning",
    "Central heating",
    "Smoke alarm",
    "Carbon monoxide alarm",
    "Fire extinguisher",
    "First aid kit",
    "Wifi",
    "Dedicated workspace",
    "Kitchen",
    "Indesit refrigerator",
    "Microwave",
    "Cooking basics",
    "Dishes and silverware",
    "Freezer",
    "Dishwasher",
    "Autre electric stove",
    "Oven",
    "Hot water kettle",
    "Coffee maker: Nespresso",
    "Wine glasses",
    "Toaster",
    "Baking sheet",
    "Blender",
    "Dining table",
    "Coffee",
    "Private entrance",
    "Laundromat nearby",
    "Private patio or balcony",
    "Outdoor furniture",
    "Free street parking",
    "Paid parking lot off premises",
    "Paid parking on premises",
    "Luggage dropoff allowed",
    "Self check-in",
    "Lockbox",
    "Housekeeping available from 8:00 AM to 4:00 PM, every day - available at extra cost"
  ],
  "badges": [],
  "isSuperhost": null,
  "listedBy": null,
  "instantBook": null,
  "isNew": false,
  "isAvailable": true,
  "cancellationPolicy": null,
  "imageUrls": [
    "https://a0.muscache.com/im/pictures/aee454e3-186d-4b75-93ec-56a770ef6bcd.jpg"
  ],
  "imageCount": 1,
  "searchLocation": null,
  "searchRank": null,
  "searchPage": null,
  "viewCountryCode": null,
  "scrapedAt": "2026-10-19T08:00:00.000Z",
  "changeType": null,
  "previousPrice": null,
  "priceDelta": null,
  "priceDeltaPercent": null,
  "description": "Red Bridge Duplex is a large, still intimate duplex in a typical modernized old portuguese house, extremely functional and welcoming. The apartment is really versatile, suitable for anyone who enjoys a genuine portuguese experience, with typical coffees and restaurants nearby, especially with a view to the Red Bridge and the Tejo River. Close to points of interest such as Lx Factory, Alcantara's Docks, Belem Cultural Center and Lisbon Congress Center this duplex is unique!\n\nThe space\nThe access to the duplex is right from the street, through a common entry door. Once you take the stairs, on the left side, you've got the apartment's door in front of you. As the apartment is a duplex, at first floor there are the bedrooms. One bedroom is configurated as a suite with an afferent bathroom and dressing area. The other bedroom has a bathroom alongside, but with individual entries. At the second floor, you have a multifunctional kitchen and a large living room area that has the capacity to receive 2 more persons to sleep on a large sofa bed. The dining area takes you to a little balcony with a view towards the 25th April Bridge (the red bridge). This floor has kept its authentic rustic style with \"Pombaline cage\" and stones. In this area we have provided air conditioning.\n\nGuest access\nThe duplex is completely accessible to guests.\n\nRegistration Details\n57704/AL",
  "highlights": [
    "Top 10% of homes",
    "Self check-in",
    "Dedicated workspace"
  ],
  "propertyTypeCode": "APARTMENT",
  "isGuestFavorite": true,
  "amenityGroups": {
    "Scenic views": [
      "Courtyard view"
    ],
    "Bathroom": [
      "Hair dryer",
      "Cleaning products",
      "Shampoo",
      "Hot water",
      "Shower gel"
    ],
    "Bedroom and laundry": [
      "Free washer – In unit",
      "Hangers",
      "Bed linens",
      "Extra pillows and blankets",
      "Room-darkening shades",
      "Iron",
      "Drying rack for clothing",
      "Clothing storage: walk-in closet and closet"
    ],
    "Entertainment": [
      "Ethernet connection",
      "HDTV with standard cable",
      "Books and reading material"
    ],
    "Family": [
      "Paid pack ’n play/travel crib - available upon request",
      "Standalone high chair - always at the listing",
      "Children’s dinnerware"
    ],
    "Heating and cooling": [
      "Central air conditioning",
      "Central heating"
    ],
    "Home safety": [
      "Smoke alarm",
      "Carbon monoxide alarm",
      "Fire extinguisher",
      "First aid kit"
    ],
    "Internet and office": [
      "Wifi",
      "Dedicated workspace"
    ],
    "Kitchen and dining": [
      "Kitchen",
      "Indesit refrigerator",
      "Microwave",
      "Cooking basics",
      "Dishes and silverware",
      "Freezer",
      "Dishwasher",
      "Autre electric stove",
      "Oven",
      "Hot water kettle",
      "Coffee maker: Nespresso",
      "Wine glasses",
      "Toaster",
      "Baking sheet",
      "Blender",
      "Dining table",
      "Coffee"
    ],
    "Location features": [
      "Private entrance",
      "Laundromat nearby"
    ],
    "Outdoor": [
      "Private patio or balcony",
      "Outdoor furniture"
    ],
    "Parking and facilities": [
      "Free street parking",
      "Paid parking lot off premises",
      "Paid parking on premises"
    ],
    "Services": [
      "Luggage dropoff allowed",
      "Self check-in",
      "Lockbox",
      "Housekeeping available from 8:00 AM to 4:00 PM, every day - available at extra cost"
    ]
  },
  "unavailableAmenities": [
    "Exterior security cameras on property",
    "Dryer",
    "Essentials"
  ],
  "houseRules": [
    "Check-in after 4:00 PM",
    "Checkout before 12:00 PM",
    "Self check-in with lockbox",
    "5 guests maximum",
    "No pets",
    "Quiet hours: 10:00 PM - 8:00 AM",
    "No parties or events",
    "No smoking",
    "Additional rules: Please be quiet after 11 p.m.",
    "Throw trash away",
    "Turn things off",
    "Return keys"
  ],
  "checkInTime": "Check-in after 4:00 PM",
  "checkOutTime": "Checkout before 12:00 PM",
  "petsAllowed": false,
  "smokingAllowed": false,
  "eventsAllowed": false,
  "quietHours": "10:00 PM - 8:00 AM",
  "safetyFeatures": [
    "Carbon monoxide alarm installed",
    "Smoke alarm installed",
    "Must climb stairs"
  ],
  "sleepingArrangements": [
    "Bedroom 1: 1 double bed",
    "Bedroom 2: 1 double bed",
    "Living room: 1 sofa bed"
  ],
  "accessibilityFeatures": [],
  "ratingAccuracy": 4.97,
  "ratingCheckIn": 4.99,
  "ratingCleanliness": 4.96,
  "ratingCommunication": 5,
  "ratingLocation": 4.78,
  "ratingValue": 4.93,
  "neighborhood": "Alcântara, Lisbon",
  "locationSummary": "Converted factories house craft beer spots, while bridge views give this area an industrial edge and a contemporary Lisbon mood.",
  "neighborhoodDescription": "The duplex is situated in a lively street of a genuine portuguese neighboorhood. Rua de Alcantara (Alcantara Street) is a recently reconditioned street with plenty of local, typical shops, mini-market and portuguese corner street coffees.\n   You are at 7 minute walking distance from LX Factory, at 15 minutes from Docas of Alcantara  and  25th of April Bridge(the red bridge) across the Tejo River with Cristo Rei's monument overlooking from the other side of the river.\n   Just in front of the apartment you can take the bus that goes to Lisbon Congress Center in 5 minutes. Also, at two streets distance there is Angola's Consulate.\n   At 10 minutes walking you arrive at Alcantara Mar train station and Oriente Museum.",
  "isExactLocation": true,
  "calendarStart": "2026-10-01",
  "calendarEnd": "2026-11-30",
  "calendarDays": 61,
  "availableDays": 7,
  "nextAvailableDate": "2026-11-13",
  "minNights": 1,
  "availability": [
    {
      "date": "2026-10-01",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-02",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-03",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-04",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-05",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-06",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-07",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-08",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-09",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-10",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-11",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-12",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-13",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-14",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-15",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-16",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-17",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-10-18",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 3,
      "maxNights": 1125
    },
    {
      "date": "2026-10-19",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 3,
      "maxNights": 1125
    },
    {
      "date": "2026-10-20",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 3,
      "maxNights": 1125
    },
    {
      "date": "2026-10-21",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-22",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-23",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-24",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-25",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-26",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-27",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-28",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-29",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-30",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-10-31",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-01",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-02",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-03",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-04",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-05",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-06",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-07",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-08",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-09",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-10",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-11",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-12",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-13",
      "available": true,
      "checkInAllowed": true,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-14",
      "available": true,
      "checkInAllowed": false,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-15",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-16",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-17",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-18",
      "available": true,
      "checkInAllowed": true,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-11-19",
      "available": true,
      "checkInAllowed": false,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-20",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-21",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-22",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-23",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-24",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-25",
      "available": true,
      "checkInAllowed": true,
      "checkOutAllowed": false,
      "minNights": 1,
      "maxNights": 1125
    },
    {
      "date": "2026-11-26",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-27",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-28",
      "available": false,
      "checkInAllowed": false,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-29",
      "available": true,
      "checkInAllowed": true,
      "checkOutAllowed": false,
      "minNights": 2,
      "maxNights": 1125
    },
    {
      "date": "2026-11-30",
      "available": true,
      "checkInAllowed": true,
      "checkOutAllowed": true,
      "minNights": 2,
      "maxNights": 1125
    }
  ]
}
```

Without the calendar option, the seven calendar columns are `null` and `isAvailable` too. With `locale` set to another language, every text (property type, amenities, rules, description when Airbnb translates it) comes in that language.

The **Output** tab offers five views of the same rows: **Overview** (type, size, rating, reviews, Guest favorite, available days, link, photos), **Ratings** (the six category ratings), **Amenities** (by category, flat list, not included, highlights), **House rules** (check-in / check-out, capacity, pets, smoking, events, quiet hours, safety) and **Availability** (calendar summary and day-by-day list).

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

This Actor uses **pay-per-event pricing: you pay a fixed price per listing** saved to your dataset, and nothing else. On the Free plan, listings cost $1.50 per 1,000, so Apify's free monthly credit of $5 covers about 3,333 listings; paid plans pay less per listing, and the price of every plan tier is on the **Pricing tab** of this page.

| What you pay for | How it is counted | Price |
|---|---|---|
| `result` event: one listing saved to your dataset | once per unique listing of the run, capped by `maxResults` | Pricing tab, per plan tier |
| `calendar` event: one month of availability calendar for one listing | once per listing-month, only with `includeCalendar` (`calendarMonths` months per listing) | Pricing tab, per plan tier |
| Run start | a symbolic amount, once per run | Pricing tab |
| Compute, proxies, storage and data transfer | included: no platform usage is passed on to you | — |

The cost of a run is known before you start: 1,000 listings cost 1,000 times the `result` price of your tier, whatever the number of pages fetched. 100 listings with a 3-month calendar cost 100 `result` events plus 300 `calendar` events. A listing takes about two seconds, three with its calendar.

### Limits and behaviour worth knowing

- **No prices.** Airbnb computes the price of a stay in its booking widget after the page loads; this Actor reads the page only, so every price column is `null`. For prices, run the Airbnb Listings Scraper with the same dates and join on `platformListingId`.
- **One listing per URL, removed listings fail.** A URL whose listing was removed, is not public or needs a login yields no row; the run log names it. A run whose listings all fail ends as failed with an explicit message, so that your schedules and integrations notice (no empty successes).
- **Calendar from the current month.** The calendar always starts on the first day of the current month: past days count as unavailable in `availableDays`. Airbnb returns no per-day price in this calendar. `isAvailable` is true when every night between your dates is available and check-in is allowed on the first day; it is `null` when your dates fall outside the fetched months.
- **Texts are user-generated and localized.** `description`, `neighborhoodDescription`, `houseRules`, `checkInTime` and amenity names are Airbnb's texts in the requested `locale`; `petsAllowed`, `smokingAllowed`, `eventsAllowed`, `propertyTypeCode`, `roomType` and the calendar flags are language independent.
- **Host information is dropped on purpose.** The listing page names the host and co-hosts and shows reviews; none of it is read or stored, and `isSuperhost` is only set when Airbnb highlights it on the listing itself.
- **Blocking.** Airbnb listing pages were served to Apify datacenter proxies without challenge in our tests. If a page is unusable, the scraper opens a new session and retries once, then gives up on that listing and reports it in the log. If the calendar request fails, the row is still saved, without calendar. If a whole run is blocked, raise `delayMs` and try again later, or open an issue with your run id: blocking changes are fixed as a priority.
- **Calendar endpoint changes.** The calendar uses a versioned Airbnb API query; when Airbnb retires the version, rows keep being saved without calendar and the log says so. The fix is shipped as a new build; check the Changelog.

### Integrations and API

Start the Actor from Apify Console, schedule it, or call it from the [Apify API](https://docs.apify.com/api/v2) with any language (the **API** tab shows ready-made code for Node.js, Python and curl). Webhooks notify your systems when a run finishes; the dataset can be pulled as JSON, CSV, Excel, XML or RSS, or pushed to Google Sheets, Make, Zapier, n8n, Slack, Airtable, Google Drive and more through the Apify integrations.

### Use it from your AI assistant

Add this Actor as a tool to Claude, ChatGPT, Cursor, VS Code or any MCP client with the Apify MCP server URL below (sign in with your Apify account when asked):

`https://mcp.apify.com?tools=myth84/airbnb-listing-details-scraper`

Then ask in plain words. Copy this prompt and change the details:

```text
Use myth84/airbnb-listing-details-scraper to read this Airbnb listing and tell me its amenities, house rules, check-in time, category ratings and free days over the next 2 months. Input: {"listingUrls": ["https://www.airbnb.com/rooms/21607939"], "includeCalendar": true, "calendarMonths": 2}. Replace the URL with yours; several URLs work in one run.
```

### For AI agents (MCP)

Through the [Apify MCP server](https://docs.apify.com/mcp) this Actor is a tool that answers questions such as *"does this Airbnb listing have a dedicated workspace, a crib and free parking?"*, *"what are the house rules and the check-in time of these three listings?"* or *"is this listing free from 13 to 15 November and what is the minimum stay?"*.

**Minimal input** (every other field keeps its default; raise `maxResults` only when the question needs more rows):

```json
{
  "listingUrls": [
    "https://www.airbnb.com/rooms/21607939"
  ],
  "includeCalendar": true,
  "calendarMonths": 2
}
```

- **Key output fields**: `platformListingId`, `title`, `url`, `propertyType`, `maxGuests`, `bedrooms`, `rating` and the six `ratingCleanliness` … `ratingValue` columns, `reviewCount`, `amenityGroups`, `petsAllowed`, `checkInTime`, `availableDays`, `nextAvailableDate`, `minNights`, `isAvailable`. Every column is always present, in a fixed order; `null` means Airbnb did not show the value. The full list is in *What data does Airbnb Listing Details Scraper extract?* above.
- **Use it when** you already have Airbnb listing URLs or ids and need what the listing page shows: description, amenities by category, house rules, category ratings, review count, photos, location, availability. Pass `listingUrls` (a few URLs), optionally `checkIn` / `checkOut` and `includeCalendar` with a small `calendarMonths`.
- **Do not use it for** prices (use the Airbnb Listings Scraper with dates), searches by location (same), host profiles, guest reviews, booking or anything behind a login: it does not collect personal data and only reads public listing pages.
- **Cost per 1,000 results**: 1,000 `result` events, $1.50 per 1,000 on the Free plan and less on paid plans (Pricing tab); nothing else is charged; with `includeCalendar`, add one `calendar` event per listing-month.
- **Typical time**: about two seconds per listing, three with its calendar: 10 listings in under half a minute.

### Alternatives and switching

- **Official API.** Airbnb does not offer an open API for listing pages: its API is reserved to selected partners. This Actor reads what any visitor sees on a public listing page (description, amenities, rules, ratings, calendar) with no account, no keys and no approval.
- **Your own scraper.** Nothing to build or maintain: sessions, retries, calendar requests and Airbnb page changes are handled for you. The columns stay the same from run to run, a run whose listings all fail ends as failed with an explicit message instead of succeeding empty, and a scheduled test run catches Airbnb changes early.
- **Another scraper from the Store.** What you can count on here: `maxResults` is a hard cap, the run stops at that number of listings and you are never charged for more, and the calendar months are charged only when you ask for the calendar. The input names differ from one Actor to the next; the usual ones map to this Actor as follows:

| Usual input | Here | Note |
|---|---|---|
| `startUrls`, `urls`, `listingIds` | `listingUrls` | Listing URLs or bare listing ids |
| `maxItems`, `limit` | `maxResults` | Listings per run, never charged beyond |
| `calendar`, `months` | `includeCalendar`, `calendarMonths` | 1 to 12 months, charged per listing-month |
| `checkin`, `checkout` | `checkIn`, `checkOut` | YYYY-MM-DD, to check that your dates are free |
| `adults`, `children`, `infants`, `pets` | `adults`, `children`, `infants`, `pets` | Guests of the stay |
| `currency`, `language` | `currency`, `locale` | ISO 4217 code, Airbnb language code |
| `proxy` | `proxyConfiguration` | Apify proxies, included in the price |

### FAQ

#### Does Airbnb Listing Details Scraper collect personal data?

No. The scraper reads the public listing page and keeps nothing about hosts or guests: no names, photos, profile ids, contact details, "hosted by" texts or review texts. It outputs listing facts, the average and category ratings, the number of reviews and the Guest favorite distinction of the listing. Every row goes through a privacy filter before it is saved, which also removes e-mail addresses from descriptions.

#### Is it legal to scrape Airbnb?

The Actor only reads pages that Airbnb serves to any visitor without an account, and it stores no personal data. Scraping public data is generally lawful, but you are responsible for how you use the results and for complying with Airbnb's terms of service and the laws that apply to you (including copyright on listing texts and photos). Use the data for analysis, not to republish listings.

#### Why are the prices empty?

Airbnb loads the price of a stay through a booking query after the page is displayed, not in the page itself. This Actor deliberately reads the page only, which keeps it cheap and reliable. For prices, run the Airbnb Listings Scraper with the same dates: its rows share the first columns of this schema and join on `platformListingId`. Here `priceTotal`, `taxesIncluded` and `priceTotalAllIn` are always `null`; there, `priceTotal` is the total Airbnb displays and `priceTotalAllIn` the total with taxes, the column to compare across platforms (filled on European Airbnb sites, whose totals include the taxes).

#### How does the availability calendar work?

With `includeCalendar`, the Actor makes one extra request per listing and gets up to 12 months of days starting with the current month. Each day says whether the night is available, whether a stay may start or end that day and the minimum and maximum stay. The summary columns give the number of available days, the next available date and the smallest minimum stay; with `checkIn` / `checkOut`, `isAvailable` tells whether your stay is free. Each month of each listing is one `calendar` event.

#### What if my runs get blocked? Do I need proxies?

Apify datacenter proxies (the default) work for Airbnb listing pages and are included in the price. If a run reports blocked pages, increase `delayMs` and try again later, or bring your own proxy URLs; persistent blocking is fixed as a priority, open an issue with your run id.

#### Which languages and sites are supported?

Any Airbnb language (`locale`) and any Airbnb country site (`domain`). Descriptions, amenities, rules and property types come in the requested language when Airbnb translates them; the flags (`petsAllowed`, `smokingAllowed`, `eventsAllowed`), the property type code and the calendar are the same in every language.

#### Where do the listing URLs come from?

From your browser, from the `url` column of the Airbnb Listings Scraper, or from any list of Airbnb listing ids. Any URL of the form `https://www.airbnb.<tld>/rooms/<id>` works, query parameters included; numeric ids work too.

#### How fresh is the data and how often should I run it?

Every run fetches the live listing page and calendar. Descriptions and amenities change rarely, availability changes daily: schedule the Actor as often as your use case needs and compare runs by `platformListingId`.

#### How do I export or integrate the results?

From the run's Output tab (JSON, CSV, Excel, XML, RSS) or automatically: Apify API, webhooks, scheduled runs and integrations with Google Sheets, Make, Zapier, n8n, Slack and others. AI agents can call the Actor through the Apify MCP server.

#### Where do I get support?

Open an issue in the **Issues** tab of this Actor with your run id and input. Bugs and page-layout changes are fixed as a priority; feature requests (prices, other platforms of the travel studio) are welcome.

### More scrapers by Flatrow Data Studio

The travel scrapers of the studio share the same core columns, so stays from several platforms land in one table; the search scrapers fill `priceTotalAllIn`, the total of the stay with taxes and fees, to compare prices across platforms with the same rule (`null` when a platform does not show the taxes):

- [Airbnb Listings Scraper & Price Tracker](https://apify.com/myth84/airbnb-listings-scraper): Airbnb prices, ratings, review counts and locations for any place and dates, up to 50 destinations per run, with price monitoring.
- [Booking.com Hotels Scraper & Price Tracker](https://apify.com/myth84/booking-hotels-scraper): Booking.com hotel prices for your dates with the excluded taxes, review scores and stars, search URLs and price monitoring.
- [Expedia Hotels Scraper: Prices & Ratings](https://apify.com/myth84/expedia-hotels-scraper): Expedia hotel prices per night and for the whole stay, guest ratings and review counts, to compare with the other platforms.

Did this scraper give you the data you needed? A rating on its Store page helps other people find it. For a bug or a missing field, open an issue in the **Issues** tab.

### Legal note

This Actor reads publicly available Airbnb listing pages without logging in and collects no personal data. You are responsible for your use of the data and for complying with Airbnb's terms and the laws that apply to you.

Not affiliated with, endorsed or sponsored by Airbnb. Airbnb is a trademark of Airbnb, Inc.

# Changelog

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

# Actor input Schema

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

One Airbnb listing per line: a listing URL copied from your browser (<code>https://www.airbnb.com/rooms/21607939</code>, any Airbnb country site) or just the numeric listing id. Duplicates are fetched once. Search result URLs are not accepted: use the Airbnb Listings Scraper for searches.

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

Optional check-in date, YYYY-MM-DD, e.g. <code>2026-12-01</code>, given with Check-out. Dates are written into the listing URL of each row and, when the calendar is requested, the row says whether the stay is available (isAvailable). Leave both empty when you only need the listing details.

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

Check-out date, YYYY-MM-DD, after the check-in date, e.g. <code>2026-12-03</code>. Required when a check-in date is given.

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

Number of adults, 0 to 16, written into the listing URL of each row and counted in the guests column. Default 2: a couple, the occupancy of our validation runs.

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

Number of children aged 2 to 12, 0 to 15, sent with the listing page request and counted in the guests column. Default 0: adults only.

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

Number of infants under 2, 0 to 5, sent with the listing page request (not counted in the guests column). Default 0: no infant.

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

Number of pets travelling with you, 0 to 5, sent with the listing page request (not counted in the guests column). Default 0: no pet.

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

Also fetch the availability calendar of each listing (one extra request per listing): a day-by-day list with availability, check-in / check-out permission and minimum stay, plus summary columns (available days, next available date, whether your dates are free). Charged per listing-month, see the Pricing tab. Default off: the listing details alone, one request and one charge per listing.

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

Number of months of calendar to fetch, starting with the current month, 1 to 12, e.g. <code>12</code> for a year ahead. Only used when the calendar is included; each month is charged. Default 3: the current month and the next two, three calendar events per listing.

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

Stop after this many listings saved; you are never charged for more. Default 100: caps the bill of a long list of URLs. The form is prefilled with 50, more than the three prefilled listings: raise it when you paste more than 50 URLs.

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

ISO 4217 code sent with the listing page and calendar requests and recorded in the currency column, e.g. USD, EUR or GBP. Pick one from the list or type any code supported by Airbnb. Default USD: listing pages and the calendar carry no price, so the currency only fills the currency column.

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

Airbnb language code for the description, amenities, rules and property type, e.g. <code>en</code>, <code>fr</code>, <code>es</code> or <code>en-GB</code>: two lowercase letters, optionally followed by a region. Default en: English texts, the same words for every listing.

## `domain` (type: `string`):

Airbnb site to query, e.g. <code>www.airbnb.fr</code> or <code>www.airbnb.co.uk</code>. Listing URLs in the output use this domain, whatever the site of the pasted URLs (a listing id is the same on every site). Default www.airbnb.com: the international site, used by our validation runs.

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

Apify datacenter proxies (automatic) are enough for Airbnb listing pages. If your runs get blocked, switch to Apify residential proxies. Selecting a proxy country records it in the viewCountryCode column. You can also provide your own proxy URLs. Default: Apify datacenter proxies, included in the price.

## `maxRequests` (type: `integer`):

Safety cap on the number of requests in one run (one per listing, plus one per listing when the calendar is included). Default 500: room for the 100 listings of the default maximum, with their calendars and retries.

## `delayMs` (type: `integer`):

Pause between two listings, in milliseconds. Increase it if you get blocked; 0 disables the pause. Default 800: steady pacing that worked in our validation and control runs.

## `debugStoreHtml` (type: `boolean`):

Debugging only: save every fetched page and calendar response in the run's key-value store. Slows the run down and uses storage. Default off: no response is stored.

## Actor input object example

```json
{
  "listingUrls": [
    "https://www.airbnb.com/rooms/21607939",
    "https://www.airbnb.com/rooms/29990558",
    "https://www.airbnb.com/rooms/13376882"
  ],
  "adults": 2,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "includeCalendar": false,
  "calendarMonths": 3,
  "maxResults": 50,
  "currency": "USD",
  "locale": "en",
  "domain": "www.airbnb.com",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRequests": 500,
  "delayMs": 800,
  "debugStoreHtml": false
}
```

# Actor output Schema

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

All extracted listings as dataset items, one flat row per listing. Append ?format=csv or ?format=xlsx for spreadsheets. The Overview view is selected by default.

## `runStats` (type: `string`):

Requests made, bytes transferred, blocked responses, listings pushed, calendars fetched and failed, and the estimated platform cost of the run.

# 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 = {
    "listingUrls": [
        "https://www.airbnb.com/rooms/21607939",
        "https://www.airbnb.com/rooms/29990558",
        "https://www.airbnb.com/rooms/13376882"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("myth84/airbnb-listing-details-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 = {
    "listingUrls": [
        "https://www.airbnb.com/rooms/21607939",
        "https://www.airbnb.com/rooms/29990558",
        "https://www.airbnb.com/rooms/13376882",
    ],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("myth84/airbnb-listing-details-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 '{
  "listingUrls": [
    "https://www.airbnb.com/rooms/21607939",
    "https://www.airbnb.com/rooms/29990558",
    "https://www.airbnb.com/rooms/13376882"
  ],
  "maxResults": 50
}' |
apify call myth84/airbnb-listing-details-scraper --silent --output-dataset

```

## MCP server setup

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