# Airbnb Scraper (`neuro-scraper/airbnb-scraper`) Actor

Airbnb Scraper SD - Airbnb Scraper is a travel data tool that extracts public Airbnb stays by location and dates: price for your dates, rating, reviews count, photos, coordinates, plus optional details - description, amenities, host, house rules and cancellation.

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

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 - Airbnb listings with prices, ratings and details

The Airbnb Scraper extracts public Airbnb stays for any location and dates: name, type, price for your
dates (with the nightly breakdown and discounts), rating, reviews count, coordinates, badges and photos.
With details on it adds the description, rooms and beds, amenities, host (Superhost, rating, years hosting),
house rules, category ratings, all photos, availability, instant book and cancellation options. No Airbnb
account or login is used.

#### Input

| Field | Type | Default | Meaning |
|---|---|---|---|
| `locations` | list | `Lisbon, Portugal` (prefill) | Places as you would search on Airbnb |
| `startUrls` | list | empty | Airbnb search URLs (`/s/.../homes?...`) or listing URLs (`/rooms/<id>`) |
| `checkIn`, `checkOut` | date | none | YYYY-MM-DD; prices are totals for these dates |
| `adults`, `children` | integer | 2, 0 | Guests |
| `currency` | text | `USD` | Price currency (EUR, GBP, ...) |
| `priceMin`, `priceMax` | integer | 0 (off) | Airbnb's own price filter |
| `maxItems` | integer | `50` | Total listings to return |
| `includeDetails` | boolean | `false` | Open each listing page (and its price for your dates) |
| `proxyConfiguration` | proxy | Apify RESIDENTIAL | Proxy used for Airbnb |

#### Output (one row per listing)

| Field | Meaning |
|---|---|
| `id`, `url`, `name`, `title`, `subtitle` | Listing id, link, listing name, card title, type and area |
| `rating`, `reviewsCount`, `ratingText` | Average rating and number of reviews |
| `price`, `originalPrice`, `priceText`, `priceQualifier`, `priceBreakdown`, `currency` | Total for the stay, price before discount, as shown, "for 3 nights", nightly lines and fees |
| `checkIn`, `checkOut`, `nights`, `adults` | The dates and guests the price is for |
| `latitude`, `longitude`, `badges`, `photos`, `propertyId` | Map position, badges (Guest favorite, Featured hotel...), card photos, hotel property id |
| details: `description`, `propertyType`, `roomType`, `overview`, `personCapacity`, `bedrooms`, `beds`, `bathrooms`, `locationName`, `isSuperhost`, `isGuestFavorite`, `categoryRatings`, `host`, `amenities`, `amenitiesUnavailable`, `houseRules`, `highlights`, `detailPhotos`, `available`, `canInstantBook`, `cancellationOptions`, `unavailableReason` | Only with `includeDetails` or listing URLs; availability and cancellation need dates |
| `source`, `page`, `scrapedAt` | Input that produced the row, search page, time |

#### Measured limits (2026-10-03, local runs)

- 18 listings per page and 15 pages: at most 270 listings per search. Use several locations, neighborhoods or
  price ranges for more.
- 50 listings in 6 s, 60 in 8 s; with details about 3 s per listing (room page + price call).
- Without dates Airbnb prices the cards for sample dates it chooses; those dates are in `checkIn`/`checkOut`.
- Room-page prices use Airbnb's own price query, whose id is read from Airbnb's JavaScript on every run.
- Tested without proxy from one residential IP; no bot challenge was met. A challenge is never solved: the
  Actor retries on a new IP, then skips the target with an error in the log.

#### Example

```json
{"locations": ["Paris, France"], "checkIn": "2026-11-10", "checkOut": "2026-11-13", "currency": "EUR", "maxItems": 100}
```

# Actor input Schema

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

One per line, as you would search on Airbnb: a city with its country (Lisbon, Portugal), a region or a neighborhood (Shoreditch, London).

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

Search URLs copied from Airbnb with your filters (https://www.airbnb.com/s/Paris--France/homes?...) or listing URLs (https://www.airbnb.com/rooms/28115824).

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

YYYY-MM-DD. With check-out, prices are the total for these exact dates. Without dates Airbnb picks its own sample dates for the card price.

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

YYYY-MM-DD, after the check-in date.

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

Number of adult guests (prices depend on it).

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

Number of children (2-12).

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

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

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

Airbnb's own price filter (0 = none).

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

Airbnb's own price filter (0 = none).

## `maxItems` (type: `integer`):

Stops after this many listings in total. Airbnb shows 18 per page and at most 15 pages (270) per search; add more locations or price ranges for more.

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

Opens each listing for its description, amenities, host, house rules, category ratings and all photos; with dates also availability, instant book and cancellation options. One or two extra requests per listing.

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

Residential proxies (the default) are recommended. The Actor switches to a new IP when a request is blocked.

## Actor input object example

```json
{
  "locations": [
    "Lisbon, Portugal"
  ],
  "startUrls": [],
  "adults": 2,
  "children": 0,
  "currency": "USD",
  "priceMin": 0,
  "priceMax": 0,
  "maxItems": 50,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        "Lisbon, Portugal"
    ],
    "startUrls": [],
    "checkIn": "",
    "checkOut": "",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("neuro-scraper/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": ["Lisbon, Portugal"],
    "startUrls": [],
    "checkIn": "",
    "checkOut": "",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("neuro-scraper/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": [
    "Lisbon, Portugal"
  ],
  "startUrls": [],
  "checkIn": "",
  "checkOut": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call neuro-scraper/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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