# Airbnb Scraper — Listings, Prices & Details (`vero-api/airbnb-scraper`) Actor

Get every Airbnb listing for any city, or full details for listing links: total and per-night prices with fee breakdown, ratings, photos, coordinates, amenities, house rules, cancellation policy and host info. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/vero-api/airbnb-scraper.md
- **Developed by:** [VeroAPIs](https://apify.com/vero-api) (community)
- **Categories:** Travel, Real estate, E-commerce
- **Features:** Limited permissions
- **Stats:** 13 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Airbnb Scraper — Listings, Prices, Hosts & Amenities in Minutes

Airbnb Scraper lets you **extract Airbnb data** — listings, prices, ratings, amenities, host profiles, photos, descriptions, house rules and cancellation policies — from any city or neighborhood in the world, or from a list of listing links, and download it as **JSON, CSV, Excel, or XML**. It runs entirely in the cloud, needs no coding, and returns **hundreds of listings per minute**.

Try it right away: enter a location in the input form, click **Start**, and watch the dataset fill up with structured Airbnb listing data.

### What data does Airbnb Scraper extract?

| Data | Details |
|---|---|
| 🏠 **Listing** | title, name, property type, person capacity, bedrooms, beds, bathrooms, description, listing URL, ID |
| 💰 **Prices** | price as shown, total price as a number, price per night, the check-in and check-out dates it covers, original vs. discounted price, a line-by-line breakdown of nightly rate, discounts and fees, any currency |
| 📍 **Location** | map coordinates (latitude/longitude), neighborhood and city, neighborhood description, location-verified flag |
| ⭐ **Ratings** | overall rating, number of reviews, Guest favorite badge, new-listing flag |
| 🛏️ **Amenities** | every amenity the place offers |
| ✨ **Highlights** | standout features like Self check-in, great location, or dedicated workspace |
| 👤 **Host** | name, ID, Superhost status, verification, rating, years hosting, about, co-hosts |
| 📷 **Photos** | the main thumbnail and card photos, or every listing photo with full details |
| 📋 **House rules** | house rules with their details, the host's extra requests, safety & property info, and the cancellation policy with its terms for your dates |

### How do I scrape Airbnb data?

1. **Enter a location** — a city, neighborhood, or region, e.g. `Paris, France`. Or paste **listing links** to get full details for exactly those places.
2. **Set your filters** *(optional)* — check-in and check-out dates, number of guests, price range, room types, minimum bedrooms/beds/bathrooms, currency, and language.
3. **Choose the depth** — how many listings you want, and whether to open every listing for full details (description, all photos, amenities, host, house rules, cancellation policy).
4. **Click Start** — then download the results from the **Storage** tab in any format, or send them anywhere using integrations.

### How many Airbnb listings can I scrape?

**Get every listing Airbnb shows for your area.** The default of 100 gives you a quick sample. Raise *Maximum listings* to 1,000 or more and the scraper keeps collecting until Airbnb has no new listings to show, then finishes on its own and tells you how many it found — for example, about 390 listings for Chefchaouen, Morocco in under a minute. Big cities give you many hundreds of listings per search.

Narrow your search with dates, price, and room-type filters to zero in on exactly the listings you care about.

### Fast by default, detailed on demand

By default the scraper returns a rich result for every listing — title, name, price, total and per-night price, rating, review count, photos, coordinates, bed info, and Guest favorite status — straight from search, **hundreds per minute**. Flip on **Include full details** to also open each listing for its description, every photo, amenities, host, highlights, house rules, and cancellation policy.

### Full details for specific listings

Already know which places you want? Paste their links (`https://www.airbnb.com/rooms/12345678`) or IDs into **Listing URLs** and get full details for each one: name, type, rating, reviews, coordinates, every photo, description, amenities, house rules, cancellation policy and host profile. Add check-in and check-out dates to also get each listing's price for that trip. Great for tracking your own listings or a list of competitors.

### Compare prices across listings

Every listing from a search comes with prices you can sort and compare right away:

- **`totalPrice`** — the total for the stay as a number, ready for spreadsheets.
- **`pricePerNight`** — the total divided by the number of nights.
- **`checkIn`, `checkOut`, `nights`** — the exact stay the price is for.
- **`priceBreakdown`** — each line of Airbnb's price details, like `5 nights x $264.00`, `Long stay discount` or `Resort fee`, with the amount as a number.

Set your own dates to price a specific trip. Without dates, each listing from a search is priced for upcoming dates Airbnb suggests, and the row tells you which ones. Listings from **Listing URLs** get the same price fields when you add your dates.

### Why scrape Airbnb?

- **Market research** — analyze supply, pricing, and competition in any city before investing in a short-term rental.
- **Dynamic pricing** — monitor competitor nightly rates, discounts and fees to price your own listings optimally.
- **Real estate analysis** — evaluate the short-term rental potential of neighborhoods using real data.
- **Travel products** — enrich your app or website with live accommodation data and photos.
- **Vacation rental management** — track your portfolio's ratings, rules and cancellation policies across markets.
- **Research & journalism** — study the impact of short-term rentals on housing markets.

### Input example

Search a location for your trip dates:

```json
{
    "location": "Paris, France",
    "checkIn": "2027-06-10",
    "checkOut": "2027-06-15",
    "adults": 2,
    "currency": "USD",
    "priceMax": 300,
    "maxItems": 100,
    "includeDetails": true
}
```

Or get full details for specific listings:

```json
{
    "listingUrls": [
        "https://www.airbnb.com/rooms/12345678",
        "87654321"
    ]
}
```

Check-in must be today or later, and check-out must come after check-in.

### Output example (abridged)

```json
{
    "id": "1617296724435086551",
    "url": "https://www.airbnb.com/rooms/1617296724435086551",
    "title": "Rental unit in Paris",
    "name": "Premium Studio - Golf view - Chic and peaceful setting",
    "propertyType": "Entire rental unit",
    "rating": 5,
    "reviewsCount": 5,
    "ratingLocalized": "5.0 (5)",
    "price": "$1,160",
    "originalPrice": "$1,320",
    "priceQualifier": "for 5 nights",
    "totalPrice": 1160,
    "pricePerNight": 232,
    "currency": "USD",
    "checkIn": "2027-06-10",
    "checkOut": "2027-06-15",
    "nights": 5,
    "priceBreakdown": [
        { "label": "5 nights x $264.00", "price": "$1,320.00", "amount": 1320 },
        { "label": "Long stay discount", "price": "-$160.00", "amount": -160 },
        { "label": "Price after discount", "price": "$1,160.00", "amount": 1160 }
    ],
    "latitude": 48.8566,
    "longitude": 2.3522,
    "badges": ["Guest favorite"],
    "isGuestFavorite": true,
    "isNewListing": false,
    "personCapacity": 2,
    "overview": ["2 guests", "1 bedroom", "1 bed", "1 bath"],
    "bedrooms": 1,
    "beds": 1,
    "bathrooms": 1,
    "description": "Luxury Studio with Golf View – Calm & Elegant…",
    "locationSummary": "Paris, Île-de-France, France",
    "neighborhoodDescription": "A quiet residential street, a short walk from cafés, markets and the metro.",
    "isLocationVerified": true,
    "amenities": ["Wifi", "Kitchen", "TV", "Hair dryer"],
    "highlights": [{ "title": "Self check-in", "subtitle": "Check yourself in with the lockbox." }],
    "houseRules": {
        "rules": ["Check-in after 3:00 PM", "Checkout before 11:00 AM", "No pets: Service animals only", "Quiet hours: 10:00 PM - 8:00 AM"],
        "safetyAndProperty": ["Smoke alarm installed"],
        "cancellationPolicy": "Refundable",
        "cancellationPolicies": [
            { "name": "Non-refundable", "description": "Free cancellation for 24 hours. After that, the reservation is non-refundable." },
            { "name": "Refundable", "description": "Free cancellation before June 5. Cancel before check-in on June 10 for a partial refund." }
        ]
    },
    "host": { "id": "493189568", "name": "Prestige Gallery Immo", "isSuperhost": true, "ratingAverage": 4.81, "ratingCount": 312, "yearsHosting": 3 },
    "photos": ["https://a0.muscache.com/im/pictures/…"]
}
```

### Pricing

You pay only for the listings you get — no subscriptions, no surprises.

- **Search listings** are charged per listing delivered.
- **Listings with full details** (from *Include full details* or *Listing URLs*) are charged at the full-details price per listing. If a listing's details can't be opened, you get its search data at the lower search-listing price.
- Set a spending limit on your run and the scraper stops cleanly when it's reached, keeping everything collected so far.

You'll find the current prices on the **Pricing** tab.

### FAQ

#### Does Airbnb have an official API?

Airbnb's official API is closed to the public — it's reserved for approved partners. Airbnb Scraper gives you the same kind of structured data through web scraping: run it on demand or on a schedule and get clean JSON straight from public Airbnb pages.

#### Do I get Airbnb prices?

Yes. Every listing from a search comes with the price as shown, the total as a number, the price per night, the dates it covers and a line-by-line price breakdown, in any currency Airbnb supports. Set check-in and check-out dates to get the exact total for your trip, including discounts. Without dates, each listing is priced for upcoming dates Airbnb suggests, and the `checkIn` and `checkOut` fields show which. With **Listing URLs**, add your dates and every listing comes with its price for that trip.

#### Do hotels come with full details too?

Yes. Featured hotels come with their description, every photo, amenities, highlights, house rules, cancellation policy and address. They're run by the hotel itself rather than a personal host, so their host fields stay empty.

#### Can I get the cancellation policy?

Yes. Turn on **Include full details** (or use **Listing URLs**) and every listing includes its cancellation policy. Add your trip dates to also get each cancellation option with its exact terms, like "Free cancellation before June 5".

#### What if Airbnb doesn't recognize my location?

The run stops right away with a clear message, and you aren't charged for any listings. Use a place name such as a city, region or neighborhood, like "Lisbon, Portugal".

#### Can I get Airbnb reviews too?

Yes — use our [Airbnb Reviews Scraper](https://apify.com/vero-api/airbnb-reviews-scraper). Paste the listing URLs from this scraper's results and get every guest review with its rating, date, and the host's reply.

#### How fast is it?

In the default mode (search results), hundreds of listings per minute. With full details enabled, several listings per second.

#### Can I run it on a schedule?

Yes — use the **Schedule** option to run it hourly, daily, weekly, or with any cron expression, and pair it with webhooks or integrations to push fresh Airbnb data wherever you need it.

#### Is this an official Airbnb product?

No. Airbnb Scraper is an independent tool. It is not affiliated with, endorsed by, or sponsored by Airbnb, Inc.

### Integrations

Connect Airbnb Scraper to **Google Sheets, Make, Zapier, n8n, Slack, Airbyte**, or any tool via webhooks. Developers can start runs and fetch results programmatically with the [API](https://docs.apify.com/api/v2) using the JavaScript or Python clients — see the **API** tab for ready-made code examples.

### More tools from us

- [Airbnb Reviews Scraper](https://apify.com/vero-api/airbnb-reviews-scraper) — every guest review of any Airbnb listing, with ratings, dates, translations and host replies.
- [Google Maps Reviews Scraper](https://apify.com/vero-api/google-maps-reviews-scraper) — reviews of hotels, restaurants and any other business on Google Maps.
- [Instagram Posts Scraper](https://apify.com/vero-api/instagram-posts-scraper) — caption, likes, comments, location and media from any Instagram post link.
- [Website Screenshot Generator](https://apify.com/vero-api/website-screenshot) — full-page, mobile and PDF captures of any website.

### Feedback and feature requests

Missing a field you need? Open an issue in the **Issues** tab — feedback directly shapes what gets added next.

# Actor input Schema

## `location` (type: `string`):

Type the city, neighborhood or region to search, like "Paris, France" or "Brooklyn, New York". Use a place name rather than coordinates.

## `listingUrls` (type: `array`):

Paste Airbnb listing links (like https://www.airbnb.com/rooms/12345678) or listing IDs to get full details for exactly those places. Add check-in and check-out dates to also get each place's price for your trip. When you add listings here, the location search is skipped.

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

Pick your arrival date (YYYY-MM-DD), today or later. Add it with a check-out date to get prices for your exact trip. Leave both empty and each searched listing is priced for upcoming dates Airbnb suggests.

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

Pick your departure date (YYYY-MM-DD), after the check-in date. Use it together with the check-in date.

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

Number of adult guests.

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

Number of children.

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

Number of infants.

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

Number of pets.

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

Only show places at or above this nightly price (in the chosen currency).

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

Only show places at or below this nightly price (in the chosen currency).

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

Pick the kinds of places to include. Leave empty to include them all.

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

Only show places with at least this many bedrooms.

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

Only show places with at least this many beds.

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

Only show places with at least this many bathrooms.

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

Currency for all prices.

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

Language for titles and descriptions.

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

Enter how many listings you want from the location search. 100 is a quick sample; raise it to 1000 or more to get every listing Airbnb shows for the area.

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

Turn on to also get each place's description, all photos, amenities, house rules, cancellation policy, host profile and capacity. Off by default for fast results that still include title, price, rating, reviews, photos, coordinates and bed info. Listings from Listing URLs always come with full details.

## Actor input object example

```json
{
  "location": "Paris, France",
  "adults": 1,
  "currency": "USD",
  "locale": "en",
  "maxItems": 100,
  "includeDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

One row per Airbnb listing: id, url, name, title, price, totalPrice, pricePerNight, currency, checkIn, checkOut, rating, reviewsCount, latitude, longitude and photos, plus description, amenities, houseRules (with cancellation policy) and host when full details are on.

# 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 = {
    "location": "Paris, France"
};

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

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

```

## MCP server setup

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