# Airbnb MCP Server (`axlymxp/airbnb-mcp-server`) Actor

Airbnb MCP server for AI agents. Claude, ChatGPT, Cursor or your own agent can search Airbnb stays and fetch listing detail, public host profile, guest reviews and availability live over MCP. Also runs as a one-shot stay search that writes a dataset.

- **URL**: https://apify.com/axlymxp/airbnb-mcp-server.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** AI, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 mcp tool calls

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/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 MCP Server

Give your AI assistant live access to Airbnb. This Actor runs as a **Model Context Protocol (MCP) server** so agents such as **Claude, ChatGPT, Cursor and n8n** can search Airbnb stays and pull listing detail, the host's public profile, guest reviews and the availability calendar on demand. It can also run once as a classic scraper that writes stay rows to a dataset.

It uses the same Airbnb web GraphQL endpoints the Airbnb website itself calls, so responses are structured JSON, not parsed HTML. No Airbnb account and no API key are needed.

### Who it is for

- **AI builders and agent developers** who want an Airbnb "skill" for an assistant without writing glue code.
- **Analysts using Claude or ChatGPT** who ask natural-language questions ("compare stays in Lisbon for 10-13 December under 150") and want live data.
- **No-code automators** wiring Airbnb lookups into n8n or Make agent flows.

### MCP tools

| Tool                      | What it does                                                                                                                                       |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `search_airbnb_stays`     | Search stays by place name with optional dates, adults and price filters. Returns id, name, price, rating, GPS, badges and photos.                  |
| `get_airbnb_listing`      | Detail for a listing id or `/rooms/<id>` URL: title, property type, capacity, rating, review count, description, amenities, GPS and host profile. |
| `get_airbnb_reviews`      | Guest reviews for a listing: reviewer name and location, rating, date, text and the host's response when there is one.                              |
| `get_airbnb_availability` | Day-by-day availability for the next 1-12 months with minimum and maximum nights. The per-day price is usually empty.                              |

Good to know:

- `search_airbnb_stays` returns `price` as Airbnb shows it for the stay length in `price_qualifier` (for example "for 3 nights"), after any discount; `original_price` holds the pre-discount figure when there is one. It is not always a nightly rate. Without dates Airbnb picks a default stay length.
- The host object is the public profile only (name, superhost and verified flags, years hosting, ratings). Airbnb does not expose host email or phone.
- Up to 100 stays and 100 reviews per call. Duplicate stays that Airbnb repeats across result pages are removed.
- Airbnb resolves free text loosely: a place name it does not recognise can return stays from elsewhere, so use real place names.
- A call that fails or returns nothing comes back as `{"error": ...}` or an empty list and is not billed as a tool call.

### Connect it

1. Open the Actor and enable **Standby** mode (the Actor then exposes an HTTPS endpoint).
2. Point your MCP client at `https://<your-username>--airbnb-mcp-server.apify.actor/mcp` (Streamable HTTP) and send your Apify API token as a Bearer token.
3. Ask your agent to use the Airbnb tools.

Example MCP client config (Claude Desktop, Cursor and similar):

```json
{
    "mcpServers": {
        "airbnb": {
            "url": "https://<your-username>--airbnb-mcp-server.apify.actor/mcp",
            "headers": { "Authorization": "Bearer <APIFY_TOKEN>" }
        }
    }
}
```

### Classic run mode (dataset)

Prefer a table? Start the Actor normally (not Standby) with a `location`. It runs one stay search and writes one row per stay to the dataset, ready for CSV, JSON or Excel export.

```json
{
    "location": "Austin, Texas",
    "adults": 2,
    "limit": 10
}
```

| Input      | Meaning                                                         |
| ---------- | --------------------------------------------------------------- |
| `location` | Place name Airbnb resolves, e.g. "Lisbon, Portugal"             |
| `checkIn`  | Optional check-in date, `YYYY-MM-DD`                            |
| `checkOut` | Optional check-out date, `YYYY-MM-DD`                           |
| `adults`   | Number of adults (default 1)                                    |
| `minPrice` | Optional minimum price filter                                   |
| `maxPrice` | Optional maximum price filter                                   |
| `limit`    | Max stays to return, 1-100 (default 18)                         |

#### Output fields (dataset rows)

| Field                                            | Description                                                     |
| ------------------------------------------------ | --------------------------------------------------------------- |
| `listing_id`, `url`                              | Airbnb listing id and room URL                                  |
| `name`, `title`, `subtitle`                      | Listing name, "Home in Austin" style title, one-line subtitle   |
| `price`, `original_price`, `price_qualifier`, `price_label` | Price shown by Airbnb for the stay length, pre-discount price, stay length, full price text |
| `rating`                                         | Rating text as shown in search, e.g. `4.96 (505)` or `New`      |
| `coordinate`                                     | `{lat, lng}`                                                    |
| `badges`, `images`                               | Badges such as "Guest favorite"; photo URLs                     |
| `scraped_at`                                     | UTC timestamp                                                   |

Fields that need the detail tool (amenities, description, host, property type, capacity) are empty in dataset rows; call `get_airbnb_listing` for those.

### Example tool call (trimmed)

`search_airbnb_stays` with `{"location": "Austin, Texas", "adults": 2, "limit": 2}`:

```json
{
    "location": "Austin, Texas",
    "count": 2,
    "results": [
        {
            "listing_id": "47965881",
            "url": "https://www.airbnb.com/rooms/47965881",
            "name": "Enjoy Heated Waterfall Pool + Art at SOCO Gallery",
            "title": "Home in Austin",
            "price": "$1,180",
            "price_qualifier": "for 5 nights",
            "rating": "4.96 (505)",
            "coordinate": { "lat": 30.24656, "lng": -97.74578 }
        }
    ]
}
```

### FAQ

**Which MCP clients work?** Any client that speaks Streamable HTTP MCP: Claude Desktop, Cursor, ChatGPT custom connectors, n8n and custom agents.

**Is the data live?** Yes. Every tool call requests fresh data from Airbnb.

**Can I use it on a schedule or from an API?** Yes. The classic run mode can be scheduled and called through the Apify API like any Actor; Standby mode is reachable over HTTP from your own code.

**Does it return host contact details?** No, only the public host profile.

**What if Airbnb changes something?** Airbnb has no public API for this data, so the Actor depends on its website endpoints. If a tool starts returning errors, open an issue on the Actor page.

# Actor input Schema

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

Place name Airbnb resolves, for example "Austin, Texas". Required for a one-shot run; not used in Standby (MCP) mode.

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

Optional ISO date (YYYY-MM-DD).

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

Optional ISO date (YYYY-MM-DD).

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

Number of adults for pricing.

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

Optional minimum price filter (Airbnb price slider).

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

Optional maximum price filter (Airbnb price slider).

## `limit` (type: `integer`):

Maximum number of stays to return (1-100).

## Actor input object example

```json
{
  "location": "Austin, Texas",
  "adults": 2,
  "limit": 10
}
```

# 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": "Austin, Texas",
    "adults": 2,
    "limit": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/airbnb-mcp-server").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": "Austin, Texas",
    "adults": 2,
    "limit": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/airbnb-mcp-server").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": "Austin, Texas",
  "adults": 2,
  "limit": 10
}' |
apify call axlymxp/airbnb-mcp-server --silent --output-dataset

```

## MCP server setup

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

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/bPMhOqILiBsdl06Oy/builds/0C3Os5IYOCeRUQvNg/openapi.json
