# Airbnb Scraper — 16 Fields, Prices by Date, No Login (`themineworks/airbnb-scraper`) Actor

Scrape Airbnb stay listings by location and dates: price, rating, review count, superhost status, property type, coordinates and photos. No login, no API key. Use as an MCP server in Claude & AI agents.

- **URL**: https://apify.com/themineworks/airbnb-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Travel, Real estate, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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: Listings, Prices, Ratings & Geo

### Overview

Airbnb Scraper is a fast, pay-per-result Apify Actor that extracts Airbnb stay listings for any location, with nightly price, guest rating, review count, superhost status, GPS coordinates, property type, and photo. Give it a destination (and optionally your travel dates), and it returns clean, structured JSON, CSV, or Excel you can drop straight into a spreadsheet, dashboard, or AI agent.

Airbnb has no public listings API, and the numbers you see on the site are gated behind heavy client-side rendering. This actor handles search resolution, pagination, and price extraction for you, so you get the same data a visitor sees at scale, without writing parsing code or maintaining browser automation. Residential proxies are used by default for reliable results.

Reliability posture: blocked, empty, or failed runs are never charged. You only pay for a listing that was actually delivered.

✅ No login | ✅ No API key | ✅ Pay only per listing returned | ✅ MCP-ready for AI agents

### Features

Date-aware pricing. Pass check-in and check-out dates to get the nightly price for that stay.
Rich metadata. Rating, review count, superhost, badges, property type, coordinates, and photo.
Price band filters. Cap by minimum and maximum nightly price to focus on your target segment.
Volume control. Up to 2,000 listings per run. Split across cities or dates for wider pulls.
Residential proxy default. Reliable results against Airbnb's IP fingerprinting.

### How it works

Airbnb's public site renders listings client-side and paginates through a private API that changes without notice. This actor resolves your location string to Airbnb's internal place ID, walks the paginated results, and extracts the fields shoppers actually see, plus geo coordinates and photo URLs. If you pass dates and guest count, price reflects that stay; without them you get the default nightly rate.

You are billed only for listings actually returned. No subscription, no minimum.

### 🧾 Input configuration

