# Airbnb Scraper (`api-ninja/airbnb-scraper`) Actor

🏡 Search Airbnb listings with powerful filters, automatic pagination, and structured export-ready results

- **URL**: https://apify.com/api-ninja/airbnb-scraper.md
- **Developed by:** [API ninja](https://apify.com/api-ninja) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 158 total users, 53 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 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

### What does Airbnb Search Scraper do?

**Airbnb Search Scraper** helps you **search Airbnb listings by destination, dates, guest count, pricing, and advanced filters** and save the results into an Apify dataset. It is built for users who want a simple way to extract Airbnb search result data without building their own integration or pagination flow.

The Actor searches listings on [Airbnb](https://www.airbnb.com/) based on the input you choose in the **Input** tab. You can run it with exact check-in and check-out dates, or use flexible search options such as months, weekend/week/month stays, and flexible destination ideas.

Because it runs on Apify, you also get the platform benefits that matter in production: **API access, scheduling, monitoring, integrations, dataset export, and repeatable runs**.

### Why use Airbnb Search Scraper?

This Actor is useful when you need Airbnb listing data for:

- Market research by city or region
- Travel inventory monitoring
- Price tracking for short-term rentals
- Competitive analysis across neighborhoods
- Lead generation for vacation rental operators
- Building internal dashboards or reports

It is especially useful if you want to combine multiple Airbnb search filters in one run. You can search by destination, date mode, guest counts, price limits, room type, amenities, booking options, host language, accessibility features, and more.

### What can this Actor do?

- Search Airbnb listings by destination such as `toronto, canada`
- Use exact dates or flexible date search
- Paginate automatically until the requested number of listings is reached
- Scrape all available results when `Scrape All Available Listings` is enabled
- Retry failed API requests automatically up to 5 times
- Store raw listing objects in the dataset for maximum flexibility
- Show a clean overview table in Apify Console using nested source fields

The Actor behaves like a standalone Airbnb search API from the user perspective. You configure the search in the input, run the Actor, and get structured listing data back through Apify datasets and API endpoints.

### What data can Airbnb Search Scraper extract?

The Actor stores the raw listing items returned by the search response. The overview table highlights the most useful fields.

| Field | Description |
| --- | --- |
| `stayListingId` | Airbnb listing token returned by the search |
| `description.name.localizedStringWithTranslationPreference` | Listing name |
| `structuredContent.title` | Listing title |
| `structuredContent.subtitle` | Listing subtitle |
| `location.localizedCityName` | City |
| `structuredDisplayPrice.primaryLine.discountedPrice` | Discounted price |
| `structuredDisplayPrice.primaryLine.originalPrice` | Original price |
| `avgRatingLocalized` | Rating summary |
| `listingParamOverrides.checkin` / `checkout` | Search dates used for the listing |
| `listingParamOverrides.adults`, `children`, `infants`, `pets` | Guest parameters |
| `location.coordinate.latitude` / `longitude` | Coordinates |
| `badges` | Listing badges such as Guest favorite |
| `contextualPictures` | Listing images |

### How to scrape Airbnb listings

1. Open the **Input** tab.
2. Enter a destination such as `toronto, canada`.
3. Choose either exact dates or flexible stay options.
4. Set `Max Listings` or enable `Scrape All Available Listings`.
5. Optionally add filters such as room type, price range, amenities, or Superhost.
6. Run the Actor.
7. Open the **Output** tab to review the listings table or download the dataset.

This Actor is friendly to both no-code users and developers. If you only need results quickly, use the form in Apify Console. If you want automation, run it through the Apify API and schedule recurring searches.

### Input

Airbnb Search Scraper has the following main input groups:

- Destination and result volume
- Exact dates or flexible date search
- Guest counts
- Search filters such as price, room type, amenities, booking options, accessibility, and host languages

The **Input** tab is the best place to see all fields and their descriptions.

#### Input example

```json
{
  "searchDestinations": "toronto, canada",
  "homesPerSearch": 120,
  "scrapeAll": false,
  "resultsType": "search_results",
  "checkIn": "2027-01-01",
  "checkOut": "2027-01-03",
  "adults": 2,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "typeOfPlace": "Any_type",
  "currency": "USD",
  "priceRangeMin": 20,
  "priceRangeMax": 5000
}
```

### Output

The Actor stores **raw Airbnb listing items** and also configures a readable overview table in the dataset view. You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

#### Output example

```json
[
  {
    "stayListingId": "RGVtYW5kU3RheUxpc3Rpbmc6MTYwMDA1NzMyNTEzMTY5MjM1OQ==",
    "avgRatingLocalized": "5.0 (6)",
    "listingParamOverrides": {
      "adults": 2,
      "children": 0,
      "infants": 0,
      "pets": 0,
      "checkin": "2027-01-01",
      "checkout": "2027-01-03"
    },
    "structuredDisplayPrice": {
      "primaryLine": {
        "originalPrice": "$443",
        "discountedPrice": "$403",
        "qualifier": "total",
        "accessibilityLabel": "$403 total, originally $443"
      }
    },
    "contextualPictures": [
      {
        "picture": "https://a0.muscache.com/im/pictures/hosting/example/original/example.jpeg"
      }
    ],
    "demandStayListing": {
      "location": {
        "localizedCityName": "Toronto",
        "coordinate": {
          "latitude": 43.670369162318856,
          "longitude": -79.37774704960307
        }
      },
      "description": {
        "name": {
          "localizedStringWithTranslationPreference": "Luxury & Spacious Condo Steps from Yorkville"
        }
      },
      "structuredContent": {
        "title": "Condo in Toronto",
        "subtitle": "Luxury & Spacious Condo Steps from Yorkville"
      }
    }
  }
]
```

### How much does it cost to scrape Airbnb listings?

This Actor is priced by Apify platform usage. In practice, the cost depends on how many result pages you fetch and how many searches you run.

For most searches, the Actor is lightweight because it does not open a browser. It requests listing pages, retries failures when needed, and paginates only as far as necessary. That makes it suitable for both small tests and larger recurring jobs.

To keep costs lower:

- Set a reasonable `Max Listings`
- Avoid `Scrape All Available Listings` unless you need full coverage
- Narrow your destination and filters
- Schedule focused recurring searches instead of very broad runs

### Tips and advanced options

- If you know the exact travel window, use `checkIn` and `checkOut` for more precise results.
- If you want discovery-style searches, use the flexible date and destination options.
- Use price, room type, amenities, and booking options together to narrow large result sets.
- The dataset contains the raw listing objects, so you can build your own parser later without re-running every search.
- For automation, call the Actor through the Apify API and connect the output to tools such as Make, Zapier, Google Sheets, webhooks, or your own backend.

### FAQ, disclaimers, and support

#### Is it legal to scrape Airbnb data?

This Actor is intended for legitimate research, monitoring, and business automation use cases. You are responsible for making sure your use complies with applicable laws, regulations, and the target site's terms.

#### Does this Actor scrape listing detail pages?

No. This Actor focuses on **Airbnb search results**. It returns listing items from the search response. If you need deep per-property enrichment, use a dedicated detail scraper in a second step.

#### Why are some fields nested?

The Actor stores the raw listing items as returned by the source response. This preserves the full source data and makes the dataset more reliable for advanced use cases.

#### Where can I get help?

If you run into issues or want a feature added, use the **Issues** tab on the Actor page. Feedback from real runs is the fastest way to improve support for more search combinations and edge cases.

# Actor input Schema

## `searchDestinations` (type: `string`):

Destination to search, for example `toronto, canada`.

## `homesPerSearch` (type: `integer`):

Maximum number of listings to save. Ignored when `Scrape all available listings` is enabled.

## `scrapeAll` (type: `boolean`):

Keep paginating until the API stops returning `nextPageCursor`.

## `resultsType` (type: `string`):

Choose which result group the API should return.

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

Exact check-in date in `YYYY-MM-DD` format. When used together with check-out, flexible date inputs are ignored.

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

Exact check-out date in `YYYY-MM-DD` format.

## `flexibleDateFilters` (type: `string`):

How flexible the dates can be when exact dates are not used.

## `months` (type: `string`):

Number of months for a flexible stay search. The API also accepts `None`.

## `flexibleStayPeriod` (type: `string`):

Preferred flexible stay length.

## `goAnytimeMonths` (type: `string`):

Comma-separated lowercase month names, for example `january,february,march`.

## `imFlexibleOfDestination` (type: `boolean`):

Search broader destination ideas instead of a strict destination match.

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

Guests aged 13 or above.

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

Guests aged 2 to 12.

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

Guests aged 0 to 2.

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

Number of pets.

## `typeOfPlace` (type: `string`):

Listing type filter.

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

Currency code, for example `USD`, `EUR`, or `GBP`.

## `priceRangeMin` (type: `integer`):

Minimum price filter.

## `priceRangeMax` (type: `integer`):

Maximum price filter.

## `bedrooms` (type: `integer`):

Minimum bedroom count.

## `beds` (type: `integer`):

Minimum bed count.

## `bathrooms` (type: `integer`):

Minimum bathroom count.

## `amenities` (type: `string`):

Comma-separated amenity IDs, for example `4,8,33`.

## `bookingOptions` (type: `string`):

Comma-separated values such as `instant book,self checkin,allow pets,free cancellation`.

## `guestFavorite` (type: `boolean`):

Only include listings marked as Guest favorite.

## `luxuryHomes` (type: `boolean`):

Only include luxury home listings.

## `superhost` (type: `boolean`):

Only include Superhost listings.

## `propertyType` (type: `string`):

Comma-separated values such as `House,Flat,Guest house,Hotel`.

## `accessibilityFeatures` (type: `string`):

Comma-separated accessibility IDs, for example `110,111,291`.

## `hostLanguages` (type: `string`):

Comma-separated host language codes, for example `zh,de`.

## Actor input object example

```json
{
  "searchDestinations": "toronto, canada",
  "homesPerSearch": 120,
  "scrapeAll": false,
  "flexibleDateFilters": "Exact_dates",
  "months": "None",
  "flexibleStayPeriod": "Weekend",
  "imFlexibleOfDestination": false,
  "adults": 2,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "currency": "USD",
  "priceRangeMin": 20,
  "priceRangeMax": 5000,
  "guestFavorite": false,
  "luxuryHomes": false,
  "superhost": 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 = {
    "searchDestinations": "toronto, canada"
};

// Run the Actor and wait for it to finish
const run = await client.actor("api-ninja/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 = { "searchDestinations": "toronto, canada" }

# Run the Actor and wait for it to finish
run = client.actor("api-ninja/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 '{
  "searchDestinations": "toronto, canada"
}' |
apify call api-ninja/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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