# Airbnb Scraper (`goat255/airbnb-scraper`) Actor

Scrape Airbnb listings and pricing without a login. Search any destination for available stays with nightly and total price, or pull a single listing's full detail by URL. Walks pagination across multiple pages up to your chosen limit.

- **URL**: https://apify.com/goat255/airbnb-scraper.md
- **Developed by:** [Goutam Soni](https://apify.com/goat255) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

Extract Airbnb listings, prices, ratings, and availability from any destination with no login and no API key. Search a city, region, or neighborhood to pull every available stay with nightly and total price, or fetch a single listing's full detail by URL. Pagination is walked automatically up to the limit you set, so you get the full result set, not just the first page.

### What it does

- **Location search.** Give it any city, region, or neighborhood and get back available listings with name, title, property type, bedrooms, beds, bathrooms, rating, review count, price, original (struck-through) price, currency, superhost flag, coordinates, and photos.
- **Listing detail by URL or id.** Returns the listing identity, property and room type, guest capacity, rating, review count, coordinates, the full amenities list, and photos.
- **Real prices in your currency.** Choose from common currencies. Optionally set check-in and check-out dates so prices reflect the exact nights, including a per-line price breakdown.
- **Automatic pagination.** Walks through every page of a search until your `maxResultsPerSource` is reached or the search runs out. No manual page handling.
- **Clean, normalized output.** Every row follows one stable schema with the same keys in the same order, ready for spreadsheets, databases, or downstream automation.
- **No account required.** No password, no token, no cookies. Provide locations or listing links and it returns structured rows.

### Use cases

- **Short-term rental market research.** Pull every listing in a target city to study supply, pricing bands, property mix, and superhost share.
- **Dynamic pricing and revenue management.** Track nightly and total prices across a destination over time to benchmark your own listing against the local market.
- **Lead generation for property services.** Build lists of active hosts and properties in a region for cleaning, photography, management, or insurance outreach.
- **Travel and relocation planning.** Compare availability and price across multiple destinations and date ranges in one run.
- **Investment and feasibility analysis.** Estimate occupancy potential and average daily rate for a neighborhood before buying or building.

### Input

| Field | Type | Description |
|---|---|---|
| `locations` | array | Destinations to search. City, region, or neighborhood names (e.g. `Lisbon Portugal`, `Barcelona Spain`). |
| `listingUrls` | array | Listing links or numeric ids to fetch full detail for (e.g. `https://www.airbnb.com/rooms/12345678`). |
| `maxResultsPerSource` | integer | Cap on listings returned per location search. Default `100`. Pagination is walked across multiple pages until this is reached. |
| `currency` | string | Currency for all prices. Default `USD`. Choose from USD, EUR, GBP, CAD, AUD, INR, JPY, BRL, MXN, AED. |
| `checkIn` | string | Optional check-in date `YYYY-MM-DD`. When set with a check-out date, prices reflect those nights. |
| `checkOut` | string | Optional check-out date `YYYY-MM-DD`. |
| `adults` | integer | Number of adult guests used to size and price results. Default `1`. |
| `concurrency` | integer | How many sources to process in parallel. Default `5`. |
| `proxyConfig` | object | Proxy routing. Residential proxies are recommended for reliable results at scale. |

#### Example input

```json
{
  "locations": ["Lisbon Portugal", "Barcelona Spain"],
  "maxResultsPerSource": 200,
  "currency": "EUR",
  "checkIn": "2026-08-10",
  "checkOut": "2026-08-15",
  "adults": 2
}
````

### Output

Each listing is one clean row. Keys are ordered by importance: identity first, then metrics, then attributes, media, and metadata.

```json
{
  "type": "listing",
  "id": "12345678",
  "url": "https://www.airbnb.com/rooms/12345678",
  "name": "Bright studio near the old town",
  "title": "Flat in Lisbon",
  "rating": 4.92,
  "reviewsCount": 148,
  "price": "€620",
  "originalPrice": "€700",
  "priceQualifier": "for 5 nights",
  "currency": "EUR",
  "propertyType": "Flat",
  "roomType": null,
  "personCapacity": null,
  "bedrooms": 1,
  "beds": 2,
  "bathrooms": 1,
  "isSuperhost": true,
  "amenities": [],
  "badges": ["Guest favorite"],
  "priceBreakdown": [
    { "description": "5 nights x €124", "amount": "€620.00" }
  ],
  "images": ["https://example.com/photo-1.jpg"],
  "latitude": 38.7169,
  "longitude": -9.1399,
  "checkin": "2026-08-10",
  "checkout": "2026-08-15"
}
```

#### Key fields

- `name`, `title`, `url`, `id` identify the listing. `name` is the host's listing title; `title` is the short type-and-place label (e.g. "Flat in Lisbon").
- `rating` and `reviewsCount` are the average score and number of reviews. New listings with no reviews yet return `null` for both.
- `price` is the displayed total for the chosen dates and currency. `originalPrice` is the struck-through price and is present only when the listing is discounted. `priceBreakdown` itemizes the total.
- `propertyType`, `bedrooms`, `beds`, `bathrooms`, and `isSuperhost` describe the stay. `roomType`, `personCapacity`, and `amenities` are filled for listing-detail rows (from a listing URL) and are empty for search rows.

### FAQ

**Is it free? What does it cost?**
The actor is pay-per-result, so you are billed for the listings you receive. There is no separate platform or login cost. New Apify accounts include free monthly usage credits you can run it with.

**Do I need an Airbnb account, login, or API key?**
No. There is no account, password, cookie, or API key to configure. Provide locations or listing links and run it.

**How many listings can I get per search?**
Set `maxResultsPerSource` to your target. The scraper pages through results automatically until that number is reached or the destination has no more listings. Large values run across many pages.

**How fast is it?**
A single page returns in a few seconds. A full search of a few hundred listings typically completes in well under a minute, depending on `concurrency` and proxy speed.

**Can I get prices for specific dates?**
Yes. Set `checkIn` and `checkOut` (and `adults`) and every price reflects those exact nights, with a per-line breakdown of the total.

**Why are some fields empty?**
Search rows do not carry room type, guest capacity, or amenities. Those come from listing-detail rows (pass a listing URL). New listings with no reviews return `null` rating, and `originalPrice` is only set when a listing is discounted.

### Notes

- Each page of a location search returns up to 18 listings. Pagination is handled for you.
- Set `checkIn` and `checkOut` for the most accurate prices. Without dates, search prices reflect a default upcoming stay.
- Residential proxies are recommended for reliable results at scale.

# Actor input Schema

## `locations` (type: `array`):

Destinations to search for stays. Use a city, region, or neighborhood name. Example: Paris France, Lisbon, New York.

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

Specific listing links or ids to fetch full detail for. Example: https://www.airbnb.com/rooms/12345678.

## `maxResultsPerSource` (type: `integer`):

Cap on listings returned per location search. Pagination is walked across multiple pages until this is reached or the search is exhausted. Each page holds 18 listings.

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

Currency for all prices.

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

Optional check in date (YYYY-MM-DD). When set with a check out date, prices reflect those nights. Example: 2026-08-10.

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

Optional check out date (YYYY-MM-DD). Example: 2026-08-15.

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

Number of adult guests used to size and price results.

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

How many sources to process in parallel.

## `proxyConfig` (type: `object`):

Proxy routing for requests. Residential proxies are recommended for reliable results at scale.

## Actor input object example

```json
{
  "locations": [
    "Lisbon Portugal"
  ],
  "listingUrls": [],
  "maxResultsPerSource": 100,
  "currency": "USD",
  "adults": 1,
  "concurrency": 5,
  "proxyConfig": {
    "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 = {
    "locations": [
        "Lisbon Portugal"
    ],
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("goat255/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 = {
    "locations": ["Lisbon Portugal"],
    "listingUrls": [],
}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Scraper",
        "description": "Scrape Airbnb listings and pricing without a login. Search any destination for available stays with nightly and total price, or pull a single listing's full detail by URL. Walks pagination across multiple pages up to your chosen limit.",
        "version": "0.1",
        "x-build-id": "tLYOvj76CNB0HNPJE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/goat255~airbnb-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-goat255-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/goat255~airbnb-scraper/runs": {
            "post": {
                "operationId": "runs-sync-goat255-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/goat255~airbnb-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-goat255-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": {
                    "locations": {
                        "title": "Locations (search mode)",
                        "type": "array",
                        "description": "Destinations to search for stays. Use a city, region, or neighborhood name. Example: Paris France, Lisbon, New York.",
                        "default": [
                            "Lisbon Portugal"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingUrls": {
                        "title": "Listing URLs (detail mode)",
                        "type": "array",
                        "description": "Specific listing links or ids to fetch full detail for. Example: https://www.airbnb.com/rooms/12345678.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerSource": {
                        "title": "Max results per location",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Cap on listings returned per location search. Pagination is walked across multiple pages until this is reached or the search is exhausted. Each page holds 18 listings.",
                        "default": 100
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "INR",
                            "JPY",
                            "BRL",
                            "MXN",
                            "AED"
                        ],
                        "type": "string",
                        "description": "Currency for all prices.",
                        "default": "USD"
                    },
                    "checkIn": {
                        "title": "Check in date",
                        "type": "string",
                        "description": "Optional check in date (YYYY-MM-DD). When set with a check out date, prices reflect those nights. Example: 2026-08-10."
                    },
                    "checkOut": {
                        "title": "Check out date",
                        "type": "string",
                        "description": "Optional check out date (YYYY-MM-DD). Example: 2026-08-15."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Number of adult guests used to size and price results.",
                        "default": 1
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many sources to process in parallel.",
                        "default": 5
                    },
                    "proxyConfig": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy routing for requests. Residential proxies are recommended for reliable results at scale.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
