Airbnb MCP Server
Pricing
from $20.00 / 1,000 mcp tool calls
Airbnb MCP Server
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.
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_staysreturnspriceas Airbnb shows it for the stay length inprice_qualifier(for example "for 3 nights"), after any discount;original_priceholds 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
- Open the Actor and enable Standby mode (the Actor then exposes an HTTPS endpoint).
- 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. - Ask your agent to use the Airbnb tools.
Example MCP client config (Claude Desktop, Cursor and similar):
{"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.
{"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}:
{"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.