# Airbnb Scraper API: Listings, Prices, Amenities & Hosts (`sauliusautomatesit/airbnb-scraper-api`) Actor

Airbnb API and scraper: listings from any city search or room link with price for your dates, rating, category ratings, amenities, host, location, house rules and photos. No login, no browser. $2 per 1,000 listings.

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

## Pricing

from $1.70 / 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 API and scraper: listings, prices, amenities and hosts

**Airbnb Scraper API** gives you Airbnb listings as clean JSON: from any city search, any Airbnb search link or a list of room links. Each listing comes with the price for your dates, rating and review count, the six category ratings, beds, bedrooms and bathrooms, every amenity, the host (superhost, response rate, months hosting), location with coordinates, house rules, check-in times and all photos.

No login, no browser, no cookies. **$2 per 1,000 listings**, full details included. Half the price of the leading Airbnb scrapers.

Airbnb closed its official API to new partners years ago. This Actor is the practical Airbnb API alternative: call it from your code, Make, n8n, Zapier, or an AI agent through MCP.

#### What you can do with it

- **Short term rental market research**: every listing in a city with nightly price, occupancy capacity, ratings and amenities, ready for an AirDNA style analysis.
- **Price monitoring**: run the same search on a schedule with fixed dates and track nightly rates of competing listings.
- **Property management and investing**: compare your listing against the neighbourhood on price, rating, amenities and superhost status.
- **Lead lists of hosts**: host name, profile link, superhost flag, number of reviews and months hosting.
- **Travel apps and AI agents**: live availability and total price for given dates and guests.

#### Input

| Field | What it does |
|---|---|
| `locationQueries` | Cities or regions as you would type them on Airbnb: `Paris`, `Austin, TX`, `Lisbon, Portugal`. |
| `startUrls` | Airbnb search links (any filters you set on Airbnb are kept) and room links like `https://www.airbnb.com/rooms/12345`. |
| `maxListings` | Listings per search (default 100). |
| `checkIn`, `checkOut` | Dates like `2026-11-20`. With dates, prices are the real total for the stay and only available listings are returned. |
| `adults`, `children`, `infants`, `pets` | Guests. |
| `roomType` | `entire`, `private`, `shared` or `hotel`. |
| `priceMin`, `priceMax` | Nightly price range in your currency. |
| `minBedrooms`, `minBeds`, `minBathrooms` | Size filters. |
| `currency` | `USD`, `EUR`, `GBP`, and so on. |
| `includeDetails` | On by default: opens each listing page for the full data. Off gives the search card only, faster, same price. |
| `splitByPrice` | Airbnb shows at most 270 listings per search. When a search hits that cap, the Actor runs it again in 13 nightly price bands to reach more (up to a few thousand per city). |

Example:

```json
{
  "locationQueries": ["Lisbon"],
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-23",
  "adults": 2,
  "roomType": "entire",
  "maxListings": 500,
  "currency": "EUR"
}
```

#### Output

One row per listing:

```json
{
  "id": "1668749052818844759",
  "url": "https://www.airbnb.com/rooms/1668749052818844759",
  "name": "Unique glass-roof loft near Notre-Dame 8 pax AC",
  "title": "Apartment in Paris",
  "propertyType": "Entire rental unit",
  "roomType": "ENTIRE_HOME",
  "personCapacity": 8,
  "bedrooms": 4,
  "beds": 8,
  "bathrooms": 3,
  "price": { "total": 3373, "totalText": "$3,373", "originalTotal": 4528, "nights": 5, "perNight": 674.46, "qualifier": "for 5 nights" },
  "checkIn": "2026-10-31",
  "checkOut": "2026-11-05",
  "rating": 5,
  "reviewsCount": 4,
  "categoryRatings": { "cleanliness": 5, "accuracy": 4.8, "checkin": 5, "communication": 5, "location": 5, "value": 4.8 },
  "isSuperhost": false,
  "isGuestFavorite": false,
  "amenities": ["Wifi", "Kitchen", "Dedicated workspace", "Washer"],
  "host": { "id": "1668748842844981751", "name": "Sophie", "isSuperhost": false, "isVerified": true, "rating": 5, "reviewsCount": 4, "monthsHosting": 5, "responseRate": "100%", "responseTime": "Responds within an hour" },
  "location": { "city": "Paris", "address": "Paris, Île-de-France, France", "neighbourhood": "5th Arrondissement, Paris", "latitude": 48.84945, "longitude": 2.35376 },
  "checkInTime": "Check-in after 4:00 PM",
  "checkOutTime": "Checkout before 10:00 AM",
  "registrationNumber": "7510516391166",
  "description": "Beautiful loft with a glass roof in the heart of Paris...",
  "photos": [{ "url": "https://a0.muscache.com/im/pictures/...", "room": "Living room" }]
}
```

