# Airbnb Full-Data Scraper (`hotels-scrapers/airbnb-scraper`) Actor

Scrape Airbnb listings with 12-month forward calendar data and derived STR metrics (occupancyRate, ADR, RevPAR). Supports location search and direct listing URL modes. Uses curl\_cffi with dynamic operationId extraction — no hardcoded hashes.

- **URL**: https://apify.com/hotels-scrapers/airbnb-scraper.md
- **Developed by:** [Hotels Scraper](https://apify.com/hotels-scrapers) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 listings

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 – Occupancy Rate, ADR & RevPAR Extractor

Extract Short-Term Rental (STR) performance metrics from any Airbnb market. Search by location and dates to collect occupancy rate, Average Daily Rate (ADR), and Revenue Per Available Room (RevPAR) across hundreds of listings — no Airbnb account or API key required.

### What data does this Airbnb scraper extract?

Each record includes:

- **Listing details** — title, property type, room type, bedrooms, beds, bathrooms, max guests
- **Location** — city, country, GPS coordinates (latitude, longitude)
- **Host info** — host ID, host name, Superhost status
- **Reviews** — total review count, average star rating
- **STR metrics** — occupancy rate, ADR, RevPAR, booked nights, available nights (12-month forward window)
- **Optional** — individual guest reviews, full host portfolio listings

### How to use the Airbnb Scraper

1. Open the actor on Apify Store and click **Try for free**
2. Choose your mode: **Search** (by location and dates) or **Direct** (paste Airbnb listing URLs)
3. For Search mode — enter a city or address, check-in date, and check-out date
4. Set your maximum number of listings (default: 20, max: 200)
5. Click **Start** — results appear in your Apify dataset within minutes

### Input Options

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `mode` | string | `search` | `search` (location + dates) or `direct` (listing URLs) |
| `location` | string | — | City or address — required for search mode |
| `checkIn` | string | — | Check-in date (YYYY-MM-DD) — required for search mode |
| `checkOut` | string | — | Check-out date (YYYY-MM-DD) — required for search mode |
| `listingUrls` | string[] | — | Airbnb listing URLs — required for direct mode |
| `maxListings` | integer | 20 | Maximum listings to scrape (1–200) |
| `includeReviews` | boolean | false | Fetch individual guest reviews per listing |
| `includeHostPortfolio` | boolean | false | Fetch all other listings by the same host |
| `currency` | string | USD | ISO 4217 currency code for price data |
| `proxyConfiguration` | object | RESIDENTIAL | Apify Proxy configuration (residential required) |

### Output Example

```json
{
  "listingId": "20648703",
  "listingUrl": "https://www.airbnb.com/rooms/20648703",
  "title": "Cosy studio in Paris",
  "propertyType": "Entire rental unit",
  "bedrooms": 1,
  "maxGuests": 2,
  "city": "Paris",
  "country": "France",
  "hostName": "Marie",
  "isSuperhost": true,
  "reviewsCount": 142,
  "avgRating": 4.87,
  "occupancyRate": 0.72,
  "ADR": 145.50,
  "RevPAR": 104.76,
  "bookedNights": 263,
  "availableNights": 102,
  "totalNights": 365,
  "currency": "USD",
  "scrapedAt": "2026-04-25T10:00:00Z"
}
````

### STR Metrics Explained

| Metric | Description |
|--------|-------------|
| `occupancyRate` | Share of the next 12 months where the listing is booked |
| `ADR` | Average nightly rate across the 12-month forward window |
| `RevPAR` | ADR × occupancy rate — revenue per available night |
| `bookedNights` | Days marked unavailable in the forward calendar |
| `availableNights` | Days open for booking in the forward calendar |

### Use Cases

**Short-Term Rental Investors**
Identify high-occupancy markets and benchmark a target property against comparable listings before purchasing.

**Property Managers & Hosts**
Monitor competitor ADR and RevPAR to optimize your own pricing strategy across any market or season.

**Real Estate Analysts & Researchers**
Build STR market dashboards, track seasonal occupancy trends, and validate investment theses with real Airbnb data.

**Revenue Management Tools**
Pipe structured STR data into your pricing engine, CRM, or business intelligence platform.

### Pricing

| Tier | Price | Best For |
|------|-------|----------|
| Free trial | 50 listings free | Evaluate before paying |
| Pay-per-result | $2.00 / 1,000 listings | Ad-hoc market research |
| Subscription | $39/month (10K listings included) | Ongoing portfolio monitoring |

### FAQ

**Do I need an Airbnb account?**
No — the actor accesses publicly available data from Airbnb. No login or API key is required.

**How fresh is the data?**
Every run fetches live data directly from Airbnb at run time. Schedule daily runs for continuous market monitoring.

**Can I scrape specific listings by URL?**
Yes — use `mode: direct` and paste any `https://www.airbnb.com/rooms/...` URL in the `listingUrls` field.

**How accurate is ADR?**
ADR is derived from Airbnb's 12-month forward availability calendar and reflects listed nightly prices, not historical booking prices.

**What is RevPAR?**
Revenue Per Available Room-night — a standard STR industry metric calculated as ADR × occupancy rate.

**Can I export results to Google Sheets or a database?**
Yes — Apify datasets export to JSON, CSV, and Excel. Use Apify integrations to send data to Google Sheets, Airtable, or any webhook.

**Does it work for cities outside the US?**
Yes — the scraper works on all Airbnb markets worldwide. Enter any city name or address in the `location` field.

***

*Airbnb is a trademark of Airbnb, Inc. This actor is not affiliated with or endorsed by Airbnb. All data extracted is publicly available on the Airbnb website.*

# Actor input Schema

## `mode` (type: `string`):

'search': find listings by location + dates. 'direct': process specific listingUrls\[].

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

City, region, or address. Required in search mode.

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

YYYY-MM-DD. Required in search mode.

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

YYYY-MM-DD. Required in search mode.

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

Array of https://www.airbnb.com/rooms/... URLs. Required in direct mode.

## `maxListings` (type: `integer`):

Maximum number of listings to scrape. Between 1 and 200.

## `includeReviews` (type: `boolean`):

Fetch reviews for each listing (adds requests; default off).

## `includeHostPortfolio` (type: `boolean`):

Fetch all listings by the same host.

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

ISO 4217 currency code for pricing (e.g. USD, EUR, GBP).

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

Residential proxy required for Airbnb WAF bypass.

## Actor input object example

```json
{
  "mode": "search",
  "location": "Paris, France",
  "checkIn": "2026-06-01",
  "checkOut": "2026-06-07",
  "maxListings": 20,
  "includeReviews": false,
  "includeHostPortfolio": false,
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "mode": "search",
    "location": "Paris, France",
    "checkIn": "2026-06-01",
    "checkOut": "2026-06-07"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hotels-scrapers/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 = {
    "mode": "search",
    "location": "Paris, France",
    "checkIn": "2026-06-01",
    "checkOut": "2026-06-07",
}

# Run the Actor and wait for it to finish
run = client.actor("hotels-scrapers/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 '{
  "mode": "search",
  "location": "Paris, France",
  "checkIn": "2026-06-01",
  "checkOut": "2026-06-07"
}' |
apify call hotels-scrapers/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Full-Data Scraper",
        "description": "Scrape Airbnb listings with 12-month forward calendar data and derived STR metrics (occupancyRate, ADR, RevPAR). Supports location search and direct listing URL modes. Uses curl_cffi with dynamic operationId extraction — no hardcoded hashes.",
        "version": "0.1",
        "x-build-id": "qch3CfxtN8OIJaRjC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/hotels-scrapers~airbnb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-hotels-scrapers-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/hotels-scrapers~airbnb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-hotels-scrapers-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/hotels-scrapers~airbnb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-hotels-scrapers-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": {
                    "mode": {
                        "title": "Input Mode",
                        "enum": [
                            "search",
                            "direct"
                        ],
                        "type": "string",
                        "description": "'search': find listings by location + dates. 'direct': process specific listingUrls[].",
                        "default": "search"
                    },
                    "location": {
                        "title": "Location (search mode)",
                        "type": "string",
                        "description": "City, region, or address. Required in search mode."
                    },
                    "checkIn": {
                        "title": "Check-in Date",
                        "type": "string",
                        "description": "YYYY-MM-DD. Required in search mode."
                    },
                    "checkOut": {
                        "title": "Check-out Date",
                        "type": "string",
                        "description": "YYYY-MM-DD. Required in search mode."
                    },
                    "listingUrls": {
                        "title": "Listing URLs (direct mode)",
                        "type": "array",
                        "description": "Array of https://www.airbnb.com/rooms/... URLs. Required in direct mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxListings": {
                        "title": "Max Listings",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape. Between 1 and 200.",
                        "default": 20
                    },
                    "includeReviews": {
                        "title": "Include Reviews",
                        "type": "boolean",
                        "description": "Fetch reviews for each listing (adds requests; default off).",
                        "default": false
                    },
                    "includeHostPortfolio": {
                        "title": "Include Host Portfolio",
                        "type": "boolean",
                        "description": "Fetch all listings by the same host.",
                        "default": false
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "ISO 4217 currency code for pricing (e.g. USD, EUR, GBP).",
                        "default": "USD"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Residential proxy required for Airbnb WAF bypass.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