```json
{
  "location": "Lisbon, Portugal",
  "checkIn": "2026-09-01",
  "checkOut": "2026-09-04",
  "adults": 2,
  "minPrice": 40,
  "maxPrice": 250,
  "maxItems": 100,
  "proxyConfig": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### 📤 Output format

This is a real record captured from a live run against `Lisbon, Portugal`:

```json
{
  "listingId": "1698576250991138067",
  "name": "Standard single room",
  "title": "Gat Rossio",
  "subtitle": "Hotel in Arroios",
  "rating": 4.73,
  "reviewsCount": 589,
  "latitude": 38.7154,
  "longitude": -9.1406,
  "photoUrl": "https://a0.muscache.com/im/pictures/BnbProperty/BnbProperty-1698576250991138067/original/865d4676-a83d-4745-b7f6-8d8623e91f03.jpeg",
  "badges": ["Featured hotel"],
  "url": "https://www.airbnb.com/rooms/1698576250991138067",
  "scraped_at": "2026-07-15T04:15:55.905Z"
}
```

Fields with no value for a given listing (for example `price` when Airbnb does not return a stay-specific rate for that result) are omitted rather than sent as null.

Every listing record contains these fields:

| Field | Description |
| --- | --- |
| 🆔 `listingId` | Airbnb listing ID. |
| 🏷️ `name` | Room or unit name within the listing. |
| 📝 `title` | Listing title (property or hotel name). |
| 📋 `subtitle` | Listing subtitle, typically the property type and neighborhood. |
| 💵 `price` | Nightly price (numeric), when Airbnb returns a stay specific rate. |
| 💲 `priceText` | Formatted price string as shown on Airbnb. |
| 🏷️ `priceQualifier` | Price qualifier text (e.g. "for 5 nights"), when present. |
| 💱 `currency` | Currency code, when a price is returned. |
| ⭐ `rating` | Average guest rating. |
| 🗣️ `reviewsCount` | Total number of reviews. |
| 📍 `latitude` / `longitude` | GPS coordinates for mapping. |
| 🖼️ `photoUrl` | Primary photo URL. |
| 🏅 `badges` | Listing badges (e.g. Featured hotel, Guest favorite). |
| 🔗 `url` | Public Airbnb listing URL. |
| 🕒 `scraped_at` | ISO timestamp when the record was captured. |

### 💼 Common use cases

**Revenue management and dynamic pricing**
Pull comparable listings for a market and date window to set competitive nightly rates. Ideal for property managers, hosts, and STR software vendors.

**Market research for hosts and investors**
Measure supply, average price, and rating by neighborhood before buying or listing. Combine multiple runs to build a longitudinal view.

**Travel apps and comparison tools**
Populate a product with structured stays, including photos, coordinates, and Superhost signals. Feed a live search UI without maintaining a scraper.

**Geo analytics and mapping**
Use latitude and longitude to build heatmaps of price or availability across a city. Great for urban policy research and real-estate analytics.

**AI agents**
Let an assistant answer "find the 20 cheapest Superhost stays in Bali this weekend" with live data. Exposed as an MCP tool for Claude and ChatGPT.

### 🚀 Getting started

1. Open the Airbnb Scraper on Apify and click Try for free.
2. Enter a location (e.g. `Lisbon, Portugal`, `Austin, TX`, `Bali`).
3. Optionally set check-in and check-out dates and number of adults for date-specific pricing.
4. Set max listings and, if you like, a minimum or maximum price filter.
5. Click Start, then download results as JSON, CSV, Excel, or HTML.

### FAQ

**Do I need an Airbnb account or API key?**
No. There is no login and no API key. Enter a location and run.

**How many listings can I scrape?**
Up to 2,000 per run via the max listings field. Run multiple locations or dates to go wider.

**Can I get date-specific prices?**
Yes. Add check-in and check-out dates and prices reflect that stay.

**How am I charged?**
Pay-per-result. You pay only for listings actually returned.

**Why is a residential proxy used?**
Airbnb fingerprints and rate-limits by IP. Residential proxies (the default) keep runs reliable across sessions.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/airbnb-scraper
```

Or run it from code with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/airbnb-scraper').call({
  location: 'Lisbon, Portugal',
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Complete your travel & real estate pipeline

Pair with the rest of the suite for a full short-term-rental and real-estate stack:

- **[Zillow Property Details Scraper](https://apify.com/themineworks/zillow-property-details)**: full property record for any Zillow URL or ZPID.
- **[Redfin Scraper](https://apify.com/themineworks/redfin-scraper)**: Redfin for-sale and sold listings.
- **[Realtor Scraper](https://apify.com/themineworks/realtor-scraper)**: Realtor.com listings with agent contact.
- **[RAG Website Crawler](https://apify.com/themineworks/rag-crawler)**: crawl neighbourhood and destination content for context.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

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

Destination to search (e.g. "Lisbon, Portugal", "Austin, TX", "Bali").

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

Maximum number of listings to scrape. First 25 lifetime are free.

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

Check-in date in YYYY-MM-DD format (optional). Enables date-specific pricing.

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

Check-out date in YYYY-MM-DD format (optional).

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

Number of adult guests (optional).

## `minPrice` (type: `integer`):

Only return listings priced at or above this nightly rate.

## `maxPrice` (type: `integer`):

Only return listings priced at or below this nightly rate.

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

Apify proxy settings. Residential recommended for Airbnb.

## Actor input object example

```json
{
  "location": "Lisbon, Portugal",
  "maxItems": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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": "Lisbon, Portugal",
    "maxItems": 5,
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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": "Lisbon, Portugal",
    "maxItems": 5,
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 '{
  "location": "Lisbon, Portugal",
  "maxItems": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call themineworks/airbnb-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/OLgWM7KFRObPdHZj4/builds/3RZzOYRhBhvbQuiJ6/openapi.json
