# Airbnb Scraper CHEAP (`epicscrapers/airbnb-scraper`) Actor

\[⭐$0.5/1k] Scrape Airbnb listing details - cheap and reliable. Useful for lead generation and market research. Enter query or search url, and we provide details about all the listings.  Prices, ratings, host info, amenities, reviews, cancellation policies, and more

- **URL**: https://apify.com/epicscrapers/airbnb-scraper.md
- **Developed by:** [Epic Scrapers](https://apify.com/epicscrapers) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper Advanced ⭐

![Airbnb Scraper Advanced Banner](https://raw.githubusercontent.com/jwlben11/hosted-images/main/banners/airbnb-scraper-advanced.svg)

**From $0.50 / 1,000 results** — Extract comprehensive vacation rental data from [Airbnb](https://www.airbnb.com), the world's largest short-term rental marketplace covering 220+ countries and regions. Get detailed listing information including prices, ratings, host intelligence, amenities, cancellation policies, and property images — structured, clean, and ready for analysis. No API key required.

Search by **location query**, **direct listing URL**, **search URL**, **price range**, **guest count**, **bed/bath minimums**, and **check-in/check-out dates**. Returns **70+ fields** of structured data per listing including full pricing breakdown (base price, cleaning fees, service fees, taxes), detailed ratings across 7 dimensions, host profiles with Superhost status, co-host data, structured amenity groups with icons, house rules, cancellation policies, image galleries, GPS coordinates, and property highlights. Up to **unlimited results** per run with automatic pagination. No login, no API key, no authentication required.

### 📊 Comparison Table

| Feature | Airbnb Scraper Advanced ⭐ | memo23/airbnb-scraper | red.cars/airbnb-scraper |
|---|---|---|---|
| **Price per 1,000 results** | **$0.50** | $0.80 | $6.00 |
| **Full pricing breakdown (base, fees, taxes, total)** | ✅ | ✅ | ❌ Not specified |
| **Structured amenities with icons** | ✅ | ✅ | ❌ Simple list |
| **Host co-hosts data** | ✅ | ❌ | ❌ |
| **Property highlights with icons** | ✅ | ❌ | ❌ |
| **Breadcrumb navigation** | ✅ | ❌ | ❌ |
| **House rules with icons** | ✅ | ✅ | ❌ |
| **GPS coordinates** | ✅ | ✅ | ✅ |
| **7-dimension rating breakdown** | ✅ | ✅ | ❌ Simple overall |
| **11 locales, 27 currencies** | ✅ | ✅ | ❌ |
| **Unlimited results per run** | ✅ | ✅ | Up to 1,000 |
| **Search by location query** | ✅ | ✅ | ✅ |
| **Search by listing URL** | ✅ | ✅ | ✅ |
| **Free trial available** | ✅ | ❌ | ✅ |
| **Image gallery extraction** | ✅ | ✅ | ✅ |
| **Cancellation policies** | ✅ | ❌ | ❌ |
| **Auto-pagination** | ✅ | ✅ | ✅ |

### 🚀 Features

- **🔓 No API Key Required** — Access Airbnb listing data directly without official API restrictions, rate limits, or approval processes.
- **🌍 Search by Location** — Enter any city, neighborhood, or region. Works globally with automatic pagination through all available results.
- **🔗 Scrape by URL** — Pass individual Airbnb listing URLs directly for targeted data extraction of specific properties.
- **💰 Full Pricing Breakdown** — Get base price, service fees, taxes, cleaning fees, total price, original price, and early-bird discounts — not just a nightly rate.
- **⭐ Detailed Rating Analysis** — Extract ratings across 7 dimensions: accuracy, check-in, cleanliness, communication, location, value, and overall guest satisfaction.
- **👤 Host Intelligence** — Host name, profile image, Superhost status, verification status, rating average, review count, time as host (years/months), and co-host data.
- **🛋️ Structured Amenities** — Amenities organized in logical groups (kitchen, bathroom, bedroom, outdoor, safety, parking) with availability flags and system icons.
- **🏆 Property Highlights** — Notable features extracted with titles, subtitles, and icon identifiers (e.g., "Great location", "Superhost", "City view").
- **📋 House Rules & Policies** — Check-in/out times, guest limits, pet policies, smoking rules, event policies, and cancellation policies — all structured with icons.
- **📸 Full Image Galleries** — Extract all listing photos with captions and orientation data.
- **🌐 Multi-Language & Multi-Currency** — Supports 11 locales (en-US, de-DE, fr-FR, es-ES, it-IT, pt-BR, ja-JP, ko-KR, zh-CN, ru-RU, ar-XX) and 27 currencies.
- **📈 Scalable** — Configurable concurrency, automatic retry on failures, and support for unlimited result volumes.
- **🔄 Instant Free Trial** — Test the actor with real properties before committing — usage costs apply but there's no subscription fee to try.

### 📋 What You Get

Every scraped Airbnb listing returns **70+ fields** of structured data:

| Field | Type | Description | Example |
|---|---|---|---|
| `id` | String | Unique Airbnb listing identifier | `1212782301994274588` |
| `url` | String | Full listing URL | `https://www.airbnb.com/rooms/1212782301994274588` |
| `title` | String | Listing title as displayed | `Bright and Newly Renovated Studio near Hyde Park` |
| `description` | String | Full property description | `Welcome to this newly refurbished, stylish studio...` |
| `propertyType` | String | Type of accommodation | `Entire rental unit` |
| `roomType` | String | Room classification | `Entire home/apt` |
| `personCapacity` | Integer | Maximum guest capacity | `2` |
| `price.label` | String | Formatted price string | `$1,081 total` |
| `price.price` | String | Raw price amount | `$1,081` |
| `price.qualifier` | String | Price qualifier | `total` |
| `price.originalPrice` | String | Original pre-discount price | `$1,350` |
| `price.discountedPrice` | String | Discounted price | `$1,081` |
| `price.breakDown.basePrice` | Object | Base nightly price breakdown | `{ description: "$250/night", price: "$1,000" }` |
| `price.breakDown.serviceFee` | Object | Airbnb service fee | `{ description: "Service fee", price: "$120" }` |
| `price.breakDown.taxes` | Object | Occupancy taxes | `{ description: "Occupancy taxes", price: "$80" }` |
| `price.breakDown.cleaningFee` | Object | Cleaning fee | `{ description: "Cleaning fee", price: "$60" }` |
| `price.breakDown.total` | Object | Total price | `{ description: "Total", price: "$1,260" }` |
| `price.breakDown.specialOffer` | Object | Special offer discount | `{ description: "Weekly stay discount", price: "-$179" }` |
| `price.breakDown.earlyBirdDiscount` | Object | Early bird discount | `{ description: "Early bird discount", price: "-$50" }` |
| `rating.guestSatisfaction` | Number | Overall guest satisfaction score | `5.0` |
| `rating.accuracy` | Number | Accuracy rating | `4.93` |
| `rating.cleanliness` | Number | Cleanliness rating | `4.80` |
| `rating.checking` | Number | Check-in rating | `4.93` |
| `rating.communication` | Number | Communication rating | `5.0` |
| `rating.location` | Number | Location rating | `4.93` |
| `rating.value` | Number | Value rating | `4.87` |
| `rating.reviewsCount` | String | Total review count | `15` |
| `coordinates.latitude` | Number | GPS latitude | `51.5167` |
| `coordinates.longitude` | Number | GPS longitude | `-0.1881` |
| `location` | String | Location name | `Greater London` |
| `locationSubtitle` | String | Full location string | `Greater London, England, United Kingdom` |
| `thumbnail` | String | Primary listing image URL | `https://a0.muscache.com/im/pictures/...` |
| `host.id` | String | Host's unique identifier | `4715944` |
| `host.name` | String | Host's display name | `Ulrich` |
| `host.profileImage` | String | Host's profile photo URL | `https://a0.muscache.com/im/pictures/...` |
| `host.isSuperHost` | Boolean | Superhost status | `true` |
| `host.isVerified` | Boolean | Identity verification status | `true` |
| `host.ratingAverage` | Number | Host's overall rating | `4.96` |
| `host.ratingCount` | Integer | Host's total reviews | `46` |
| `host.timeAsHost` | Object | Hosting tenure | `{ "years": 11, "months": 0 }` |
| `host.highlights` | Array | Host achievement badges | `[]` |
| `coHosts` | Array | Co-host profiles | `[{ "id": "...", "name": "Jane", ... }]` |
| `amenities` | Array | Grouped amenities with availability | `[{ title: "Kitchen and dining", values: [...] }]` |
| `highlights` | Array | Property highlights | `[{ title: "City view", subtitle: "...", icon: "SYSTEM_VIEW_CITY" }]` |
| `houseRules` | Object | Structured house rules | `{ general: [{ title: "During your stay", values: [...] }] }` |
| `cancellationPolicies` | Array | Cancellation policy names | `[{ policyName: "Moderate", policyId: "..." }]` |
| `images` | Array | Full image gallery | `[{ caption: "Living room", imageUrl: "...", orientation: "PORTRAIT" }]` |
| `breadcrumbs` | Array | Navigation breadcrumbs | `[{ linkText: "Vacation rentals", linkRoute: "/vacation-rentals" }]` |
| `subDescription` | Object | Property summary blurb | `{ title: "Rental unit in Greater London", items: ["1 bedroom", "1 bed"] }` |
| `isAvailable` | Boolean | Current booking availability | `true` |
| `locale` | String | Language code | `en` |
| `timestamp` | String | Scrape timestamp (ISO) | `2026-06-23T18:11:29.012Z` |

### 🔗 Related Actors

| Actor | Description |
|---|---|
| [Airbnb Reviews Scraper](https://apify.com/epicscrapers/airbnb-reviews-scraper) | Extract reviews, ratings, and guest data from any Airbnb listing. |
| [Airbnb Scraper CHEAP](https://apify.com/epicscrapers/airbnb-scraper) | Fast, budget-friendly Airbnb listing details at $0.50/1k. |

### 📥 Input

| Input | Type | Required | Default | Description |
|---|---|---|---|---|
| `locationQueries` | `string[]` | No* | `[]` | Cities or neighborhoods to search. Example: `["London", "Paris"]` |
| `startUrls` | `object[]` | No* | `[]` | Direct listing URLs or Airbnb search URLs |
| `checkIn` | `string` | No | `null` | Check-in date in `YYYY-MM-DD` format |
| `checkOut` | `string` | No | `null` | Check-out date in `YYYY-MM-DD` format |
| `adults` | `number` | No | `1` | Number of adult guests |
| `children` | `number` | No | `0` | Number of children |
| `infants` | `number` | No | `0` | Number of infants |
| `pets` | `number` | No | `0` | Number of pets |
| `locale` | `string` | No | `en-US` | Language and region (11 options) |
| `currency` | `string` | No | `USD` | Price currency (27 options) |
| `priceMin` | `number` | No | `null` | Minimum nightly price filter |
| `priceMax` | `number` | No | `null` | Maximum nightly price filter |
| `minBeds` | `number` | No | `null` | Minimum number of beds |
| `minBedrooms` | `number` | No | `null` | Minimum number of bedrooms |
| `minBathrooms` | `number` | No | `null` | Minimum number of bathrooms |
| `maxResults` | `number` | No | `null` | Maximum listings to scrape (all if unset) |
| `concurrency` | `number` | No | `5` | Concurrent requests for detail pages |

*\*You must provide at least one of `locationQueries` or `startUrls`.*

#### Example Input: Search by Location

```json
{
  "locationQueries": ["London", "Paris"],
  "maxResults": 20,
  "checkIn": "2026-07-01",
  "checkOut": "2026-07-05",
  "adults": 2,
  "currency": "USD",
  "locale": "en-US",
  "priceMin": 100,
  "priceMax": 500,
  "minBeds": 1
}
````

#### Example Input: Scrape Specific Listings

```json
{
  "startUrls": [
    { "url": "https://www.airbnb.com/rooms/1212782301994274588" },
    { "url": "https://www.airbnb.com/rooms/87654321" }
  ],
  "checkIn": "2026-08-01",
  "checkOut": "2026-08-07",
  "adults": 2,
  "currency": "EUR",
  "locale": "fr-FR"
}
```

#### Example Output (Single Listing)

```json
{
  "id": "1212782301994274588",
  "url": "https://www.airbnb.com/rooms/1212782301994274588",
  "title": "Bright and Newly Renovated Studio near Hyde Park",
  "description": "Welcome to this newly refurbished, stylish studio in a secure, portered complex...",
  "propertyType": "Entire rental unit",
  "roomType": "Entire home/apt",
  "personCapacity": 2,
  "price": {
    "label": "$1,081 total",
    "price": "$1,081",
    "qualifier": "total",
    "breakDown": {
      "basePrice": null,
      "serviceFee": null,
      "taxes": null,
      "total": null,
      "cleaningFee": null,
      "specialOffer": null,
      "earlyBirdDiscount": null
    }
  },
  "rating": {
    "accuracy": 4.93,
    "checking": 4.93,
    "cleanliness": 4.80,
    "communication": 5.0,
    "location": 4.93,
    "value": 4.87,
    "guestSatisfaction": 5.0,
    "reviewsCount": "15"
  },
  "coordinates": {
    "latitude": 51.5167,
    "longitude": -0.1881
  },
  "location": "Greater London",
  "locationSubtitle": "Greater London, England, United Kingdom",
  "thumbnail": "https://a0.muscache.com/im/pictures/miso/Hosting-1212782301994274588/original/027ae6f2-aaa3-4bc4-b6cf-a54f55719630.jpeg",
  "host": {
    "id": "4715944",
    "name": "Ulrich",
    "profileImage": "https://a0.muscache.com/im/pictures/user/82c4ae13-01aa-4e32-991f-e127fba2ea46.jpg",
    "isSuperHost": true,
    "isVerified": true,
    "ratingAverage": 4.96,
    "ratingCount": 46,
    "timeAsHost": { "years": 11, "months": 0 },
    "highlights": [],
    "hostDetails": ["Reviews: 46", "Rating: 4.96", "Years hosting: 11"]
  },
  "coHosts": [],
  "amenities": [
    {
      "title": "Kitchen and dining",
      "values": [
        { "title": "Kitchen", "subtitle": "Space where guests can cook their own meals", "icon": "SYSTEM_COOKING_BASICS", "available": true },
        { "title": "Refrigerator", "subtitle": "", "icon": "SYSTEM_REFRIGERATOR", "available": true },
        { "title": "Microwave", "subtitle": "", "icon": "SYSTEM_MICROWAVE", "available": true }
      ]
    },
    {
      "title": "Bathroom",
      "values": [
        { "title": "Hair dryer", "subtitle": "", "icon": "SYSTEM_HAIRDRYER", "available": true },
        { "title": "Hot water", "subtitle": "", "icon": "SYSTEM_HOT_WATER", "available": true }
      ]
    }
  ],
  "highlights": [
    { "title": "City view", "subtitle": "Soak up the view during your stay.", "icon": "SYSTEM_VIEW_CITY", "type": "LISTING_VIEWS_AMENITY" },
    { "title": "Ulrich is a Superhost", "subtitle": "Superhosts are experienced, highly rated Hosts.", "icon": "SYSTEM_SUPERHOST", "type": "LISTING_SUPER_HOST" }
  ],
  "houseRules": {
    "general": [
      {
        "title": "Checking in and out",
        "values": [
          { "title": "Check-in after 3:00 PM", "icon": "SYSTEM_CLOCK", "additionalInfo": null },
          { "title": "Checkout before 11:00 AM", "icon": "SYSTEM_CLOCK", "additionalInfo": null }
        ]
      },
      {
        "title": "During your stay",
        "values": [
          { "title": "2 guests maximum", "icon": "SYSTEM_FAMILY", "additionalInfo": null },
          { "title": "No pets", "icon": "SYSTEM_NO_PETS", "additionalInfo": null },
          { "title": "No parties or events", "icon": "SYSTEM_NO_EVENTS", "additionalInfo": null },
          { "title": "No smoking", "icon": "SYSTEM_SMOKING_NOT_ALLOWED", "additionalInfo": null }
        ]
      }
    ]
  },
  "cancellationPolicies": [],
  "images": [
    { "caption": null, "imageUrl": "https://a0.muscache.com/im/pictures/miso/Hosting-1212782301994274588/original/027ae6f2-aaa3-4bc4-b6cf-a54f55719630.jpeg", "orientation": "PORTRAIT" },
    { "caption": null, "imageUrl": "https://a0.muscache.com/im/pictures/miso/Hosting-1212782301994274588/original/44ec18a2-dc41-43f0-ba6e-cbb2394c5d8e.jpeg", "orientation": "PORTRAIT" }
  ],
  "breadcrumbs": [],
  "subDescription": {
    "title": "Rental unit in Greater London",
    "items": ["1 bedroom", "1 bed", "1 private bath"]
  },
  "isAvailable": true,
  "locale": "en",
  "language": "en",
  "timestamp": "2026-06-23T18:11:29.012Z",
  "checkIn": "2026-07-01",
  "checkOut": "2026-07-05"
}
```

### 💡 Use Cases

#### **📊 Real Estate Investment & ROI Analysis**

A real estate investor evaluating a property in a new market needs accurate, current data to build a reliable financial model. Relying on generic neighborhood averages or the listing agent's pro-forma numbers often leads to overpaying for an asset that doesn't cash-flow. With this Airbnb scraper, you extract actual pricing data from competing listings — not aspirational asking prices, but the real total a guest pays including cleaning fees, service fees, and taxes.

Start by running the scraper for your target neighborhood with specific `checkIn` and `checkOut` dates and various `personCapacity` configurations. The `price.breakDown` object gives you line-item visibility into what guests actually pay: the `basePrice` tells you nightly revenue potential, `cleaningFee` reveals operational costs guests subsidize, and `total` confirms the all-in guest payment. Cross-reference these against the listing's `rating.guestSatisfaction` and `rating.reviewsCount` to gauge whether high prices are supported by quality.

Build a competitive set by filtering on `propertyType`, `minBeds`, and `minBedrooms` to match only comparable units. Export the dataset to Excel, calculate average revenue per available night (RevPAN), adjust for `isAvailable` signals and seasonal variance, and model your pro-forma with confidence. The output transforms vague "this neighborhood is popular" instincts into a data-backed investment thesis.

#### **📈 Competitive Pricing Intelligence for Hosts**

Airbnb hosts who set and forget their prices leave money on the table. Seasonal demand shifts, local events, and new competitor listings all affect optimal nightly rates. Running this scraper weekly on your own neighborhood gives you a living map of the competitive landscape — which properties are raising prices, which are discounting, and where your listing sits in the quality/price matrix.

Use the scraper with `checkIn` and `checkOut` spanning different seasons (summer peak, winter off-peak, conference dates) to build a pricing heatmap. The `price.originalPrice` vs `price.discountedPrice` fields reveal which hosts use promotional pricing and by how much. The `rating` object tells you what guests value in your market — if competitors with high `rating.cleanliness` command a premium, that's a signal to invest in deeper cleaning rather than cutting rates.

Cross-reference your own listing's amenities (`amenities` array) against top-rated competitors. If the top-5 listings in your area all have `"Dedicated workspace"` (search the `amenities[].values[].title` field) but yours doesn't, you've found a high-impact upgrade. The structured amenity data makes this comparison programmatic at scale — no manual scrolling through 50 listing pages.

#### **🏢 Hospitality Market Research & Strategy**

Hotel chains and hospitality groups expanding into the short-term rental space need granular market intelligence before committing capital. A city like London has thousands of Airbnb listings, but the distribution of `propertyType` (entire homes vs. private rooms), `roomType`, and `personCapacity` varies dramatically by neighborhood. Running this scraper with location queries covering all target boroughs reveals supply composition at a glance.

Analyze the `coordinates` data to build geographic density maps — which blocks are saturated with vacation rentals and which have untapped potential. The `price.breakDown` data across 27 `currency` options lets international operators normalize pricing in their home currency for portfolio-level analysis. The `locale` parameter enables research in local languages, surfacing listings that might not appear in English-language searches.

For a complete market study, run the scraper weekly for 3-6 months to track `price` trends over time, correlate with `rating` changes after renovations or management changes, and identify emerging micro-neighborhoods before they hit mainstream travel guides. Present findings to stakeholders with exported CSV data ready for Tableau or Power BI dashboards.

#### **🎯 Travel & Tourism Data for Destination Marketing**

Destination marketing organizations (DMOs) and tourism boards need to understand who is visiting and where they're staying. Airbnb supply data is a leading indicator of tourism demand — when listings fill up (signal: price increases combined with reduced `isAvailable`), it's time to launch marketing campaigns for shoulder-season travel.

Use the scraper to monitor your destination monthly. The `location` and `locationSubtitle` fields identify precisely which neighborhoods are absorbing demand. The `rating.reviewsCount` growth rate signals which areas are gaining popularity. The `propertyType` distribution tells you whether your market skews toward family-sized entire homes (suggesting leisure travel) or compact private rooms (suggesting budget-conscious or business travelers).

Build a public-facing data dashboard showing average `price` per neighborhood, most common `amenities` (WiFi, kitchen, parking — yes/no flags are extractable from the structured amenities data), and top-rated `host.name` profiles. This transparency builds traveler trust and positions your DMO as data-driven — a competitive advantage in an era of overtourism concerns.

#### **🔍 Academic & Urban Planning Research**

Urban planners, housing policy researchers, and academics studying the impact of short-term rentals on housing affordability need systematic, reproducible data collection. Airbnb's own API provides limited access, and manual data collection doesn't scale. This scraper offers a consistent, documented extraction methodology that can be cited in research methodology sections.

Design a panel study by running the scraper on the same set of location queries at regular intervals (daily, weekly, or monthly). The `timestamp` field ensures every observation is precisely dated. The `coordinates` data enables spatial econometric analysis — linking listing density to rent increases, eviction rates, or transit accessibility. The `host.timeAsHost` field distinguishes professional operators (multiple listings, long tenure) from casual hosts, a key variable in policy debates about commercial vs. peer-to-peer rentals.

For reproducibility, document your input configuration (which `locationQueries`, which `locale` and `currency`, the `maxResults` setting) and export raw JSON for your data repository. The structured `houseRules` and `cancellationPolicies` fields support research on host flexibility and consumer protection — a growing area of regulatory interest worldwide.

#### **💼 Short-Term Rental Portfolio Management**

Property managers running 10+ Airbnb listings need operational intelligence, not just booking notifications. Which of your units is underperforming on `rating.cleanliness`? Which competitor just added a pool and is stealing your summer bookings? Are your `price.breakDown.cleaningFee` amounts aligned with market expectations?

Run this scraper on the neighborhoods where you operate, filtering by `propertyType: "Entire rental unit"` and `minBeds` matching your portfolio. The `rating` object gives you a scorecard for every dimension of guest satisfaction — if your `rating.communication` lags behind competitors, invest in automated messaging. If `rating.value` is below market, your pricing may be out of alignment with the amenities you offer.

The `highlights` array is particularly valuable: Airbnb surfaces features like "Great location" or "Perfect ratings for long stays" only when a listing genuinely excels there. If competitors in your market have highlight badges you don't, you've found concrete, actionable improvement targets. Track these over time to measure the impact of operational changes — did installing a new washer boost your `amenities` and improve `rating.cleanliness` within 30 days?

### ❓ Frequently Asked Questions

**How do I search for listings in a specific city?**
Simply pass the city name in the `locationQueries` array. For example, `["London"]`, `["Brooklyn, NY"]`, or `["Tokyo, Shibuya"]`. The scraper accepts natural language location strings exactly as you'd type them into Airbnb's search bar. For more targeted results, use neighborhood names like "Le Marais, Paris" or "Kreuzberg, Berlin." You can pass multiple locations in one run — each location is searched independently and results are merged into a single dataset.

**How many listings can I scrape in one run?**
There is no hard limit. The `maxResults` parameter controls the maximum; if you don't set it, the scraper will paginate through all available search results for your queries. Each location query pages through up to 15 pages of search results (approximately 300-450 listings per query, depending on Airbnb's current result count). For large-scale extractions spanning multiple cities, set `concurrency` to a higher value (10-20) to speed up detail-page scraping.

**Do I need an Airbnb account or API key?**
No. The scraper works entirely with publicly accessible Airbnb data. No login, no API key, no special access required. Airbnb's data is available through their public web interface, and this scraper extracts what's visible to any normal website visitor. You can run it immediately after creating your Apify account — zero setup friction.

**Which countries and regions does this work in?**
All of them. Airbnb operates in 220+ countries and regions, and this scraper works everywhere Airbnb has listings. The `locale` parameter controls the language and regional formatting of results (11 options from en-US to ar-XX), while the `currency` parameter normalizes prices into any of 27 supported currencies. Search for "Bali, Indonesia" in IDR with bahasa Indonesia locale, or "Cape Town, South Africa" in ZAR — the scraper returns localized results just like the Airbnb website.

**How fresh is the data?**
Every run fetches live data from Airbnb in real time. Search results come from Airbnb's internal GraphQL API at the moment of execution, and each listing's detail page is fetched concurrently at scrape time. The `timestamp` field on every output record tells you exactly when the data was collected. There is no caching, no stale snapshots — what you get is what a guest would see if they visited Airbnb right now.

**What export formats are supported?**
Apify provides built-in export to JSON, CSV, Excel (XLSX), XML, HTML Table, and RSS. You can download results directly from the Apify Console, access them via the Apify API, or set up integrations with Google Sheets, Google Drive, Slack, Make (formerly Integromat), Zapier, and Airbyte. The structured JSON output is also ideal for direct ingestion into databases, data warehouses, and analytics pipelines.

**How is this different from other Airbnb scrapers on the Apify Store?**
Four key differences: **Price** — at $0.50/1,000 results, it's the most cost-effective option. **Depth** — 70+ fields including full pricing breakdown with individual fees and taxes, structured amenities with icons, property highlights, co-host data, breadcrumbs, and cancellation policies that competitors miss. **Flexibility** — 11 locales and 27 currencies for truly global research. **Free trial** — you can test with real properties immediately without a subscription commitment. Many competitors cap results at 1,000 or don't expose line-item pricing.

**Can I scrape reviews with this actor?**
This actor focuses on listing-level data (property details, pricing, host info, amenities). For dedicated review extraction with full pagination support, use our companion [Airbnb Reviews Scraper](https://apify.com/epicscrapers/airbnb-reviews-scraper), which extracts all guest reviews, ratings, reviewer profiles, and host responses from any listing URL.

### 📚 Technical Details

**How It Works** — The scraper fetches publicly available listing data from Airbnb and extracts 70+ structured fields per property. It handles search pagination, concurrent detail-page scraping, and multi-source price extraction automatically.

**Error Handling**

- **Failed detail page fetches** — Individual page failures are caught and logged without aborting the entire run. The scraper continues with remaining URLs.
- **Missing data fields** — Every field defaults to `null` or its type-appropriate empty value, so downstream analysis never breaks on missing keys.
- **Invalid or missing input** — Validates that at least one `locationQueries` or `startUrls` is provided before starting.

**Data Integrity**

- **Deduplication** — Duplicate URLs (same listing appearing in multiple location queries) are automatically removed before scraping.
- **Price merging** — Search-result prices are mapped to detail-page results by listing ID, ensuring price data even when the detail page doesn't embed pricing in the HTML.
- **Configurable limits** — The `maxResults` parameter provides precise control over data volume; the `concurrency` parameter controls how many detail pages are fetched simultaneously.

### SEO Keywords

Airbnb scraper, Airbnb data extractor, vacation rental scraper, Airbnb API alternative, property data scraper, Airbnb pricing analysis, vacation rental market research, real estate investment tool, Airbnb host analysis, short-term rental data, Airbnb listing extractor, travel data scraper, Airbnb rent estimator, Airbnb market analysis, short-term rental analytics, Airbnb competitor analysis, Airbnb price tracker, vacation rental data API, Airbnb listing details, Airbnb bedroom scraper, Airbnb host finder, Airbnb property data, scrape Airbnb listings, Airbnb web scraper, Airbnb data collection, vacation rental ROI calculator, Airbnb nightly rate scraper, Airbnb cleaning fee data, Airbnb Superhost analysis, Airbnb amenity tracker, global vacation rental data, short-term rental market data, property investment research, Airbnb search results scraper, bulk Airbnb scraper, Airbnb pricing intelligence, real estate data mining, travel industry data, hospitality market research

### ⚠️ Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by Airbnb, Airbnb Inc., or any of their subsidiaries**. All trademarks are the property of their respective owners.

This Actor accesses only publicly available listing data on `airbnb.com`. You are solely responsible for ensuring your use complies with the site's Terms of Service and applicable laws.

# Actor input Schema

## `locationQueries` (type: `array`):

List of location queries to scrape. Example: London, Manchester, Birmingham, etc.

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

List of Airbnb URLs to start with. You can use search URLs or direct property URLs.

## `enrichUserProfiles` (type: `boolean`):

If enabled, the actor makes extra requests for each host/co-host in every listing to get more detailed user info. This increases cost and runtime.

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

Date must be in YYYY-MM-DD format, e.g. 2025-06-02.

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

Date must be in YYYY-MM-DD format, e.g. 2025-06-07.

## `locale` (type: `string`):

Localized results in this locale will be extracted (language and region).

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

Currency for prices.

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

No description

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

No description

## `minBeds` (type: `integer`):

No description

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

No description

## `minBathrooms` (type: `integer`):

No description

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

Number of adults.

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

Number of children.

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

Number of infants.

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

Number of pets.

## `maxResults` (type: `integer`):

Maximum number of listings to scrape across all queries. If not set, all available results are scraped.

## `concurrency` (type: `integer`):

Number of concurrent requests for detail pages.

## Actor input object example

```json
{
  "locationQueries": [
    "London"
  ],
  "startUrls": [],
  "locale": "en-US",
  "currency": "USD",
  "adults": 1,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "concurrency": 5
}
```

# 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 = {
    "locationQueries": [
        "London"
    ],
    "locale": "en-US",
    "currency": "USD"
};

// Run the Actor and wait for it to finish
const run = await client.actor("epicscrapers/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 = {
    "locationQueries": ["London"],
    "locale": "en-US",
    "currency": "USD",
}

# Run the Actor and wait for it to finish
run = client.actor("epicscrapers/airbnb-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locationQueries": [
    "London"
  ],
  "locale": "en-US",
  "currency": "USD"
}' |
apify call epicscrapers/airbnb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=epicscrapers/airbnb-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Scraper CHEAP",
        "description": "[⭐$0.5/1k] Scrape Airbnb listing details - cheap and reliable. Useful for lead generation and market research. Enter query or search url, and we provide details about all the listings.  Prices, ratings, host info, amenities, reviews, cancellation policies, and more",
        "version": "0.0",
        "x-build-id": "82pBQTh6fT8LNCXMu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/epicscrapers~airbnb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-epicscrapers-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/epicscrapers~airbnb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-epicscrapers-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/epicscrapers~airbnb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-epicscrapers-airbnb-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "locationQueries": {
                        "title": "Location Queries",
                        "type": "array",
                        "description": "List of location queries to scrape. Example: London, Manchester, Birmingham, etc.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "List of Airbnb URLs to start with. You can use search URLs or direct property URLs.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "enrichUserProfiles": {
                        "title": "Enrich User Profiles",
                        "type": "boolean",
                        "description": "If enabled, the actor makes extra requests for each host/co-host in every listing to get more detailed user info. This increases cost and runtime."
                    },
                    "checkIn": {
                        "title": "Check-In Date",
                        "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
                        "type": "string",
                        "description": "Date must be in YYYY-MM-DD format, e.g. 2025-06-02."
                    },
                    "checkOut": {
                        "title": "Check-Out Date",
                        "pattern": "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
                        "type": "string",
                        "description": "Date must be in YYYY-MM-DD format, e.g. 2025-06-07."
                    },
                    "locale": {
                        "title": "Locale",
                        "enum": [
                            "en-US",
                            "de-DE",
                            "fr-FR",
                            "es-ES",
                            "it-IT",
                            "pt-BR",
                            "ja-JP",
                            "ko-KR",
                            "zh-CN",
                            "ru-RU",
                            "ar-XX"
                        ],
                        "type": "string",
                        "description": "Localized results in this locale will be extracted (language and region).",
                        "default": "en-US"
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "JPY",
                            "AUD",
                            "CAD",
                            "CHF",
                            "CNY",
                            "SEK",
                            "NOK",
                            "DKK",
                            "INR",
                            "BRL",
                            "MXN",
                            "HKD",
                            "SGD",
                            "NZD",
                            "KRW",
                            "TRY",
                            "ZAR",
                            "PLN",
                            "CZK",
                            "HUF",
                            "ILS",
                            "AED",
                            "THB",
                            "VND"
                        ],
                        "type": "string",
                        "description": "Currency for prices.",
                        "default": "USD"
                    },
                    "priceMin": {
                        "title": "Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": ""
                    },
                    "priceMax": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": ""
                    },
                    "minBeds": {
                        "title": "Minimum Beds",
                        "minimum": 0,
                        "type": "integer",
                        "description": ""
                    },
                    "minBedrooms": {
                        "title": "Minimum Bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": ""
                    },
                    "minBathrooms": {
                        "title": "Minimum Bathrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": ""
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Number of adults.",
                        "default": 1
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of children.",
                        "default": 0
                    },
                    "infants": {
                        "title": "Infants",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of infants.",
                        "default": 0
                    },
                    "pets": {
                        "title": "Pets",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of pets.",
                        "default": 0
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape across all queries. If not set, all available results are scraped."
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Number of concurrent requests for detail pages.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