Also in every row: `subtitle`, `badges`, `ratingDistribution`, `reviewTags`, `amenityGroups` (grouped, with amenities not included), `highlights`, `houseRules`, `safetyAndProperty`, `sleepingArrangements`, `descriptionLanguage`, `thumbnail`, `searchLocation`, `input` and `scrapedAt`.

Room links without a search give everything except the price, which Airbnb only shows in search results. To get prices for specific listings, search their city with your dates.

Links that are not found give a free row with `error: "NOT_FOUND"`. You are never charged for error rows.

#### Pricing

Pay per event:

| Event | Price |
|---|---|
| Listing (full details included) | $2 per 1,000 ($0.002 each) |
| Actor start | $0.00005 per run |

Store discounts apply: Bronze $1.90, Silver $1.80, Gold and above $1.70 per 1,000 listings. 10,000 Airbnb listings with full details cost $20 on the free tier.

#### Use it as an API

```bash
curl -X POST "https://api.apify.com/v2/acts/sauliusautomatesit~airbnb-scraper-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locationQueries": ["Barcelona"], "checkIn": "2026-12-04", "checkOut": "2026-12-06", "adults": 2, "maxListings": 50}'
```

For AI agents: `https://mcp.apify.com/?tools=sauliusautomatesit/airbnb-scraper-api`.

#### Limits

- Airbnb shows up to 270 listings per search. With `splitByPrice` on, a search that hits the cap is repeated in nightly price bands, which reaches a few thousand listings in large cities. Smaller areas (a neighbourhood instead of a city) also help.
- Reviews text is not included; ratings, category ratings, rating distribution and review tags are.
- Calendar availability by day is not included; use check-in and check-out dates to see whether a listing is available and its price.

#### FAQ

**Is there an official Airbnb API?** Only for approved hosting software partners, and it does not give search data. This Actor reads the same public pages any visitor sees.

**Do I need a proxy?** No. Apify datacenter proxy is used by default and is included.

**Is it legal?** It collects publicly available listing data. You are responsible for how you use it, including any personal data such as host names, under GDPR and similar laws.

# Actor input Schema

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

Cities, neighbourhoods or regions, the way you would type them into Airbnb: "Paris", "Austin, TX", "Lisbon, Portugal". Each search walks Airbnb's result pages.

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

Airbnb search links (https://www.airbnb.com/s/Paris/homes?..., with any filters you set on Airbnb) and room links (https://www.airbnb.com/rooms/12345). Any Airbnb country site works.

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

Stop each location or search link after this many listings. Airbnb shows up to 270 per search; above that the search is split into nightly price bands automatically (see below), so a city can give a few thousand.

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

Date like 2026-11-20. With check-out, prices are the real total for these dates and only available listings are returned. Leave both empty for Airbnb's default dates.

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

Date like 2026-11-23.

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

Guests for availability and price. Empty means Airbnb's default.

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

Optional filter.

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

Optional filter.

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

Optional filter.

## `roomType` (type: `string`):

Entire homes, private rooms, shared rooms or hotel rooms only.

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

In the chosen currency.

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

In the chosen currency.

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

Optional filter.

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

Optional filter.

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

Optional filter.

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

Three letter code for prices: USD, EUR, GBP, CAD, AUD...

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

Open every listing's page for description, all amenities, host (superhost, response rate, months hosting), category ratings, house rules, location and all photos. Off gives the search card only (price, rating, beds, coordinates, photos): faster, same price.

## `splitByPrice` (type: `boolean`):

When a search hits Airbnb's 270 listing cap, run it again in 13 nightly price bands to reach more listings. Ignored when you set a price filter.

## `maxConcurrency` (type: `integer`):

Capped at one per 64 MB of run memory (8 at the default 512 MB).

## Actor input object example

```json
{
  "locationQueries": [
    "Lisbon"
  ],
  "maxListings": 20,
  "roomType": "any",
  "currency": "USD",
  "includeDetails": true,
  "splitByPrice": true,
  "maxConcurrency": 10
}
```

# Actor output Schema

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

One item per Airbnb listing. Download as JSON, CSV or Excel, or read it from this API endpoint.

## `summary` (type: `string`):

Listings delivered per search, errors and requests.

# 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": [
        "Lisbon"
    ],
    "maxListings": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/airbnb-scraper-api").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": ["Lisbon"],
    "maxListings": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/airbnb-scraper-api").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 '{
  "locationQueries": [
    "Lisbon"
  ],
  "maxListings": 20
}' |
apify call sauliusautomatesit/airbnb-scraper-api --silent --output-dataset

```

## MCP server setup

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

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/d9P1KSIAYnZYEoqVZ/builds/W1D0bWjewCR0olHnA/openapi.json
