# Airbnb Scraper - Listings, Prices, Hosts & Amenities (`acebuilds/airbnb-listings-scraper`) Actor

Scrape Airbnb listings by place or link: price for your dates, rating breakdown, host, amenities, house rules, photos and coordinates. Reach past the 270-listing search limit, and track price changes with a watch. No login or browser.

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

## Pricing

from $1.00 / 1,000 listing with full data

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 - Listings, Prices, Hosts & Amenities

Search Airbnb by place and get **each listing's price for your dates plus its full data**: description, amenities, host, house rules, rating breakdown, every photo and coordinates. No login and no browser.

### What you can do

- 🔎 **Search** by place, Airbnb search link, or specific listing links
- 📅 **Dates and guests**: real totals for your stay, in your currency
- 🎯 **Filter** by nightly price, bedrooms, beds, bathrooms and room type
- 🏠 **Full listing data** or a cheaper **search-card only** mode
- 📈 **Past the search limit**: one Airbnb search stops at 15 pages (about 270 listings), so larger requests are re-run across price bands automatically
- 🔔 **Price watch**: schedule fixed dates and get only new listings and price changes. Unchanged listings are free

### What is not included

**Reviews and day-by-day availability calendars are not included**, because they are not on the pages this Actor reads. You do get review counts and the rating breakdown.

### Input examples

**Paris for three nights:**

```json
{ "locations": ["Paris"], "checkIn": "2027-02-10", "checkOut": "2027-02-13", "adults": 2, "maxResults": 100 }
```

**Whole homes with 2+ bedrooms, search cards only:**

```json
{ "locations": ["Austin, TX"], "roomType": "entireHome", "minBedrooms": 2, "includeDetails": false, "maxResults": 1000 }
```

**Competitor price tracking** (schedule it daily):

```json
{ "locations": ["Lisbon"], "checkIn": "2027-06-10", "checkOut": "2027-06-13", "adults": 2, "maxResults": 200, "watchName": "lisbon-june" }
```

### Output

```json
{
  "id": "1578971251598843752",
  "url": "https://www.airbnb.com/rooms/1578971251598843752",
  "name": "New Bayswater/Hyde Park Studio Zone1+Wi-fi",
  "price": 448,
  "priceText": "$448 for 3 nights",
  "pricePerNight": 149.03,
  "nights": 3,
  "currency": "USD",
  "rating": 4.87,
  "reviewsCount": 46,
  "ratingCategories": { "cleanliness": 4.9, "accuracy": 4.9 },
  "isGuestFavorite": true,
  "guests": 2,
  "bedrooms": 0,
  "beds": 1,
  "bathrooms": 1,
  "amenities": ["Wifi", "Kitchen", "Hair dryer"],
  "houseRules": ["No pets", "Quiet hours: 10:00 PM - 7:00 AM"],
  "host": { "name": "Jan", "isVerified": true, "rating": 4.66, "reviewsCount": 2885, "yearsHosting": 1, "responseRate": 99 },
  "latitude": 51.5115,
  "longitude": -0.1864,
  "imageCount": 38
}
```

Dataset views: **Listings**, **Hosts and amenities**, **Price watch**.

### Good to know

- **Hotels listed on Airbnb** have a shorter page: the description is a short summary, and beds and bathrooms can be empty.
- **Prices come from search results.** A listing link on its own has no price; search by place with dates for prices.
- **Without dates, Airbnb chooses sample dates**, so set dates when you compare prices.
- A listing whose page fails to load is still delivered from its search card, at the lower price.
- If Airbnb refuses requests during a run, the run stops early and what was not delivered is not charged.
- A row limit is shared evenly across your searches, and what one search leaves unused goes to the next.
- Each run has a small start fee, including a run that stops on invalid input.

### Pricing

Pay per listing delivered, with full data or search-card only. You can cap any run with Apify's maximum cost per run.

### Disclaimer

Unofficial; not affiliated with or endorsed by Airbnb. Collects publicly available listing information. Hosts' personal details are limited to what Airbnb shows publicly. Use the data in line with Airbnb's terms and applicable law.

# Actor input Schema

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

City, area or address, such as Paris or Austin, TX. You can also paste an Airbnb search link.

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

Airbnb listing links or IDs, for specific listings. Prices for these come only from a search, so use Places if you need prices.

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

Date like 2027-02-10. Needed for a real total price.

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

Date like 2027-02-13.

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

Number of adults.

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

Number of children.

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

Number of infants.

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

Number of pets.

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

Three-letter code, such as USD, EUR or GBP.

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

In your currency. 0 means any.

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

In your currency. 0 means any.

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

0 means any.

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

0 means any.

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

0 means any.

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

Only this type.

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

On: description, amenities, host, house rules, rating breakdown and all photos. Off: search-card data only, at a lower price.

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

Limit for the whole run, not per place. 0 means no limit.

## `watchName` (type: `string`):

Name a watch and schedule it with fixed dates: later runs return only new listings and price changes.

## `changesOnly` (type: `boolean`):

With a watch: skip unchanged listings, which are not charged.

## Actor input object example

```json
{
  "locations": [
    "Paris"
  ],
  "adults": 0,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "currency": "USD",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "minBeds": 0,
  "minBathrooms": 0,
  "roomType": "",
  "includeDetails": true,
  "maxResults": 50,
  "changesOnly": true
}
```

# Actor output Schema

## `results` (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 = {
    "locations": [
        "Paris"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("acebuilds/airbnb-listings-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 = { "locations": ["Paris"] }

# Run the Actor and wait for it to finish
run = client.actor("acebuilds/airbnb-listings-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 '{
  "locations": [
    "Paris"
  ]
}' |
apify call acebuilds/airbnb-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,acebuilds/airbnb-listings-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/24cjNFErWDzgfOahx/builds/9lwO2EKLDE7PzGcso/openapi.json
