# Airbnb Rooms URLs Scraper (`fastdataapi/airbnb-rooms-urls-scraper`) Actor

Airbnb Rooms URLs Scraper — Extract Airbnb room listing URLs, names, locations, prices, ratings, reviews, guest capacity, amenities, host details, and property information. Useful for room research, price comparison, rental analysis, competitor tracking, and short-term rental market insights.

- **URL**: https://apify.com/fastdataapi/airbnb-rooms-urls-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.19 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Rooms URLs Scraper — Prices, Hosts, Amenities and Photos

Airbnb Rooms URLs Scraper collects public Airbnb listings from listing links or a search phrase: title, description, every amenity, house rules, the full photo set, host and co-hosts, rating scores, location, availability for your dates, and the price Airbnb's search shows. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a short-term rental market research pipeline. **No Airbnb account or cookies needed.** Start with one city, then scale to every market you track.

![Airbnb Rooms URLs Scraper output: host profile, amenities, house rules and ratings as JSON](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-airbnb-rooms-hero.webp)

***

### What data can I extract with Airbnb Rooms URLs Scraper?

Using this Airbnb Listing API, you will be able to extract the following Airbnb listing data:

| 🏷️ Listing title | 🏠 Property and room type | 👥 Guest capacity | 💰 Price for your dates (search keywords) |
|---|---|---|---|
| 🏷️ Original price before a discount | 🧾 Price breakdown | 📅 Available for your dates | ⭐ Rating and six category scores |
| 💬 Review count | 👤 Host name, photo and about text | 🏅 Superhost and verified flags | ⏳ Time as host |
| 📋 Host details (response rate, years hosting) | 🪪 Host public profile (optional) | 👥 Co-hosts | 🧰 Every amenity by category |
| ✨ Listing highlights | 📜 House rules | ❌ Cancellation policies | 🖼️ Every photo with caption |
| 📝 Full description (text and HTML) | 📍 Location and coordinates | 🗺️ Neighbourhood descriptions | 🧭 Location breadcrumbs |
| 🏆 Guest favourite badge | 🌐 Listing language | 🔗 Listing link and app links | ⚠️ Reason a listing could not be loaded |

***

### How to use Airbnb Rooms URLs Scraper

Built for short-term rental investors, property managers and travel analysts: one run turns a list of Airbnb links and city names into a table of listings with their prices, hosts, amenities and rules.

**Copy to your AI assistant:**

```text
`airbnb-rooms-urls-scraper` (Apify Actor ID: fastdataapi/airbnb-rooms-urls-scraper, https://apify.com/fastdataapi/airbnb-rooms-urls-scraper) is an Apify Actor that returns public Airbnb listings as structured JSON: title, property type, guest capacity, price for the chosen dates, availability, rating scores, host details, amenities, house rules and photos. Use it whenever someone needs Airbnb listing data without cookies, a login, or a browser - comparing prices of listings in a city, auditing amenities of competing rentals, or building a list of Superhosts in a market. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/airbnb-rooms-urls-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"startUrls":["Lisbon Portugal","https://www.airbnb.com/rooms/12937"],"checkIn":"2026-11-20","checkOut":"2026-11-23","adults":2}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("airbnb-rooms-urls-scraper").call(run_input={"startUrls": ["Porto"], "checkIn": "2026-11-20", "checkOut": "2026-11-23"}) then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: startUrls (array of strings, required; an Airbnb link like https://www.airbnb.com/rooms/12937 is loaded as that listing, any other text is searched on Airbnb and its first search page gives up to 20 listings), enrichUserProfiles (boolean, adds the host's public profile, default false), checkIn and checkOut (strings YYYY-MM-DD, optional), locale (string, one of 93 Airbnb locales such as "en-US" | "fr-FR" | "de-DE", default "en-US"), currency (string, one of 48 codes such as "USD" | "EUR" | "GBP", default "USD"), adults (integer, minimum 1), children, infants and pets (integers, minimum 0), proxyConfiguration (object, optional; without it the actor connects directly and adds a proxy on its own when Airbnb refuses requests). Every listing is one row charged as the row_result event; a listing that could not be loaded comes back as a free row with only id, url, requestedUrl and an error message. Airbnb shows the price for given dates only in its search results, so listings found by a search phrase carry the price, while listings given as links carry availability and a price label that explains this; with no dates, search prices are for dates Airbnb suggests, and those dates are in checkIn and checkOut. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/airbnb-rooms-urls-scraper/builds/default
```

