# Airbnb (`mrdoe/airbnb`) Actor

Scrapes Airbnb search results and returns structured data for each listing found — price, rating, host status, location, and photos. Output is delivered as a clean, ready-to-use dataset.

- **URL**: https://apify.com/mrdoe/airbnb.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Real estate, AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Airbnb Search Scraper

Scrape **Airbnb search results** — listing title, nightly price, rating, review count, Superhost status, bedroom/bed/bath counts, coordinates, and photo URLs — without an Airbnb account, login, or official API. The **Airbnb Search Scraper** takes one or more Airbnb search URLs and returns clean structured JSON for short-term-rental market research, price monitoring, and building your own Airbnb listings dataset or API feed.

![Airbnb Search Scraper input configuration panel](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/airbnb--input.png)

### What is the Airbnb Search Scraper?

The Airbnb Search Scraper is an Apify Actor that extracts every listing from an Airbnb search results page. Paste an Airbnb search URL (any filters in the URL — dates, guests, price range, map area — are respected) and it pages through the results, returning one flat JSON row per listing with price, rating, review count, Superhost flag, room configuration, coordinates, and images. Output is ready for Excel, Google Sheets, or an API integration.

### How to scrape Airbnb listings by location

1. Go to [airbnb.com](https://www.airbnb.com), search a destination with your dates and guests, and copy the resulting URL.
2. Paste it into **`startUrls`**. Add more URLs to cover several searches in one run.
3. Set **`maxItems`** — the number of listings to collect per start URL.
4. Optionally enable a proxy under **`proxyConfiguration`** for larger runs.
5. Click **Start**. Export as JSON, CSV, Excel, or via the dataset API.

### What data can I extract from Airbnb?

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Airbnb listing ID |
| `title` | string | Listing title, e.g. `Apartment in Huai Khwang` |
| `subtitle` | string | Secondary description line |
| `url` | string | Canonical `airbnb.com/rooms/<id>` URL |
| `price` | string | Displayed price, e.g. `$583` |
| `priceQualifier` | string | Price context, e.g. `for 12 nights` |
| `rating` | number | Overall guest rating |
| `reviewsCount` | integer | Number of reviews |
| `isSuperhost` | boolean | Whether the host is a Superhost |
| `roomDetails` | array | Room configuration, e.g. `["1 bedroom", "1 bed", "1 bath"]` |
| `latitude` / `longitude` | number | Listing coordinates |
| `images` | array | Photo URLs |
| `searchUrl` | string | The start URL this listing came from |

### Input example

```json
{
    "startUrls": [
        { "url": "https://www.airbnb.com/s/Bangkok--Thailand/homes?checkin=2026-08-11&checkout=2026-08-23&adults=1" }
    ],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": false }
}
```

### Output example

```json
[
    {
        "id": "1492865907189208216",
        "title": "Apartment in Huai Khwang",
        "subtitle": "40sqm 1 bedroom with bathtub balcony, near RCA and train night market",
        "url": "https://www.airbnb.com/rooms/1492865907189208216",
        "price": "$583",
        "priceQualifier": "for 12 nights",
        "rating": 4.92,
        "reviewsCount": 1171,
        "isSuperhost": false,
        "roomDetails": ["1 bedroom", "1 bed", "1 bath"],
        "latitude": 13.75411,
        "longitude": 100.58297,
        "images": [
            "https://a0.muscache.com/im/pictures/hosting/Hosting-1492865907189208216/original/9426ee5a-ffb6-4f87-a7a9-126bb63a181d.png"
        ],
        "searchUrl": "https://www.airbnb.com/s/Bangkok--Thailand/homes?checkin=2026-08-11&checkout=2026-08-23&adults=1"
    }
]
```

![Airbnb Search Scraper sample output dataset](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/airbnb--output.png)

### What you get vs. browsing Airbnb manually

| Task | Manually on Airbnb | With the Airbnb Search Scraper |
| --- | --- | --- |
| Collect 100 listings for a city | Scroll endlessly, copy each | One run, one dataset |
| Track nightly prices for a neighbourhood | Re-search daily | Schedule the Actor, diff the dataset |
| Map listing density and price | Note pins one by one | `latitude` / `longitude` on every row |
| Measure Superhost share in a market | Click into each listing | Count `isSuperhost` across the dataset |
| Get data into Excel / a database | Manual copy-paste | Built-in JSON / CSV / Excel + dataset API |

### How to use it (step by step)

1. **Build the search on Airbnb** with the filters you want and copy the URL.
2. **Paste it into `startUrls`** — filters in the URL are preserved.
3. **Set `maxItems`** per start URL.
4. **Enable a proxy** for high-volume runs to avoid rate limiting.
5. **Run and export** — dataset tab or `GET /v2/datasets/{id}/items`.
6. **Schedule it** for recurring market tracking.

### Pricing

Runs on the Apify platform and consumes platform usage (compute + proxy). Use **`maxItems`** to scope smaller, cheaper runs. Exact rates are on the Actor's **Pricing** tab. **\[PRICING TBD]**

### FAQ

**What is the Airbnb Search Scraper?** An Apify Actor that extracts all listings from an Airbnb search results page — price, rating, reviews, Superhost status, room counts, coordinates, photos — as structured JSON, CSV, or Excel.

**Do I need an Airbnb account, API key, or login?** No.

**What URLs does it accept?** Airbnb search result URLs (`https://www.airbnb.com/s/...`). Any filters in the URL — dates, guests, price range, map bounds — are respected.

**Do I need a proxy?** Not for light usage. Enable one for larger runs to avoid IP-based rate limiting.

**Are duplicate listings removed?** Yes. Airbnb's ranking can shift between requests, so a listing may reappear across pages of one run; duplicates within a run are filtered out.

**Does it download photos?** No — it collects image URLs into the `images` field.

**What export formats are available?** JSON, CSV, Excel, HTML table, RSS, or the Apify dataset API.

**Is scraping Airbnb legal?** The Actor accesses only publicly visible listing data. You are responsible for compliant use under Airbnb's terms and the laws that apply to you. Not affiliated with Airbnb.

<details><summary>Advanced input options</summary>

| Field | Type | Default | Notes |
| --- | --- | --- | --- |
| `startUrls` | array (required) | one Bangkok search URL | Airbnb search result URLs. Filters in the URL are preserved. |
| `maxItems` | integer | `5` | Listings to collect per start URL. `minimum` 1. |
| `proxyConfiguration` | object | `{ "useApifyProxy": false }` | Optional proxy. Recommended for large-scale runs. |

**Notes.** When using proxies with multiple IP locations, region-dependent data such as displayed price and currency may vary. The Actor pages through results until `maxItems` is reached or the search is exhausted.

</details>

### My other travel scrapers on Apify

| Actor | What it does |
| --- | --- |
| [Airbnb Room Reviews Scraper](https://apify.com/mrdoe/airbnb-reviews-scraper) | Reviews, ratings, and host replies from Airbnb listings |
| [Airbnb & Vrbo Revenue and Occupancy Estimator](https://apify.com/mrdoe/airbnb-vrbo-revenue-estimator) | Estimated revenue and occupancy for short-term rentals |
| [Booking.com Listings Scraper](https://apify.com/mrdoe/booking-scraper) | Hotel prices, ratings, and room types from Booking.com |
| [Booking.com Review Scraper](https://apify.com/mrdoe/booking-review-scraper) | Guest review text and scores from Booking.com |
| [Expedia Hotel Scraper](https://apify.com/mrdoe/expedia-hotel-scraper) | Hotel listings and per-room rates from Expedia |
| [Expedia Review Scraper](https://apify.com/mrdoe/expedia-review-scraper) | Traveler reviews and sentiment from Expedia |
| [Agoda Hotel Scraper](https://apify.com/mrdoe/agoda-hotel-scraper) | Hotel details and live city pricing from Agoda |
| [Agoda Review Scraper](https://apify.com/mrdoe/agoda-review-scraper) | Guest reviews and stay details from Agoda |
| [Trip.com Hotel Scraper](https://apify.com/mrdoe/trip-com-hotel-scraper) | Hotel prices, ratings, and best room rate from Trip.com |
| [Trip.com Review Scraper](https://apify.com/mrdoe/trip-com-review-scraper) | Guest reviews and stay details from Trip.com |
| [Google Hotels Scraper](https://apify.com/mrdoe/google-hotels-scraper) | Hotel prices, ratings, and coordinates from Google Hotels |
| [TripAdvisor Hotel Scraper](https://apify.com/mrdoe/tripadvisor-hotel-scraper) | Hotel details plus per-OTA room rates from TripAdvisor |
| [TripAdvisor Review Scraper](https://apify.com/mrdoe/tripadvisor-review-scraper) | Full guest reviews and sub-ratings from TripAdvisor |

![Airbnb Search Scraper logo](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/airbnb--logo.png)

***

*Independent tool, not affiliated with or endorsed by Airbnb. Accesses only publicly available data. Report bugs or request features on the Issues tab.*

# Actor input Schema

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

Airbnb search result URLs to scrape, e.g. https://www.airbnb.com/s/Bangkok--Thailand/homes

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

Maximum number of listings to scrape per start URL.

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

Proxy settings. Airbnb's search API works without a proxy for light usage; enable one for larger runs to avoid rate limiting.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.airbnb.com/s/Bangkok--Thailand/homes?refinement_paths%5B%5D=%2Fhomes&place_id=ChIJ82ENKDJgHTERIEjiXbIAAQE&date_picker_type=calendar&checkin=2026-08-11&checkout=2026-08-23&adults=1&query=Bangkok%2C%20Thailand"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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/s/Bangkok--Thailand/homes?refinement_paths%5B%5D=%2Fhomes&place_id=ChIJ82ENKDJgHTERIEjiXbIAAQE&date_picker_type=calendar&checkin=2026-08-11&checkout=2026-08-23&adults=1&query=Bangkok%2C%20Thailand"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/airbnb").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/s/Bangkok--Thailand/homes?refinement_paths%5B%5D=%2Fhomes&place_id=ChIJ82ENKDJgHTERIEjiXbIAAQE&date_picker_type=calendar&checkin=2026-08-11&checkout=2026-08-23&adults=1&query=Bangkok%2C%20Thailand" }] }

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/airbnb").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/s/Bangkok--Thailand/homes?refinement_paths%5B%5D=%2Fhomes&place_id=ChIJ82ENKDJgHTERIEjiXbIAAQE&date_picker_type=calendar&checkin=2026-08-11&checkout=2026-08-23&adults=1&query=Bangkok%2C%20Thailand"
    }
  ]
}' |
apify call mrdoe/airbnb --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/airbnb"
        }
    }
}

```

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/m99mFeHXM4laWxuCM/builds/S5SCKnNA3zM92dtrC/openapi.json
