# Airbnb Listing Scraper: Rooms by URL (`deepmine/airbnb-listing-scraper`) Actor

Airbnb listing scraper by URL: paste Airbnb rooms links or listing IDs, pick your dates, and get one row per listing: the price for your stay, the exact total with taxes and fees, ratings, amenities, house rules, host and photos. No login.

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

## Pricing

from $0.99 / 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 Listing Scraper

Airbnb listing scraper by URL: paste Airbnb rooms links, pick your dates, and get one row per listing with the price for your stay, the exact total with taxes and fees, ratings, amenities, house rules, host and photos.

| 🏠 Name | 🛏️ Room Type | 💵 Price | 🧾 Total With Taxes | 📅 Check-in | ⭐ Rating | 💬 Reviews | 👥 Guests |
|---|---|---|---|---|---|---|---|
| [Green Alfama Lovely View Apartment](https://www.airbnb.com/rooms/23479454) | Entire home/apt | $516 (5 nights) | $560.08 | 2027-01-31 | 4.8 | 399 | 4 |
| [Lisboa Bica Apartment 28 Tram, Fast Internet, AC](https://www.airbnb.com/rooms/36697362) | Entire home/apt | $488 (5 nights) | $532.18 | 2027-01-31 | 4.91 | 385 | 2 |
| [The Alfama Hideaway - Next to River & Panteão](https://www.airbnb.com/rooms/1701622328401155281) | Entire home/apt | $540 (5 nights) | $584.60 | 2027-01-31 | 5 | 13 | 4 |

<sub>Collected 2026-11-02 from the prefilled run (5 Lisbon listings, 2 adults, a 5-night stay 90 days out).</sub>

**$1.49 per 1,000 listings on the Starter plan** ($1.75 Free, $1.25 Scale, $0.99 Business). The prefilled run (5 listings) costs about $0.007. No start fee and no add-on fees: the exact total, the calendar, reviews and host profiles are included. Dead links are free.

### What you get

- **Price for your dates**: total, per night, the price before a discount and Airbnb's price breakdown, for the stay and guests you ask about. A link's own `check_in`, `check_out` and guests win over the form.
- **Exact total with taxes and fees**: Airbnb's checkout quote: total, taxes, every price line (Airbnb usually folds cleaning and service fees into the stay price; `cleaningFee` and `serviceFee` fill when it lists them apart), the cancellation policy and whether the stay can be booked.
- **Why a stay can't be booked**: when Airbnb refuses your dates, the row keeps them and gives Airbnb's reason in `unavailableReason`, so a booked-out listing never reads as a missing price.
- **Ratings**: overall rating, review count, the six category ratings, Guest favorite.
- **The listing**: name, room and property type, guests, bedrooms, beds, baths, full description (text and HTML), every amenity with Airbnb's group for it, highlights, house rules, safety notes, every photo with its caption and orientation, coordinates, neighborhood, area notes and the place path.
- **The host**: name, profile link and photo, Superhost, verified, months hosting, rating and reviews, response rate and time, about, highlights, co-hosts with their photos.
- **Optional, same price**: the availability calendar (up to 12 months), the newest reviews (up to 50 per listing) and the host's public profile.

### How to use it

1. **🔗 Airbnb listing links**: paste links such as `https://www.airbnb.com/rooms/13241983`. Any Airbnb domain works. Have only the numbers? Use **🔢 Listing IDs**.
2. **📅 Check-in** and **Check-out**: a date (`2026-12-04`) or how far ahead (`+30 days`). Without dates you still get the whole record, with no price: Airbnb only prices a stay.
3. **👥 Adults**: the price fits the group.

Short-notice dates are often booked: when you want a price for every listing, pick a stay further out, or turn on the availability calendar to see each listing's free days. Prices come in the currency you pick (44 currencies); the language you pick translates the listing texts (27 languages).

This Actor reads listing links only. To find listings by city or map, use [Airbnb Scraper](https://apify.com/deepmine/airbnb-scraper).

### Output fields

Every row has the same keys in this order; unknown values are `null`. Tables: 📊 Overview, 💵 Prices & Booking, 📈 Stats, 👤 Hosts, 📝 Details, 📅 Availability & Reviews.

`thumbnail`, `name`, `roomType`, `propertyType`, `url`, `price`, `pricePerNight`, `originalPrice`, `currency`, `nights`, `checkIn`, `checkOut`, `priceLabel`, `priceBreakdown`, `totalPrice`, `taxes`, `cleaningFee`, `serviceFee`, `priceItems`, `isAvailable`, `unavailableReason`, `canInstantBook`, `cancellationPolicy`, `cancellationPolicyName`, `rating`, `reviewsCount`, `ratingAccuracy`, `ratingCleanliness`, `ratingCheckIn`, `ratingCommunication`, `ratingLocation`, `ratingValue`, `isGuestFavorite`, `isSuperhost`, `personCapacity`, `bedrooms`, `beds`, `bathrooms`, `subDescription`, `subDescriptionItems`, `descriptionSnippet`, `description`, `descriptionHtml`, `descriptionOriginalLanguage`, `shareTitle`, `location`, `neighborhood`, `locationSummary`, `locationDetails`, `breadcrumbs`, `latitude`, `longitude`, `isExactLocation`, `amenities`, `amenitiesNotIncluded`, `amenityGroups`, `highlights`, `houseRules`, `petsAllowed`, `safetyAndProperty`, `hostName`, `hostUrl`, `hostPicture`, `hostIsVerified`, `hostMonthsHosting`, `hostRating`, `hostReviewsCount`, `hostResponseRate`, `hostResponseTime`, `hostAbout`, `hostHighlights`, `coHosts`, `coHostIds`, `coHostPictures`, `hostLivesIn`, `hostLanguages`, `hostWork`, `hostSchool`, `hostProfileFields`, `hostVerifications`, `hostVerifiedSince`, `hostMonthsOnAirbnb`, `hostListingsCount`, `hostGuestReviewsCount`, `hostListings`, `hostRecentReviews`, `images`, `imageCaptions`, `imageOrientations`, `imageCount`, `isNewListing`, `isLuxe`, `listingTier`, `pageTitle`, `metaDescription`, `availability`, `reviews`, `id`, `hostId`, `androidLink`, `iosLink`, `searchQueries`, `locale`, `scrapedAt`.

### FAQ

**Does it need an Airbnb account?** No. It reads what Airbnb shows logged-out visitors, with no cookies or login.

**Why is the price empty on some rows?** You gave no dates, or Airbnb can't book that stay: `isAvailable` is false and `unavailableReason` gives Airbnb's words. Try later dates, or a stay that meets the listing's minimum nights.

**Am I charged for dead links?** No. They are named in the run's status message and cost nothing. A listing that is unavailable for your dates is still a row with its full record, and is charged.

**Can I schedule it or call it from code?** Yes: from the Apify API, a schedule, Zapier, Make or n8n. Use `startUrls` with `{"url": "..."}` items, `listingIds` with plain IDs, or both.

Happy with the data? Please leave a review: it helps other buyers find this Actor.

# Actor input Schema

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

Links to Airbnb listings, e.g. https://www.airbnb.com/rooms/13241983. A link's own check_in, check_out and guests win over the form. Any Airbnb domain works.

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

Prices and the exact total are for this stay, e.g. 2026-12-04 or +30 days. Empty = no price, the rest of the row is the same.

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

Last day of the stay, e.g. 2026-12-07 or +33 days. Empty with a check-in = a 1-night stay.

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

Guests aged 13 or over: the price fits the group, e.g. 2. Empty = 1.

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

Ages 2 to 12, e.g. 2. Empty = none.

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

Under 2. Empty = none.

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

The price includes any pet fee, e.g. 1. Empty = no pets.

## `listingIds` (type: `array`):

The number in a listing link, e.g. 13241983. One per line.

## `includeTaxesAndFees` (type: `boolean`):

Airbnb's checkout quote for each dated row: total with taxes, each price line, the cancellation policy and whether the stay is bookable.

## `availabilityMonths` (type: `integer`):

Each listing's booking calendar for this many months from today: per day available, can check in / out, min and max nights, e.g. 3. 0 = no calendar.

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

The newest reviews of each listing with rating, text, language, reviewer and host response, e.g. 10. 0 = none (the rating and review count are always there).

## `enrichHostProfiles` (type: `boolean`):

Each host's public profile: where they live, languages, work and the rest of their profile, ID verifications, time on Airbnb, how many listings they run (with a list), guest review count and the newest reviews guests left them. One extra request per host (not per listing). Private profiles are skipped. Co-hosts show by name and photo only: Airbnb doesn't link their profiles for logged-out visitors.

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

Currency of every price.

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

Language of the listing texts: description, amenities, house rules, highlights and host texts (Airbnb translates them when it can). Prices and numbers read the same in every language.

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

Leave as is: Apify's datacenter proxy works for Airbnb.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.airbnb.com/rooms/36697362"
    },
    {
      "url": "https://www.airbnb.com/rooms/1701622328401155281"
    },
    {
      "url": "https://www.airbnb.com/rooms/1320256957672510175"
    },
    {
      "url": "https://www.airbnb.com/rooms/1142938"
    },
    {
      "url": "https://www.airbnb.com/rooms/23479454"
    }
  ],
  "checkIn": "+90 days",
  "checkOut": "+95 days",
  "adults": 2,
  "includeTaxesAndFees": true,
  "availabilityMonths": 0,
  "maxReviews": 0,
  "enrichHostProfiles": false,
  "currency": "USD",
  "locale": "en",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "startUrls": [
        {
            "url": "https://www.airbnb.com/rooms/36697362"
        },
        {
            "url": "https://www.airbnb.com/rooms/1701622328401155281"
        },
        {
            "url": "https://www.airbnb.com/rooms/1320256957672510175"
        },
        {
            "url": "https://www.airbnb.com/rooms/1142938"
        },
        {
            "url": "https://www.airbnb.com/rooms/23479454"
        }
    ],
    "checkIn": "+90 days",
    "checkOut": "+95 days",
    "adults": 2,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/airbnb-listing-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 = {
    "startUrls": [
        { "url": "https://www.airbnb.com/rooms/36697362" },
        { "url": "https://www.airbnb.com/rooms/1701622328401155281" },
        { "url": "https://www.airbnb.com/rooms/1320256957672510175" },
        { "url": "https://www.airbnb.com/rooms/1142938" },
        { "url": "https://www.airbnb.com/rooms/23479454" },
    ],
    "checkIn": "+90 days",
    "checkOut": "+95 days",
    "adults": 2,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/airbnb-listing-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 '{
  "startUrls": [
    {
      "url": "https://www.airbnb.com/rooms/36697362"
    },
    {
      "url": "https://www.airbnb.com/rooms/1701622328401155281"
    },
    {
      "url": "https://www.airbnb.com/rooms/1320256957672510175"
    },
    {
      "url": "https://www.airbnb.com/rooms/1142938"
    },
    {
      "url": "https://www.airbnb.com/rooms/23479454"
    }
  ],
  "checkIn": "+90 days",
  "checkOut": "+95 days",
  "adults": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/airbnb-listing-scraper --silent --output-dataset

```

## MCP server setup

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