#### Airbnb Rooms URLs Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify and it can read Airbnb on its own: listings by link or by city, with their prices, availability, hosts, amenities and house rules. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/airbnb-rooms-urls-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Airbnb Rooms URLs Scraper](https://apify.com/fastdataapi/airbnb-rooms-urls-scraper) in the Apify Store.
3. Paste Airbnb listing links or type a city, one per line, and set your dates and guests.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Airbnb Rooms URLs Scraper to bulk

Put any number of listing links and search phrases in one run, mixed in the same list. Each link returns one row and each search phrase up to 20 listings; a listing that appears twice is saved once. Ten listings load at a time and each is saved as soon as it is ready, so you can read the dataset while the run is going. A recorded run returned 20 rows for one city and two links in 7.0 seconds. To scrape Airbnb listings for many markets, add one search phrase per city or neighbourhood, then export Airbnb listings to CSV or Excel when the run ends. Every listing is billed as one row result. To follow prices over time, schedule the same run daily or weekly in Apify Console.

***

### ✨ Features

Airbnb Rooms URLs Scraper fetches clean, structured listings from Airbnb ⚡. It's ideal for rental market research, competitor audits, pricing checks and host prospecting — an Airbnb scraper that works as an Airbnb listing scraper and Airbnb rooms scraper in one, an Airbnb room URL scraper for listing links, an Airbnb search scraper for city and keyword searches, an Airbnb amenities scraper for every listing, an Airbnb data extractor for host data, and an Airbnb data scraper for ratings and reviews across 93 languages. It extracts, per listing:

- **Price** – the price Airbnb's search shows for your dates, the original price before a discount, and the breakdown
- **Availability** – whether the listing can be booked for your dates
- **Host** – Airbnb host data: name, photo, about text, Superhost and verified flags, response rate, years hosting, and the public profile when you ask for it
- **Ratings** – overall rating, review count and the six category scores
- **Amenities and rules** – every amenity by category, house rules and cancellation policies
- **Photos and text** – every photo with its caption, the full description, highlights and neighbourhood texts

⚡ A listing that has been removed or made private comes back as a free row with the reason, so your list of links always matches your results and you never pay for empty rows.

***

### Use cases 💡

- **Rental investor** — compare nightly prices and ratings across a city before buying.
- **Property manager** — audit competitors' amenities, house rules and cancellation policies.
- **Travel analyst** — track availability and discounts for the same dates every week.
- **Sales team** — list Superhosts with many reviews for property-management outreach.
- **AI engineer** — index descriptions and house rules into a RAG store for travel questions.

