# Airbnb Scraper - Prices, Ratings, All Results (`joyouscam35875/airbnb-scraper`) Actor

Airbnb stays for any place or search URL: total and nightly price for your dates, discounts, rating, reviews, bedrooms, beds, baths, Superhost, photos, coordinates. Goes past Airbnb's 270-result limit by splitting the map. Only-new mode.

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

## Pricing

from $1.50 / 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.

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 - Prices, Ratings, All Results

Airbnb stays as clean rows for any place or search URL: **total and nightly price for your dates**, original price when discounted, rating, review count, bedrooms, beds, baths, Superhost and Guest favorite badges, free cancellation, photos and coordinates. Airbnb's website stops at 15 pages (270 stays) per search; this actor **splits the map into smaller areas** until each one fits, so a whole city comes back, not just the first 270.

- **Prices for real stays:** give check-in and check-out dates and every row carries the total, the nightly rate and the discount.
- **All results:** past the 270 limit, up to 10,000 stays per search.
- **Any place, any URL:** type `Lisbon, Portugal` or paste a search from airbnb.com with your own filters and map area.
- **Only new listings** remembers what earlier runs delivered, so scheduled runs return and bill only new stays.
- **No login, no cookies, no proxy setup.**

### Quick start

```json
{
  "searches": ["Lisbon, Portugal"],
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "adults": 2,
  "roomTypes": ["entireHome"],
  "maxItems": 1000
}
```

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searches` | array | required | Places or airbnb.com search URLs. |
| `checkIn` / `checkOut` | string | | `YYYY-MM-DD`. Both, for prices of a real stay. |
| `adults` | integer | | Number of guests. |
| `minPrice` / `maxPrice` | integer | | Per night, in the selected currency. |
| `roomTypes` | array | all | `entireHome`, `privateRoom`, `sharedRoom`, `hotelRoom`. |
| `minBedrooms` | integer | | |
| `currency` | string | `USD` | `USD`, `EUR`, `GBP`, `CAD`, `AUD`... |
| `maxItems` | integer | 200 | Per search. `0` = every stay (up to 10,000). |
| `onlyNewListings` | boolean | false | Return only stays not delivered by earlier runs of the same search. |

### Output

```json
{
  "listingId": "1739191287312219234",
  "url": "https://www.airbnb.com/rooms/1739191287312219234",
  "name": "Romantic Stay Close to the Eiffel Tower",
  "propertyType": "Apartment",
  "area": "Paris",
  "subtitle": "10-minute walk to the Eiffel Tower",
  "latitude": 48.8493,
  "longitude": 2.2868,
  "rating": 5.0,
  "reviewCount": 6,
  "bedrooms": 1,
  "beds": 1,
  "baths": 1,
  "totalPrice": 372,
  "originalPrice": null,
  "pricePerNight": 123.79,
  "nights": 3,
  "currency": "USD",
  "isSuperhost": false,
  "isGuestFavorite": true,
  "freeCancellation": true,
  "photos": ["https://a0.muscache.com/im/pictures/..."],
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-13",
  "searchInput": "Paris, France",
  "scrapedAt": "2026-10-07T10:00:00+00:00"
}
```

`rating` is `null` and `isNew` is `true` for listings without reviews yet. Without dates, Airbnb prices a short default stay; give dates for comparable prices.

### Pricing

Pay per event: one `listing` event per stay row, plus a tiny actor-start fee. With **Only new listings** on, a run with nothing new costs only the start fee.

### Use cases

- **Short-term rental investors:** nightly rates, ratings and supply for a whole city, to size revenue before buying
- **Hosts and property managers:** price your listing against every comparable stay for the same dates
- **Travel and market research:** supply, prices and Superhost share by neighborhood
- **Lead generation for cleaning, furnishing and management services**

### Integrations

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("joyouscam35875/airbnb-scraper").call(run_input={
    "searches": ["Austin, TX"],
    "checkIn": "2026-12-04",
    "checkOut": "2026-12-06",
    "maxItems": 0,
})
for stay in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(stay["pricePerNight"], stay["rating"], stay["reviewCount"], stay["url"])
```

Works with Make, Zapier, n8n, Google Sheets, schedules and webhooks, and as an MCP tool for AI agents.

### FAQ

**How does it get past 270 results?** Airbnb shows at most 15 pages for one map view. When a view is full, the actor searches its four quarters instead, and repeats where needed, then removes duplicates.

**What if my run has a short timeout?** The actor stops shortly before it, keeps every stay already saved, and ends successfully with a message saying so.

**Is it legal?** The actor reads publicly visible search results and does not log in or export hosts' personal data. You are responsible for how you use the data and for complying with Airbnb's terms and applicable law.

### Feedback

Missing a field? Open an issue on the actor's **Issues** tab. If this scraper saved you time, a short review on the Store page helps other people find it.

### Related actors by the same developer

| Actor | What it does |
|---|---|
| [Zillow Search Scraper](https://apify.com/joyouscam35875/zillow-search-scraper) | Every home of a Zillow search, past the 820 limit |
| [SeLoger, Leboncoin, Bien'ici, PAP & Logic-Immo Scraper](https://apify.com/joyouscam35875/france-real-estate-scraper) | French property listings from five sites with real sale prices |
| [Google Maps Scraper](https://apify.com/joyouscam35875/google-maps-scraper) | Businesses, ratings and contact details from Google Maps |

# Actor input Schema

## `searches` (type: `array`):

A city, region or neighborhood ('Paris, France', 'Austin, TX', 'Bali'), or a search URL copied from airbnb.com with your filters and map area. One per line.

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

YYYY-MM-DD. With check-out, prices are for this stay and only available stays are listed.

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

YYYY-MM-DD.

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

Number of guests.

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

In the selected currency.

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

In the selected currency.

## `roomTypes` (type: `array`):

Leave empty for all.

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

Minimum number of bedrooms.

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

Three-letter code: USD, EUR, GBP, CAD, AUD...

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

0 = every stay in the search (up to 10,000), beyond Airbnb's 270-result page limit.

## `onlyNewListings` (type: `boolean`):

Remember the stays delivered by earlier runs of the same search and return only stays not delivered before. You only pay for new ones.

## Actor input object example

```json
{
  "searches": [
    "Lisbon, Portugal"
  ],
  "currency": "USD",
  "maxItems": 200,
  "onlyNewListings": false
}
```

# Actor output Schema

## `stays` (type: `string`):

One row per stay.

# 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 = {
    "searches": [
        "Lisbon, Portugal"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("joyouscam35875/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 = { "searches": ["Lisbon, Portugal"] }

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

```

## MCP server setup

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