# Airbnb Scraper - Listings, Prices, Ratings & Hosts (`atesen-software/airbnb-scraper`) Actor

Scrape Airbnb search results by location or search URL: listing name, type, total and nightly price, discounts, rating, review count, beds, badges, coordinates and photos. Optional full details: description, amenities, rating breakdown, host, Superhost, house rules. $1.50 per 1,000 listings.

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

## Pricing

$1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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, Ratings & Hosts

Scrape **Airbnb search results** for any city, area or address, or for any Airbnb search URL with your filters. For each listing you get the **name, type, total stay price, nightly price, discount (original price), price breakdown, rating, review count, bedrooms and beds, badges (Guest favorite), coordinates and photos**. Turn on full details to also get the **full description, all amenities, the 6 rating categories (cleanliness, accuracy, check-in, communication, location, value), host name, Superhost status, response rate and time, house rules and all photos**.

- **$1.50 per 1,000 listings** (full details included, no extra charge). Status rows are free. The most popular alternative costs $1.50 per 1,000 ($6 with details).
- Set **check-in / check-out dates, guests, price range, bedrooms and place type**, and choose the **currency** (USD, EUR, TRY, GBP...).
- Locations are resolved the same way as on airbnb.com ("Kas, Antalya" finds Kaş, Türkiye). Listing URLs and IDs also work.
- No login, no browser, 256 MB.

### What you can use it for

- **Short-term rental market research**: prices, occupancy-relevant ratings and supply per city or district.
- **Revenue management and pricing**: compare your listing with competitors for the same dates.
- **Real estate investment**: estimate nightly rates before buying.
- **Travel and lead lists**: hosts, Superhosts and top-rated places in an area.

### Input

| Field | What it does |
|---|---|
| `locations` | City, area or address, e.g. `Istanbul`, `Lisbon, Portugal` |
| `startUrls` | Airbnb search URLs (all website filters are kept), listing URLs (`/rooms/...`) or listing IDs |
| `checkIn`, `checkOut` | Optional stay dates. With dates, prices are exact totals for the stay |
| `adults`, `minPrice`, `maxPrice`, `minBedrooms`, `roomType` | Search filters |
| `currency` | Price currency, default USD |
| `maxListingsPerSearch` | Listings per search (18 per page, default 50) |
| `includeDetails` | Open every listing page for description, amenities, ratings, host and rules |

Airbnb shows **at most 15 pages (about 270 listings) per search**. For more, run several searches with different price ranges or smaller areas. You get a free `limit` status row when a search hits this cap.

### Output example

```json
{
  "type": "listing",
  "listingId": "48548949",
  "url": "https://www.airbnb.com/rooms/48548949",
  "name": "Cutest Studio Apt in Sultanahmet w/Great Sea View",
  "title": "Apartment in Istanbul",
  "rating": 4.84,
  "reviewsCount": 252,
  "price": 338,
  "priceQualifier": "for 5 nights",
  "nights": 5,
  "pricePerNight": 72.97,
  "currency": "USD",
  "checkIn": "2026-11-09",
  "checkOut": "2026-11-14",
  "bedroomsText": "1 bedroom",
  "bedsText": "1 double bed",
  "badges": [],
  "latitude": 41.0051,
  "longitude": 28.9811,
  "imageUrl": "https://a0.muscache.com/im/pictures/hosting/Hosting-48548949/original/64872e60-2214-4a42-aad7-19bd06cca466.png",
  "resolvedLocation": "Istanbul, Türkiye",
  "detailed": false
}
```

With full details you also get `description`, `amenities`, `amenitiesNotIncluded`, `propertyType`, `roomType`, `personCapacity`, `ratingCleanliness`, `ratingAccuracy`, `ratingCheckin`, `ratingCommunication`, `ratingLocation`, `ratingValue`, `isSuperhost`, `hostName`, `hostHighlights`, `hostResponseRate`, `hostResponseTime`, `houseRules` and `images`.

### Status rows (free)

Problems never fail the run. Instead you get a free `status` row:

- `invalid_input`: not a location, Airbnb search URL or listing URL
- `location_not_found`: Airbnb does not know the location
- `no_results`: the search returned nothing
- `not_found`: the listing was removed
- `limit`: the search reached Airbnb's 15-page cap
- `http_error`: Airbnb did not answer, so try again later

### Pricing

Pay per event: **$0.0015 per result** ($1.50 per 1,000 saved rows). Each saved data row is one `result` event. Status rows, error rows and empty lookups are not charged. The run stops when it reaches the maximum cost per run. No Apify proxy and no login.

# Actor input Schema

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

City, area or address as you would type it on Airbnb, e.g. "Istanbul", "Lisbon, Portugal", "Brooklyn, NY".

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

Airbnb search URLs (https://www.airbnb.com/s/...) with any filters set on the website, or listing URLs (/rooms/123...). Listing IDs also work.

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

Optional. With dates you get the exact total price for the stay. Without dates Airbnb picks flexible dates.

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

Optional, use together with check-in.

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

Number of adult guests.

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

Optional, in the chosen currency.

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

Optional, in the chosen currency. 0 = no limit.

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

Optional. 0 = any.

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

No description

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

Three-letter currency code for prices, e.g. "USD", "EUR", "TRY", "GBP". Default USD.

## `maxListingsPerSearch` (type: `integer`):

Airbnb shows up to about 270 listings per search (15 pages). Split by price or area for more.

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

Open every listing: full description, all amenities, 6 rating categories, host name and Superhost, response rate, house rules, all photos. No extra charge (see Pricing).

## `maxConcurrency` (type: `integer`):

No description

## Actor input object example

```json
{
  "locations": [
    "Istanbul"
  ],
  "adults": 1,
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "roomType": "any",
  "maxListingsPerSearch": 50,
  "includeDetails": false,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `allFields` (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": [
        "Istanbul"
    ]
};

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

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

```

## MCP server setup

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