Building an AI agent? [Connect Airbnb Rooms URLs Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **A whole city in seconds.** A recorded run returned 18 Lisbon listings and one linked listing, plus a free row for a removed link, in 7.0 seconds, with the first row after 1.6 seconds.
2. **The details behind each listing.** A recorded Lisbon apartment came back with 506 reviews, a 4.93 rating, 29 photos, 49 amenities, and a price of $277 for 3 nights instead of $446.
3. **Links and search phrases, one list.** Both mix in the same input, in 93 languages and 48 currencies, and 39 fields come back for every listing.

***

### ⬇️ Input

![Airbnb Rooms URLs Scraper input form with listing links, check-in, adults and enrich host profiles](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-airbnb-rooms-input.webp)

Enter Airbnb listing links, search phrases, or both; the list is required. Accepted link formats:

- `https://www.airbnb.com/rooms/12937`
- any Airbnb country site, e.g. `https://www.airbnb.fr/rooms/12937?adults=2`
- `https://www.airbnb.com/h/<listing-name>`

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `startUrls` | Yes | array | Airbnb listing links, one per line. Any other text is searched on Airbnb and the first search page gives up to 20 listings with their price. Other Airbnb pages (such as search result links) are skipped with a note. | `["Lisbon Portugal", "https://www.airbnb.com/rooms/12937"]` |
| `enrichUserProfiles` | No | boolean | Adds the host's public profile to each row. Default `false`. | `true` |
| `checkIn` | No | string | Check-in date, `YYYY-MM-DD`. Set it together with the check-out date. | `"2026-11-20"` |
| `checkOut` | No | string | Check-out date, `YYYY-MM-DD`, after the check-in date. | `"2026-11-23"` |
| `locale` | No | string | Language of the listing text and prices; one of 93 Airbnb locales. Default `"en-US"`. | `"fr-FR"` |
| `currency` | No | string | Currency for prices and listing links; one of 48 codes. Default `"USD"`. | `"EUR"` |
| `adults` | No | integer | Number of adults, at least 1. | `2` |
| `children` | No | integer | Number of children, 0 or more. | `1` |
| `infants` | No | integer | Number of infants, 0 or more. | `0` |
| `pets` | No | integer | Number of pets, 0 or more. | `0` |
| `proxyConfiguration` | No | object | Optional. Without it the actor connects directly and adds a proxy on its own when Airbnb refuses requests. A proxy you select is used from the first request. | `{"useApifyProxy": false}` |

Airbnb shows prices for given dates only in its search results, so search phrases return the price and listing links return availability. Without dates, search prices are for dates Airbnb suggests, and each row shows them.

#### Free plan limits

Free plan: up to 20 listings per run (all links and search phrases together) and 200 per month; paid plans have no limit.

#### Example input

```json
{
  "startUrls": [
    "Lisbon Portugal",
    "https://www.airbnb.com/rooms/12937"
  ],
  "enrichUserProfiles": true,
  "checkIn": "2026-11-20",
  "checkOut": "2026-11-23",
  "locale": "en-US",
  "currency": "USD",
  "adults": 2,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

![Airbnb Rooms URLs Scraper output fields: host, amenities, houseRules and propertyType](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-airbnb-rooms-output.webp)

Every listing is one typed, normalized JSON item with the same fields on every run; values a listing does not show are `null`. Export the dataset as JSON (default), CSV or Excel; a listing that could not be loaded gets one free row with the reason.

#### Example output

A recorded listing (description, photos, amenities and rules shortened), followed by the row for a link that has no public listing:

```json
[
  {
    "id": "11035340",
    "coordinates": {"latitude": 38.72609, "longitude": -9.14459},
    "descriptionOriginalLanguage": "en",
    "metaDescription": "Oct 14, 2026 · Entire serviced apartment · Our place is a ground floor calm, safe, full of light and cosy in a centenary building…",
    "seoTitle": "BLisboa.citycenter.for4 - Serviced apartments for Rent in Lisbon, Lisbon, Portugal - Airbnb",
    "sharingConfigTitle": "Serviced apartment in Lisbon · ★4.93 · 1 bedroom · 2 beds · 1 bath",
    "thumbnail": "https://a0.muscache.com/im/pictures/2500ae52-83f0-46f5-b532-d67baf2baffd.jpg",
    "url": "https://www.airbnb.com/rooms/11035340?locale=en-US&currency=USD&adults=2&check_in=2026-11-20&check_out=2026-11-23",
    "androidLink": "airbnb://rooms/11035340",
    "iosLink": "airbnb://rooms/11035340",
    "propertyType": "Entire serviced apartment",
    "roomType": "Entire home/apt",
    "homeTier": 1,
    "personCapacity": 4,
    "rating": {"accuracy": 4.96, "checking": 4.95, "cleanliness": 4.96, "communication": 4.97, "location": 4.76, "value": 4.85, "guestSatisfaction": 4.93, "reviewsCount": 506},
    "location": "Lisbon",
    "host": {
      "id": "9664029",
      "contextualUserId": "1462570604028791860",
      "name": "Patrícia & Arthur",
      "profileImage": "https://a0.muscache.com/im/pictures/user/c6ab1595-5f67-4a86-b71f-884236e77c8d.jpg",
      "isSuperHost": true,
      "isVerified": true,
      "highlights": [{"icon": "SYSTEM_LANGUAGE", "title": "Speaks English, French, and Portuguese"}],
      "about": "We are a couple living in Lisboa, Portugal. We love our city!…",
      "ratingCount": 1382,
      "ratingAverage": 4.9,
      "hostDetails": ["Superhost", "12 years hosting", "Response rate: 100%", "Responds within an hour"],
      "timeAsHost": {"years": 11, "months": 7},
      "profile": {"id": "9664029", "name": "Patrícia & Arthur", "profileImage": "https://a0.muscache.com/im/pictures/user/c6ab1595-5f67-4a86-b71f-884236e77c8d.jpg?aki_policy=profile_large", "about": "We are a couple living in Lisboa, Portugal…", "location": "Lisbon, Portugal", "isSuperHost": true}
    },
    "coHosts": [],
    "locationSubtitle": null,
    "locationDescriptions": [{"title": "Getting around", "content": "Our place is close to different points of interest in the city center…", "mapMarkerRadiusInMeters": null}],
    "title": "BLisboa.citycenter.for4",
    "description": "Our place is a ground floor calm, safe, full of light and cosy in a centenary building, located in the city center of Lisboa…",
    "htmlDescription": {"htmlText": "Our place is a ground floor calm, safe…<br /><br /><b>The space</b><br />…", "recommendedNumberOfLines": null},
    "subDescription": {"title": "Entire serviced apartment in Lisbon, Portugal", "items": ["4 guests", "1 bedroom", "2 beds", "1 bath"]},
    "isAvailable": true,
    "price": {
      "label": "$277 for 3 nights, originally $446",
      "price": "$277",
      "originalPrice": "$446",
      "qualifier": "for 3 nights",
      "breakdown": [{"description": "3 nights x $92.22", "price": "$276.67"}]
    },
    "brandHighlights": {"subtitle": null, "hasGoldenLaurel": true},
    "images": [
      {"caption": "Living room image 1", "imageUrl": "https://a0.muscache.com/im/pictures/2500ae52-83f0-46f5-b532-d67baf2baffd.jpg", "orientation": "LANDSCAPE"},
      {"caption": "the kitchen", "imageUrl": "https://a0.muscache.com/im/pictures/pro_photo_tool/Hosting-11035340-unapproved/original/56d6f85a-ee0a-47cf-a359-bd6e510998d0.JPEG", "orientation": "LANDSCAPE"}
    ],
    "breadcrumbs": [{"linkRoute": "/lisbon-portugal/stays", "linkText": "Lisbon", "searchText": "Lisbon"}],
    "highlights": [{"title": "Fast wifi", "subtitle": "At 579 Mbps, you can take video calls and stream videos.", "icon": "SYSTEM_WI_FI", "type": "LISTING_FAST_WIFI_AMENITY"}],
    "houseRules": {"additional": null, "general": [{"title": "Checking in and out", "values": [{"title": "Check-in after 3:00 PM", "icon": "SYSTEM_CLOCK", "additionalInfo": null}]}]},
    "cancellationPolicies": [],
    "amenities": [{"title": "Bathroom", "values": [{"title": "Hair dryer", "subtitle": null, "icon": "SYSTEM_HAIRDRYER", "available": true}]}],
    "timestamp": "2026-10-14T05:56:53.207551Z",
    "language": "en-US",
    "checkIn": "2026-11-20",
    "checkOut": "2026-11-23",
    "requestedUrl": "https://www.airbnb.com/rooms/11035340?check_in=2026-11-20&check_out=2026-11-23&adults=2"
  },
  {
    "id": "1",
    "url": "https://www.airbnb.com/rooms/1",
    "requestedUrl": "https://www.airbnb.com/rooms/1",
    "error": "Airbnb shows no public listing at this link (removed, private or never existed)"
  }
]
```

Rows with an error message are not charged. The run's key-value store also holds an OUTPUT record with every saved listing keyed by the link it came from.

***

### How does it work?

The actor opens each listing's public Airbnb page, the same page any visitor sees without logging in, in the language and currency you choose. For search phrases it reads Airbnb's own search results first, which is where Airbnb shows the price for your dates, then opens each listing found. When you give dates, it also asks Airbnb whether each linked listing can be booked for them. Requests that Airbnb refuses are paused and retried, and the actor adds Apify proxies on its own when needed. It returns only publicly visible data, and the output fields stay the same from run to run, so your code and spreadsheets keep working when Airbnb changes its pages.

***

### How do you integrate Airbnb Rooms URLs Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### Using Airbnb Rooms URLs Scraper with the Apify API

```python
import requests

response = requests.post(
    "https://api.apify.com/v2/acts/airbnb-rooms-urls-scraper/run-sync-get-dataset-items",
    params={"token": "APIFY_TOKEN"},
    json={"startUrls": ["Lisbon Portugal"], "checkIn": "2026-11-20", "checkOut": "2026-11-23", "adults": 2},
)
for listing in response.json():
    print(listing.get("title"), (listing.get("price") or {}).get("label"))
```

*Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.*

#### MCP integration for AI agents

Add the Apify MCP server to your AI client with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/airbnb-rooms-urls-scraper"
```

This registers Airbnb Rooms URLs Scraper as a tool your agent can call directly: the agent finds it through the server's search, adds it and runs it, then reads the listings back as JSON, much like an Airbnb listing details API. Ask for "Airbnb apartments in Lisbon for 20–23 November with their prices" and it does the rest. It works in Claude Code, Cursor and Windsurf.

#### No-code tools (n8n, Make, LangChain)

**n8n:** add the Apify node and choose "Run an Actor", or use the HTTP Request node pointed at the run-sync endpoint with your token. Send new listings to a Google Sheet in the next node.

**Make:** use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pull the listings into the rest of your scenario.

**LangChain:** install `langchain-apify` and wrap the actor with `ApifyActorsTool("airbnb-rooms-urls-scraper")` so your agent can look up Airbnb listings by link or city.

***

### Is it legal to scrape Airbnb data?

Collecting public Airbnb listing pages is generally lawful: hosts publish them so anyone can find and book a stay. This actor returns only publicly available data — what any visitor sees without logging in: listing details, prices shown in search, host names and the profile text hosts chose to publish. It never reads bookings, messages or guest accounts. GDPR: scraping public data is generally permissible, but storing and using it must comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Airbnb Rooms URLs Scraper return?

It returns each listing's title, price for your dates (for search phrases), availability, rating scores, host details and every amenity, plus photos, house rules and location. See [the data fields section](#what-data-can-i-extract-with-airbnb-rooms-urls-scraper) for the full list.

#### Does Airbnb Rooms URLs Scraper require an Airbnb account or login?

No. Only public Airbnb listing data is extracted, and no credentials are needed.

#### How fast does Airbnb Rooms URLs Scraper run?

A recorded run returned 20 rows for one city and two links in 7.0 seconds, with the first row after 1.6 seconds; four listing links took 5.8 seconds. Every run reads live data, not a cache.

#### What happens if a listing is private or doesn't exist?

You get one free row with the link and a message such as "Airbnb shows no public listing at this link (removed, private or never existed)". In code, skip rows that have an error message. Listings that hide some details still return a full row, with those values `null`.

#### Can I scrape multiple Airbnb listings at once?

Yes. Put any number of listing links and search phrases in one list; each link returns one row and each search phrase up to 20 listings.

#### Does Airbnb Rooms URLs Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Airbnb Rooms URLs Scraper is available as an MCP tool. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/airbnb-rooms-urls-scraper"`. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Airbnb Rooms URLs Scraper return data in a format LLMs can use directly?

Yes. Each listing is typed, normalized JSON with consistent field names, so there is no HTML parsing and no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when Airbnb changes its layout or updates its anti-bot system?

The actor is maintained, and when Airbnb changes, it is updated so your calls keep returning the same JSON fields with no changes on your end.

#### Can I use Airbnb Rooms URLs Scraper without managing proxies or browser infrastructure?

Yes. Retries, pauses and Apify proxies for refused requests run on the actor's side, and no browser is needed. You send one request and get structured JSON back, with no proxy accounts and no maintenance.

#### Which Airbnb listing fields work best for AI training data and RAG indexing?

For RAG, use the description, house rules, neighbourhood texts, highlights and the host's about text. For training data and analytics, use the price, rating scores, review count, guest capacity, coordinates and amenity list. All fields are plain strings, numbers, booleans and short lists, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know in the actor's Issues tab. Every report is read, and fixes ship as new versions of the actor.

# Actor input Schema

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

Airbnb listing links, one per line — e.g. https://www.airbnb.com/rooms/12937. You can also type a place (e.g. "Lisbon Portugal"): the first Airbnb search page for it gives up to 20 listings, each with the price Airbnb shows for your dates (or for dates Airbnb suggests when you set none).

## `enrichUserProfiles` (type: `boolean`):

Adds the host's public Airbnb profile to each row as host.profile (name, photo, about text, location, Superhost flag). Takes a little longer per listing. Co-hosts are not included because Airbnb does not show their profiles publicly.

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

Check-in date (YYYY-MM-DD). Set it together with the check-out date.

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

Check-out date (YYYY-MM-DD). Must be after the check-in date.

## `locale` (type: `string`):

Language and region for the listing text (title, description, amenities, house rules) and for prices.

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

Currency for prices and for the listing URLs in the results.

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

Number of adult guests.

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

Number of children.

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

Number of infants.

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

Number of pets.

## `proxyConfiguration` (type: `object`):

Optional. Leave it off and the Actor connects directly, adding a proxy by itself only if Airbnb starts refusing requests. If you select Apify Proxy or add your own proxy URLs, they are used for every request.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.airbnb.com/rooms/53997462",
    "https://www.airbnb.com/rooms/12937"
  ],
  "enrichUserProfiles": false,
  "locale": "en-US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

📄 Dataset items (one per listing)

## `listingsByLink` (type: `string`):

A single OUTPUT record: every saved listing row keyed by the link it came from.

# 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 = {
    "startUrls": [
        "https://www.airbnb.com/rooms/53997462",
        "https://www.airbnb.com/rooms/12937"
    ],
    "locale": "en-US",
    "currency": "USD",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/airbnb-rooms-urls-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 = {
    "startUrls": [
        "https://www.airbnb.com/rooms/53997462",
        "https://www.airbnb.com/rooms/12937",
    ],
    "locale": "en-US",
    "currency": "USD",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/airbnb-rooms-urls-scraper").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 '{
  "startUrls": [
    "https://www.airbnb.com/rooms/53997462",
    "https://www.airbnb.com/rooms/12937"
  ],
  "locale": "en-US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fastdataapi/airbnb-rooms-urls-scraper --silent --output-dataset

```

## MCP server setup

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

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/nQ0P2KUl7HuN29OSS/builds/irMNiQd0HDmdylJYQ/openapi.json
