# Airbnb Scraper API – Prices, Occupancy & Reviews, No Login (`k-data-lab/airbnb-scraper`) Actor

Airbnb scraper and API with no login: Airbnb listings by city or link with the real price for your dates, rating and badges, plus an availability calendar with occupancy rate, full listing details and guest reviews. $1 per 1,000 listings, first 100 free every month.

- **URL**: https://apify.com/k-data-lab/airbnb-scraper.md
- **Developed by:** [K-Data Lab](https://apify.com/k-data-lab) (community)
- **Categories:** Travel, Real estate, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listings

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

**Get Airbnb listings for any city with the real price for your dates: total, nightly rate, discount, rating, reviews count, beds, Superhost and Guest favorite badges, location and photos.** Turn on add-ons for the full listing page, a 12-month availability calendar with each listing's **occupancy rate** (share of the next 30, 90 and 365 nights already booked or blocked) and guest reviews. No login, no cookies, no browser. From **$1.00 per 1,000 listings**, and the first 100 listings, 30 listing details and 300 reviews every month are free.

Type `Lisbon, Portugal`, press Start, and get 20 listings in about 4 seconds. The prefilled run uses 20 of your free listings, so it costs only the $0.005 run start, which Apify's free monthly credit covers. Run it from the Console, on a schedule, or as an API from Python, n8n, Make, Zapier or an AI agent.

```json
{
  "listingId": "45908725",
  "url": "https://www.airbnb.com/rooms/45908725",
  "name": "Luxury Loft in Alfama with Balcony and River View",
  "title": "Loft in Lisbon",
  "rating": 4.95,
  "reviewsCount": 414,
  "isGuestFavorite": true,
  "bedrooms": 1,
  "beds": 1,
  "bathrooms": 2,
  "priceLabel": "$630 for 3 nights, originally $818",
  "priceTotal": 630,
  "priceOriginal": 818,
  "pricePerNight": 209.94,
  "nights": 3,
  "checkIn": "2026-12-10",
  "checkOut": "2026-12-13",
  "latitude": 38.7091,
  "longitude": -9.132,
  "hostName": "Catarina",
  "hostResponseRate": "100%",
  "maxGuests": 4,
  "ratingCategories": { "cleanliness": 5, "accuracy": 5, "checkin": 4.8, "communication": 4.9, "location": 5, "value": 4.8 }
}
```

### What you can do with it

- **Track prices:** schedule a daily run for your city and dates and watch totals, discounts and nightly rates move.
- **Benchmark a short-term rental:** compare your listing with the 270 nearest competitors on price, rating, Superhost and Guest favorite status, beds and amenities.
- **Estimate occupancy and market demand:** with the calendar add-on, every listing gets `occupancyRateNext30Days`, `occupancyRateNext90Days` and `occupancyRateNext365Days`, its free nights and its next check-in date. Run a city with deep search and you have an occupancy map of the whole short-term rental market. Pick the **Availability & occupancy** view in the Output tab.
- **Read what guests say:** pull reviews with the host's replies, newest first, and run sentiment or topic analysis. `reviewsSince` makes weekly monitoring cheap.
- **Check one listing:** paste a link with your dates and get its price, rules, amenities and host stats. If it isn't bookable for those dates, the row says so.
- **Feed an AI agent:** ask for "pet-friendly places in Porto under $300 for 3 nights" and get clean JSON back.

### How to use it

1. Enter one or more **Locations** (as you'd type them in Airbnb's search box), or paste **Listing or search links**. A search link copied from your browser keeps its dates, guests, filters and map area.
2. Optional: set **Check-in / Check-out** and **guests**. With dates, every price is the real total for your stay. Without dates, Airbnb suggests dates per listing and the row shows them in `suggestedDates`.
3. Optional: filters (price, type of place, bedrooms, beds, bathrooms, Guest favorites, Instant Book). Filters are free.
4. Optional add-ons: **Listing details** (with the **Availability calendar**) and **Guest reviews**.
5. Press **Start**, then export to JSON, CSV or Excel, or fetch the dataset through the API.

A normal search returns up to 270 listings, because that's where Airbnb's own search stops. Turn on **Deep search** to cover a whole city: the area is split into map tiles until each tile fits under that limit. In our tests London returned 1,500 unique listings from 58 tiles in 56 seconds, and duplicates are dropped free.

Example inputs:

```json
{ "locations": ["Barcelona, Spain"], "checkIn": "2026-12-10", "checkOut": "2026-12-14", "adults": 2, "maxListings": 100, "roomType": "entire", "maxPrice": 800 }
```

```json
{ "startUrls": ["https://www.airbnb.com/rooms/50295984"], "checkIn": "2026-12-10", "checkOut": "2026-12-13", "includeReviews": true, "maxReviewsPerListing": 100 }
```

```json
{ "locations": ["London, United Kingdom"], "deepSearch": true, "maxListings": 5000, "currency": "GBP" }
```

Occupancy of 200 listings in a city for the next 90 days (200 listings + 200 details = $0.37 on Bronze, less your free monthly results):

```json
{ "locations": ["Austin, Texas"], "maxListings": 200, "includeDetails": true, "calendarMonths": 4 }
```

### Pricing

You pay per result delivered. Filters, duplicates, failed lookups and the price check for links are never charged. There is a one-off $0.005 fee when a run starts.

| Event | Free plan | Bronze | Silver | Gold | Platinum and above |
|---|---|---|---|---|---|
| Listing | $1.00 / 1K | **$1.00 / 1K** | $0.90 / 1K | $0.80 / 1K | $0.70 / 1K |
| Listing details add-on (calendar included) | $0.80 / 1K | $0.80 / 1K | $0.70 / 1K | $0.60 / 1K | $0.50 / 1K |
| Guest review | $1.50 / 1K | $1.50 / 1K | $1.30 / 1K | $1.10 / 1K | $0.90 / 1K |

**Free every month:** 100 listings, 30 listing details and 300 reviews.

A listing link always includes its details, so it is charged as listing + details ($1.80 per 1,000 on Bronze). Your run stops by itself at the spending limit you set, and it tells you it did.

### How it compares

Bronze prices from the Apify Store on 2026-11-09. tri_angle sells search, listing links and reviews as three separate actors.

| | This actor | tri_angle/airbnb-scraper | tri_angle/airbnb-rooms-urls-scraper | tri_angle/airbnb-reviews-scraper |
|---|---|---|---|---|
| 1,000 listings from a search | **$1.00** | $2.00 | n/a | n/a |
| 1,000 listings with amenities, rules and host stats | **$1.80** | $2.00 | $3.00 | n/a |
| 1,000 listings with host profile pages | Not offered | $3.35 | $4.00 | n/a |
| 1,000 reviews | **$1.50** | n/a | n/a | $4.10 |
| Free plan, 1,000 search listings | **$1.00** | $4.00 | n/a | n/a |
| Free monthly results | 100 listings, 30 details, 300 reviews | Not listed | Not listed | Not listed |
| Price for your dates from a link | Yes | n/a | Yes | n/a |
| Availability calendar (0–12 months) | Yes, included in details | Not listed | Not listed | n/a |
| Occupancy rate per listing (30/90/365 days) | Yes, included in details | Not listed | Not listed | n/a |
| Past ~270 listings per search | Yes, deep search | Up to ~240 per query (its README) | n/a | n/a |
| Search, links and reviews in one run | Yes | Search only | Links only | Reviews only |

**Choose this actor** for prices, details, calendars and reviews in one run at about half the price. **Choose tri_angle** if you need host profile pages (a host's other listings and about text), which we don't collect.

### Output

Every row has `type`: `listing` or `review`. Pick a view in the Output tab: **Listings**, **Listing details** or **Reviews**.

**Listing rows** (from a search): `listingId`, `url`, `name`, `title`, `subtitle`, `area`, `latitude`, `longitude`, `rating`, `reviewsCount`, `isNewListing`, `isGuestFavorite`, `isSuperhost`, `badges`, `bedrooms`, `beds`, `bathrooms`, `roomSummary`, `priceLabel`, `currencySymbol`, `priceTotal`, `priceOriginal`, `pricePerNight`, `nights`, `priceTotalBeforeTaxes`, `priceBreakdown` (nights, fees, discounts), `suggestedDates`, `thumbnail`, `photos`, `searchRank`, `searchQuery`, `checkIn`, `checkOut`, `adults`, `currency`, `scrapedAt`.

**Listing details add-on:** `description`, `propertyType`, `roomType`, `spaceType`, `listingType`, `maxGuests`, `ratingCategories` (cleanliness, accuracy, check-in, communication, location, value), `ratingDistribution` (share of 5…1 stars), `reviewTags` (what guests mention, with counts), `hostName`, `hostId`, `hostIsVerified`, `hostRating`, `hostReviewsCount`, `hostYearsHosting`, `hostResponseRate`, `hostResponseTime`, `coHosts`, `highlights`, `amenities`, `amenitiesUnavailable`, `amenityGroups`, `houseRules`, `safetyAndProperty`, `petsAllowed`, `childrenAllowed`, `sleepingArrangements`, `isExactLocation`, `locationBreadcrumbs`, all `photos`, and for links `priceStatus`.

**Availability calendar** (with details and `calendarMonths` > 0): `occupancyRateNext30Days`, `occupancyRateNext90Days`, `occupancyRateNext365Days` (in %), `availableNext30Days`, `availableNext90Days`, `availableNext365Days`, `nextAvailableCheckIn`, `minNights`, and `calendar` with one entry per day:

```json
{ "occupancyRateNext30Days": 23.3, "occupancyRateNext90Days": 15.6, "availableNext30Days": 23, "availableNext90Days": 76, "availableNext365Days": 343, "nextAvailableCheckIn": "2026-11-09", "minNights": 1,
  "calendar": [{ "date": "2026-11-12", "available": false, "checkIn": false, "checkOut": false, "minNights": 1, "maxNights": 365 }] }
```

**Review rows:** `listingId`, `listingUrl`, `reviewId`, `rating`, `text`, `translatedText`, `language`, `createdAt`, `date`, `localizedDate`, `reviewerName` (first name as Airbnb shows it), `reviewerInfo`, `hostResponse`, `hostResponseDate`, `hostName`, `photos`.

```json
{ "type": "review", "listingId": "50295984", "reviewId": "1812967694577097070", "rating": 5, "date": "2026-11-06", "language": "en",
  "text": "This beautiful home in Lisbon is a real gem. Views of the city from all directions, you feel you're in the heart of old Lisbon.",
  "reviewerName": "Emma", "reviewerInfo": "10 years on Airbnb", "hostResponse": null }
```

`RUN_SUMMARY` in the key-value store lists every search with its status (OK, NO_RESULTS, NOT_FOUND, FAILED), how many results were free and charged, and your free results left this month.

### FAQ

**Why do I get at most about 270 listings per search?**
Airbnb's search shows 15 pages of 18 listings and then stops, for every client. Deep search gets around it legitimately by asking for smaller map areas, the way you would by zooming in on the map.

**Why is a price missing or marked "Not bookable"?**
Airbnb only prices concrete dates. Without dates the row carries the dates Airbnb suggests (`suggestedDates`). For a listing link with dates, `priceStatus: "NOT_AVAILABLE"` means Airbnb's own search didn't offer it for those dates and guests.

**Is the price the total?**
`priceTotal` is the stay total Airbnb shows on the search card, after discounts. `priceOriginal` is the price before the discount. `priceBreakdown` lists nights × rate, cleaning or resort fees and discounts when Airbnb includes them. Taxes depend on the country and are added at checkout.

**How is the occupancy rate calculated?**
It is the share of nights in the window that a guest can't book on Airbnb's calendar: nights booked by other guests plus nights the host has blocked. Airbnb doesn't show which is which, so read it as an upper bound of real bookings, the same signal STR analytics tools start from. The 30-day rate needs `calendarMonths` 2 or more, the 90-day rate 4 or more and the 365-day rate 12; otherwise the field is `null`.

**Why do some listings have no rating?**
Airbnb shows a rating only after a listing has 3 reviews. New listings have `isNewListing: true`. The details add-on returns the exact reviews count either way.

**Are reviews complete?**
Yes. Reviews are paged until the listing's total, newest first by default, with zero duplicates in our tests (546 reviews over 10 listings). Set `maxReviewsPerListing` to 0 for all of them, or `reviewsSince` to collect only new ones.

**Which currencies and languages work?**
Any currency Airbnb supports (USD, EUR, GBP, JPY, KRW and more) and any Airbnb language (en, de, fr, es, ja, ko and more). Review text stays in the guest's language; `translatedText` is added when Airbnb has a translation.

**Do you collect personal data?**
Only what Airbnb shows every visitor: host first or business names with their public hosting stats, and reviewers' first names. We don't collect profile pages, profile photos, emails or phone numbers. Use the data in line with privacy law where you are.

**Is this an official Airbnb API?**
No. It is an unofficial tool that reads the public data airbnb.com shows a signed-out visitor, and it only uses paths Airbnb's robots.txt leaves open. It is not affiliated with or endorsed by Airbnb.

**Something broke?**
Open an issue on the Issues tab with the run link. We answer the same day.

### Use it from AI agents (MCP)

This actor fits tasks like "find Airbnb listings in a city for these dates and their prices", "what is the occupancy rate of Airbnb listings in this city" or "get the reviews of this Airbnb listing". Load it as a tool in Claude, Cursor or any MCP client:

```text
https://mcp.apify.com?tools=actors,k-data-lab/airbnb-scraper
```

A typical call:

```json
{ "locations": ["Porto, Portugal"], "checkIn": "2026-12-05", "checkOut": "2026-12-08", "adults": 2, "pets": 1, "maxPrice": 300, "maxListings": 20 }
```

For occupancy: `{ "startUrls": ["https://www.airbnb.com/rooms/50295984"], "calendarMonths": 12 }` returns `occupancyRateNext30Days`, `occupancyRateNext90Days` and `occupancyRateNext365Days` for that listing.

Agents don't need the exact field names: `location`, `urls`, `maxItems`, `checkin`, `checkout` and `guests` work too. `RUN_SUMMARY` tells the agent what happened, and the free monthly results make test calls cheap.

### More from K-Data Lab

Travel and food:

- [Agoda Scraper](https://apify.com/k-data-lab/agoda-scraper): hotel prices, rooms and reviews
- [Airline Award Seat Scraper](https://apify.com/k-data-lab/airline-award-seat-scraper): mileage seat availability
- [Uber Eats & Deliveroo Scraper](https://apify.com/k-data-lab/uber-eats-deliveroo-scraper): restaurants, menus and prices
- [Google Maps Scraper](https://apify.com/k-data-lab/google-maps-scraper): places, phones and ratings

Reviews and web data:

- [App Store Scraper](https://apify.com/k-data-lab/app-store-scraper) and [Google Play Scraper](https://apify.com/k-data-lab/google-play-scraper): apps and reviews
- [YouTube Scraper](https://apify.com/k-data-lab/youtube-scraper) and [YouTube Comments Scraper](https://apify.com/k-data-lab/youtube-comments-scraper)
- [Google Trends Scraper](https://apify.com/k-data-lab/google-trends-scraper): interest, related queries and Trending now
- [Amazon Reviews Scraper](https://apify.com/k-data-lab/amazon-reviews-scraper): ratings, photos and monitoring

Korea:

- [KB Land](https://apify.com/k-data-lab/kbland-scraper) and [R114](https://apify.com/k-data-lab/r114-scraper): Korean apartment prices
- [Korean Music Chart Scraper](https://apify.com/k-data-lab/korean-music-chart-scraper): Melon, Genie, Bugs, FLO and VIBE in one
- Single charts: [Melon](https://apify.com/k-data-lab/melon-scraper), [Genie](https://apify.com/k-data-lab/genie-scraper), [Bugs](https://apify.com/k-data-lab/bugs-scraper), [FLO](https://apify.com/k-data-lab/flo-scraper), [VIBE](https://apify.com/k-data-lab/vibe-scraper)

Social, ads, e-commerce and jobs:

- [TikTok Scraper](https://apify.com/k-data-lab/tiktok-scraper), [X Tweet Scraper](https://apify.com/k-data-lab/x-tweet-scraper), [Pinterest Scraper](https://apify.com/k-data-lab/pinterest-scraper) and [Telegram Channel Scraper](https://apify.com/k-data-lab/telegram-channel-scraper)
- [Google Ad Library Scraper](https://apify.com/k-data-lab/google-ad-library-scraper): ads by advertiser or domain
- [Amazon Best Sellers Scraper](https://apify.com/k-data-lab/amazon-bestsellers-scraper), [Amazon ASIN Rating Scraper](https://apify.com/k-data-lab/amazon-asin-rating-scraper) and [Amazon Seller Central Review Scraper](https://apify.com/k-data-lab/amazon-seller-central-review-scraper)
- [ATS Jobs Scraper](https://apify.com/k-data-lab/ats-jobs-scraper): jobs from company career sites

Something wrong or missing? Open an issue on the Issues tab.

# Changelog

This Actor's version history is a separate document: https://apify.com/k-data-lab/airbnb-scraper/changelog.md

# Actor input Schema

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

Cities, neighbourhoods or regions, as you would type them in Airbnb's search box, e.g. "Lisbon, Portugal", "Shibuya, Tokyo" or "Lake Tahoe". One search per line.

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

Airbnb listing links (https://www.airbnb.com/rooms/50295984) or bare listing IDs for full details, and/or Airbnb search links copied from your browser (their dates, guests, filters and map area are reused). Any Airbnb domain works.

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

Check-in date (YYYY-MM-DD). With dates, every price is the real total for your stay. Leave both dates empty and Airbnb suggests dates per listing (returned in suggestedDates).

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

Check-out date (YYYY-MM-DD), after check-in.

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

Number of adult guests (1–16).

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

Children aged 2–12.

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

Infants under 2.

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

Pets (only listings that allow pets are shown).

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

Lowest price in your currency. With dates it is the total for the stay; without dates it is per night.

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

Highest price in your currency (total for the stay with dates, per night without).

## `roomType` (type: `string`):

Entire home, private room, shared room or hotel room.

## `minBedrooms` (type: `integer`):

At least this many bedrooms.

## `minBeds` (type: `integer`):

At least this many beds.

## `minBathrooms` (type: `integer`):

At least this many bathrooms.

## `guestFavoriteOnly` (type: `boolean`):

Only listings with Airbnb's "Guest favorite" badge.

## `instantBookOnly` (type: `boolean`):

Only listings you can book without waiting for the host.

## `maxListings` (type: `integer`):

Stop each location or search link after this many listings. A normal search returns up to 270 (Airbnb's own limit); turn on Deep search for more. 0 = no limit.

## `deepSearch` (type: `boolean`):

Split the area into map tiles until each tile fits Airbnb's 270-listing window, so a whole city can return thousands of listings. Slower; listings are deduplicated for free.

## `includeDetails` (type: `boolean`):

Add the full listing page to each row: description, all amenities, house rules, host (name, superhost, rating, response rate, years hosting), category ratings, rating distribution, review tags, sleeping arrangements, all photos, exact coordinates. Charged as an add-on per listing. Listing links always get details.

## `calendarMonths` (type: `integer`):

With details on: also add the availability calendar for the next 0–12 months: occupancy rate (share of nights booked or blocked) and free nights for the next 30/90/365 days, next check-in date, min nights, and every day. Use 2+ months for the 30-day numbers, 4+ for 90 days, 12 for 365 days. Included in the details price.

## `includeReviews` (type: `boolean`):

Also return guest reviews of every listing as separate rows (type = review): rating, text, date, language, host response, reviewer first name.

## `maxReviewsPerListing` (type: `integer`):

0 = all reviews.

## `reviewsSort` (type: `string`):

Order in which reviews are collected.

## `reviewsSince` (type: `string`):

Only reviews written on or after this date (YYYY-MM-DD). With "Newest first", stops reading as soon as older reviews start: ideal for scheduled monitoring.

## `onlyReviews` (type: `boolean`):

Return reviews without the listing rows (listings are then not charged).

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

3-letter currency for prices, e.g. USD, EUR, GBP, JPY, KRW.

## `language` (type: `string`):

Language of titles and texts, e.g. en, de, fr, es, ko, ja. Reviews keep their original text; translatedText is added when Airbnb has a translation.

## `useApifyProxy` (type: `boolean`):

Runs start without a proxy and move to Apify datacenter proxy sessions only if Airbnb slows them down.

## Actor input object example

```json
{
  "locations": [
    "Lisbon, Portugal",
    "Barcelona, Spain"
  ],
  "startUrls": [
    "https://www.airbnb.com/rooms/50295984"
  ],
  "adults": 1,
  "children": 0,
  "infants": 0,
  "pets": 0,
  "roomType": "any",
  "guestFavoriteOnly": false,
  "instantBookOnly": false,
  "maxListings": 20,
  "deepSearch": false,
  "includeDetails": false,
  "calendarMonths": 0,
  "includeReviews": false,
  "maxReviewsPerListing": 20,
  "reviewsSort": "newest",
  "onlyReviews": false,
  "currency": "USD",
  "language": "en",
  "useApifyProxy": true
}
```

# Actor output Schema

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

No description

## `details` (type: `string`):

No description

## `occupancy` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `all` (type: `string`):

No description

## `summary` (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 = {
    "locations": [
        "Lisbon, Portugal"
    ],
    "maxListings": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("k-data-lab/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"],
    "maxListings": 20,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,k-data-lab/airbnb-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/XsFBUfnmQeYWaz565/builds/yofcoH78SdHN2y4dP/openapi.json
