# Airbnb Host Portfolio Scraper · Map Host Listings (`corent1robert/airbnb-host-portfolio-scraper`) Actor

Paste Airbnb host profile URLs and map each host's portfolio — listing count, ratings, superhost flags, and export-ready listing rows. No login. No API key.

- **URL**: https://apify.com/corent1robert/airbnb-host-portfolio-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.49 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Host Portfolio Scraper

Paste **Airbnb host profile URLs** and map each host's portfolio — listing counts, ratings, superhost flags, and export-ready listing rows for STR research and outbound.

**No login. No API key. No Airbnb account.**

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| STR outbound / SDR team | Size a host before cold outreach | Discover with [Airbnb Pro Host Scraper](https://apify.com/corent1robert/airbnb-professional-host-scraper), then paste `hostProfileUrl` here |
| Conciergerie / PM operator | Benchmark competitor portfolio depth | Bulk 10–50 profile URLs; keep **Include listing rows** ON |
| Market analyst | Count listings and average ratings by host | Host overview view; filter `extractionStatus`; use `cities` / `countries` on host rows |
| Reputation / review research | Sample guest sentiment before full review export | Keep **Include review rows** ON; enable **Fetch all profile reviews** for complete history |
| Investor / acquisition scout | Shortlist multi-listing operators | Combine with Pro Host city search → Portfolio bulk → Pro Host contact pull |

**What you get by default:** host name, company/work label, location, bio snippet, verification flags, reported listing count, returned listing cards, host rating, review count, superhost / pro flags, languages, canonical listing URLs, **listing rows with city / region / country** (when detail enrichment is ON), and a **review sample** (~5 per tab).

**When counts differ:** With **Fetch full portfolio** ON (default), the Actor keeps loading until the reported listing total is reached when the profile page only shows a preview. Disable `includeFullPortfolio` to skip via API (see **Input**). For amenities, pricing, calendar, and GPS, chain listing URLs to the [Airbnb Property Details Scraper](https://apify.com/corent1robert/airbnb-property-details-scraper).

Part of the **[Airbnb Actors suite](#airbnb-actors-suite-outreacher--corent1robert)** — see linked Actors below for discovery, listing depth, and review export.

### What you get

#### Host row (`recordType: host`)

| Field | Description |
|-------|-------------|
| `hostId`, `hostProfileUrl`, `hostName` | Host identity |
| `profilePictureUrl` | Avatar from profile |
| `companyName` | Work / company label from profile prompts |
| `companyLegalName`, `companyEmail`, `companyPhone`, `companyAddress`, `companyRegister`, `companyRCS` | Legal business contact (optional — see **Pull business contact** input) |
| `emailDomain`, `contactStatus`, `contactSourceListingUrl` | Contact metadata when enrichment is enabled |
| `hostLocation` | Location from profile or prompts |
| `about`, `aboutShort` | Full bio and 300-char export snippet |
| `listingCount` | Listings returned in this run |
| `listingCountReported` | Total shown on Airbnb profile |
| `averageRating`, `totalReviews`, `reviewsFromHostsCount` | Host-level reputation |
| `isProHost`, `isSuperhost`, `hasBusinessBadge` | Trust flags (`isProHost` uses work label, business badge, and multi-listing heuristics) |
| `hasIdentityBadge`, `identityVerifiedSince`, `identityVerificationTypes` | Identity verification |
| `guestType`, `isServiceHost`, `isExperienceHost` | Host program flags |
| `yearsHosting`, `languages` | Host metadata |
| `cities`, `countries` | Unique cities and countries from enriched listing rows |
| `listingUrls` | Room URLs for downstream scrapers |
| `extractionStatus` | `success`, `partial`, or `failed` |

#### Listing row (`recordType: listing`)

| Field | Description |
|-------|-------------|
| `listingId`, `listingUrl`, `title` | Listing identity |
| `city`, `region`, `country` | Listing location (filled when **Fill bedrooms, bathrooms, beds, and location** is ON) |
| `rating`, `reviewCount` | Listing reputation |
| `roomType`, `propertyType`, `bedrooms`, `bathrooms`, `beds` | Property summary |
| `pictureUrl`, `isSuperhostListing` | Card metadata |

#### Review row (`recordType: review`)

| Field | Description |
|-------|-------------|
| `reviewSource` | `guest` (from travelers about this host) or `host` (from other hosts when profile user was a guest) |
| `rating`, `comment`, `commentTranslated`, `commentLanguage`, `createdAt` | Review content |
| `reviewerName`, `reviewerLocation`, `reviewerCity`, `reviewerRegion`, `reviewerCountry`, `reviewerIsSuperhost` | Who wrote the review — location is the **reviewer's** city, not the listing |
| `listingUrl` | Linked listing when present on the review |

**Review location vs listing location:** `reviewerLocation` (e.g. `Olympia, Washington`) is where the guest lives. Listing geo lives on listing rows (`city`, `region`, `country`).

### Typical fill rates

Honest coverage from a **reference run** (May 2026): **2 public hosts** — Sylviane (FR, 3 listings) and Lodgewell (US PM, 36 listings). Input: default options with **Fetch full portfolio**, **Fill bedrooms, bathrooms, beds, and location**, **Include review rows**, and **Pull business contact** ON.

| Area | Field / outcome | Typical fill | Notes |
|------|-----------------|-------------|-------|
| **Host** | `hostName`, `listingCountReported`, ratings | **100%** | From profile HTML |
| **Host** | Full portfolio (`listingCount` = reported) | **100%** | 3/3 and 36/36 in reference run |
| **Host** | `hostLocation` (profile) | **~50%** | Depends on what the host filled in |
| **Host** | `companyName` / work label | **~100%** | Both reference hosts had a label |
| **Host** | Business **email or phone** (contact ON) | **~50%** | 1/2 in reference run — FR legal block found; US PM row empty |
| **Host** | `cities` / `countries` (aggregated) | **100%** when listing details ON | Host row + CSV — e.g. 1 city / FR vs 7 cities / US for Lodgewell |
| **Listing** | `title`, `roomType`, beds / bedrooms / bathrooms | **100%** | 39/39 with detail enrichment ON |
| **Listing** | `city`, `region`, `country` | **~100%** | 39/39 after listing-page enrichment — not on profile cards alone |
| **Listing** | `rating`, `reviewCount` | **~95%** | Empty when Airbnb shows 0 reviews on new listings |
| **Review sample** | `comment` | **100%** | Embedded ~5 guest + ~5 host reviews per profile (when present) |
| **Review sample** | `reviewerLocation` (+ parsed city/region) | **~65–70%** | 10/15 in reference run — many guests hide location |
| **Review sample** | `listingUrl` on review row | **~0%** | Profile review cards rarely expose a listing link |

**How options change these numbers:**

- **Fetch full portfolio OFF** — large PMs often stop at ~10 listing rows → `extractionStatus: partial`.
- **Fill bedrooms… OFF** — `bedrooms` / `beds` may stay empty on Beehive-only cards; **no listing geo**.
- **Pull business contact OFF** — `companyEmail` / `companyPhone` stay empty (no extra fetch).
- **Fetch all profile reviews ON** — review row count scales to full history (e.g. 7,520 guest reviews for Lodgewell); fill rates for `reviewerLocation` stay similar, sample bias drops.

Local **`output-hosts.csv`** now includes **`cities`** and **`countries`** (semicolon-separated). For array fields in the Apify dataset JSON, use the **Host overview** view.

### How it works

1. **Parse input** — normalize host profile URLs or numeric IDs.
2. **Load each profile** — one HTTP request per host; extract host qualification fields and embedded listing cards + review samples from public profile HTML.
3. **Expand portfolio** (optional, default ON) — when the profile preview shows fewer listings than reported, keep loading until the full list is returned.
4. **Enrich listing details** (optional, default ON) — for each listing missing rooms or geo, open the public listing page once and fill bedrooms, bathrooms, beds, city, region, and country.
5. **Business contact** (optional) — one listing page per host on the EU disclosure domain for legal email and phone.
6. **Reviews** (optional) — save embedded samples (~5 per tab) or paginate all guest/host profile reviews when enabled.
7. **Export** — host summary row, listing rows, review rows to the Apify dataset (and local CSV when running offline).

All steps are **HTTP-only** — no browser, no Airbnb login.

### Performance and cost

Reference timings on a **36-listing US PM** (Lodgewell, May 2026, local run, 1024 MB class):

| Scenario | Hosts | Listing rows | Review rows | Wall time | Notes |
|----------|-------|--------------|-------------|-----------|-------|
| **Default sample** | 2 | 39 | 15 (embedded) | **~14–16 s** | Full portfolio + listing details + review sample |
| **Lodgewell scale** | 1 | 36 | 43 (30 guest + 13 host, capped) | **~16 s** | `includeFullReviews` ON, `maxReviewsPerSource: 30` — measured May 2026 |
| **Full guest history** | 1 | 36 | 7,520+ guest | **10–30+ min** | Not recommended without `maxReviewsPerSource`; use review sample for qualification |

**Compute:** `defaultRunOptions.memoryMbytes: 1024` in `actor.json` — sufficient for parallel host batches (≤10) and listing detail enrichment (≤10 concurrent listing fetches).

### Airbnb Actors suite (Outreacher / corent1robert)

Five Actors cover the STR outbound stack — from city discovery to full listing and review export. All built by [corent1robert on Apify](https://apify.com/corent1robert).

| Step | Actor | Apify link | Best for |
|------|--------|------------|----------|
| 1 — **Discover hosts** | Airbnb Pro Host Business Email Scraper | [Store →](https://apify.com/corent1robert/airbnb-professional-host-scraper) | City search, pro host contacts (email, phone, company, RCS/SIRET), `hostProfileUrl` in export |
| 2 — **Size portfolios** | **Airbnb Host Portfolio Scraper** *(this Actor)* | [Console →](https://console.apify.com/actors/ylqefCXcCvaEHdatW) · [Store →](https://apify.com/corent1robert/airbnb-host-portfolio-scraper) | Paste profile URLs → listing count, geo, room counts, review sample, optional business contact |
| 3 — **Full listing rows** | Airbnb Property Details Scraper | [Store →](https://apify.com/corent1robert/airbnb-property-details-scraper) | 30+ fields per listing: amenities, GPS, photos, pricing context, host card |
| 4 — **Atypical / niche stays** | Airbnb Atypical Stays Scraper | [Store →](https://apify.com/corent1robert/airbnb-atypical-stays-scraper) | Castles, treehouses, boats… city + category filters, same depth as Property Details |
| 5 — **All guest reviews** | Airbnb Reviews Scraper | [Store →](https://apify.com/corent1robert/airbnb-reviews-scraper) | Every review on a **listing URL** — rating, comment, date, host reply |

#### Recommended pipeline

1. **Discover** — run [Pro Host Scraper](https://apify.com/corent1robert/airbnb-professional-host-scraper) on a city; export `hostProfileUrl`.
2. **Qualify** — run **this Actor** on those URLs; sort by `listingCountReported`, `cities`, `isProHost`.
3. **Contact** — enable **Pull business contact** here, or use emails already from Pro Host.
4. **Deep-dive** — pass `listingUrl` values to [Property Details](https://apify.com/corent1robert/airbnb-property-details-scraper) or [Reviews](https://apify.com/corent1robert/airbnb-reviews-scraper).

**Reviews on this Actor vs Reviews Scraper:** default run saves a **profile review sample** (~5 guest). Enable **Fetch all profile reviews** in Console for the full host history. For **every review on one listing**, use [Airbnb Reviews Scraper](https://apify.com/corent1robert/airbnb-reviews-scraper).

#### Also from the same developer

| Actor | Link |
|-------|------|
| Booking Pro Host Scraper | [apify.com/corent1robert/booking-pro-host-scraper](https://apify.com/corent1robert/booking-pro-host-scraper) |

### Quick Start

1. Open the Actor in Apify Console.
2. Paste one or more host profile URLs (`https://www.airbnb.com/users/show/{id}`).
3. Click **Start** — paste URLs, optionally enable **Fetch all profile reviews** or **Pull business contact**. Everything else runs with smart defaults.
4. Open **Host overview**, **Listings**, or **Reviews** dataset views.

### Input

#### Console (Apify UI)

| Field | Default | Description |
|-------|---------|-------------|
| `hostProfileUrls` | 1 sample URL | Bulk list of profile URLs |
| `includeFullReviews` | `false` | Paginate **all** profile reviews (guest tab + host tab). Off = ~5 guest review sample |
| `maxReviewsPerSource` | `0` | Cap per tab when full reviews ON (`0` = no cap) |
| `includeContactEnrichment` | `false` | Business email and phone on the host row (no extra result row) |

#### Included automatically (no toggle in Console)

| Field | Default | What it does |
|-------|---------|--------------|
| `includeListingRows` | `true` | One dataset row per listing |
| `includeFullPortfolio` | `true` | Full portfolio when profile preview is incomplete |
| `includeListingRoomStats` | `true` | Bedrooms, bathrooms, beds, city, region, country |
| `includeReviewRows` | `true` | Review rows ON — sample or full depending on `includeFullReviews` |
| `maxConcurrency` | `5` | Parallel host fetches |
| `maxHosts` | `0` | No host cap |
| `verboseLogs` | `false` | Clean run logs |

#### API-only fields (JSON / API runs)

Pass these in input JSON when you need to override defaults — they are **not** shown in the Console form.

| Field | Default | Description |
|-------|---------|-------------|
| `hostIds` | — | Numeric host IDs (built into profile URLs) |
| `includeListingRows` | `true` | Turn OFF for host-summary-only export |
| `includeFullPortfolio` | `true` | Turn OFF for ~10-card HTML preview only |
| `includeListingRoomStats` | `true` | Turn OFF to skip per-listing page fetches |
| `includeReviewRows` | `true` | Turn OFF to skip all review rows |
| `maxListingsPerHost` | `0` | Cap listing rows per host (`0` = no cap) |
| `maxConcurrency` | `5` | Parallel hosts (1–10) |
| `maxHosts` | `0` | Cap hosts processed (`0` = no cap) |
| `disclosureDomain` | `airbnb.fr` | TLD for legal contact block (EU disclosure) |
| `verboseLogs` | `false` | Debug lines in run log |

#### Example JSON — Console-equivalent (full profile reviews, capped)

```json
{
  "hostProfileUrls": ["https://www.airbnb.com/users/show/15782486"],
  "includeFullReviews": true,
  "maxReviewsPerSource": 30
}
````

#### Example JSON — full outbound (API)

```json
{
  "hostProfileUrls": ["https://www.airbnb.com/users/show/15782486"],
  "includeContactEnrichment": true,
  "includeFullReviews": true,
  "maxReviewsPerSource": 30
}
```

### Output sample

Host summary row:

```json
{
  "recordType": "host",
  "hostId": "15782486",
  "hostName": "Lodgewell",
  "listingCount": 36,
  "listingCountReported": 36,
  "averageRating": 4.8,
  "totalReviews": 7520,
  "isProHost": true,
  "isSuperhost": true,
  "cities": ["Austin", "Marble Falls", "West Lake Hills"],
  "countries": ["United States"],
  "extractionStatus": "success"
}
```

Listing row (with detail enrichment):

```json
{
  "recordType": "listing",
  "hostName": "Lodgewell",
  "listingId": "24038356",
  "title": "The Shorewood | Dog-Friendly Lake Retreat",
  "city": "Marble Falls",
  "region": "Texas",
  "country": "United States",
  "bedrooms": 4,
  "bathrooms": 3,
  "beds": 8,
  "rating": 4.66,
  "reviewCount": 83
}
```

Review row (reviewer location ≠ listing location):

```json
{
  "recordType": "review",
  "reviewSource": "guest",
  "rating": 5,
  "reviewerName": "Carmen",
  "reviewerLocation": "Austin, TX",
  "reviewerCity": "Austin",
  "reviewerRegion": "TX",
  "comment": "This place is absolutely beautiful..."
}
```

### Limitations

- **Very large portfolios:** hosts with thousands of listings take longer when the full portfolio and listing detail enrichment are both ON — use `maxListingsPerHost` to cap exported rows.
- **Listing location:** city / region / country come from public listing page metadata, not the profile card. A small share of titles may parse imperfectly; verify critical rows against `listingUrl`.
- **Review sample vs full export:** default run saves ~5 guest reviews embedded on the profile. Enable **Fetch all profile reviews** in Console for paginated history (use **Max reviews per tab** to cap cost on large hosts).
- **Public profiles only:** private or restricted hosts may fail with `extractionStatus: failed`.
- **Contacts are optional:** enable **Pull business contact** for legal email and phone from one listing per host. Hard cases (browser modal) still belong in [Airbnb Pro Host Scraper](https://apify.com/corent1robert/airbnb-professional-host-scraper).

### Pricing (pay-per-result)

Each row saved to the dataset is one **result** (`apify-default-dataset-item`). On the Store, results are billed at about **$0.007** each (Bronze tier ~$0.00699).

| Row type | `recordType` | When saved |
|----------|--------------|------------|
| Host summary | `host` | One per profile URL (includes contact fields when that option is ON — no extra row) |
| Listing | `listing` | One per listing when listing rows are ON (default) |
| Review | `review` | One per review when review export is ON (default: sample) |

**Reviews on this Actor vs Reviews Scraper**

| | **This Actor — profile reviews** | **[Airbnb Reviews Scraper](https://apify.com/corent1robert/airbnb-reviews-scraper)** |
|---|---|---|
| Input | Host profile URL | Listing URL |
| Default | ~5 guest review **sample** | All listing reviews |
| Full mode | Enable **Fetch all profile reviews** in Console | Always full export |
| Best for | Host reputation before outreach | Deep dive on one property |

**Examples (at $0.007/result):**

- Qualify only — 20 hosts, listing rows OFF, reviews OFF → **20 results ≈ $0.14**
- Standard run — 1 host, 36 listings, 5 review sample rows → **42 results ≈ $0.29**
- Full profile reviews (capped) — 1 host, 36 listings, 30 guest + 13 host reviews → **80 results ≈ $0.56**
- Outbound — 20 hosts + contacts ON, listing rows OFF → **20 results ≈ $0.14** (contact on host row)

Configure **Pay per event** in Console with a single priced event: `apify-default-dataset-item`. No custom event names in code — no unknown-event warnings.

Actor ID (dev): `ylqefCXcCvaEHdatW` · [Full Airbnb suite](#airbnb-actors-suite-outreacher--corent1robert)

### Local development

```bash
cd airbnb-host-portfolio-scraper
npm install
cp input.json storage/key_value_stores/default/INPUT.json
npm start
```

After a local run, open:

- **`output-hosts.csv`** — one row per host (counts, ratings, flags, cities/countries)
- **`output-listings.csv`** — one row per listing (when `includeListingRows` is ON)
- **`output-reviews.csv`** — one row per review (when `includeReviewRows` is ON)

All CSVs are UTF-8 with BOM for Excel. On Apify Cloud, use the **Host overview**, **Listings**, and **Reviews** dataset views instead.

**Local input:** `apify run` validates `storage/key_value_stores/default/INPUT.json` against the Console schema. Keep that file complete, or pass `--input-file=./input.json`. Simulated KV input overwrites overlapping keys from repo-root `input.json`.

Run tests:

```bash
npm test

## Scale smoke — Lodgewell only, 30 reviews per tab (timed run for perf docs)
npm run start:scale-lodgewell
```

### Support

Questions or custom workflows: **corentin@outreacher.fr**

# Actor input Schema

## `hostProfileUrls` (type: `array`):

Public Airbnb host profile links.

## `includeFullReviews` (type: `boolean`):

Paginate all guest reviews (and host-as-guest tab when present) from the host profile. Off = fast sample only. For every review on one **listing URL**, use Airbnb Reviews Scraper instead.

## `maxReviewsPerSource` (type: `integer`):

Only applies when **Fetch all profile reviews** is ON. Cap guest and host tabs separately. **0** = no cap (can be slow on hosts with thousands of reviews).

## `includeContactEnrichment` (type: `boolean`):

Look up professional host disclosure on one listing per host. Email and phone are saved on the host row.

## Actor input object example

```json
{
  "hostProfileUrls": [
    "https://www.airbnb.com/users/show/192427142"
  ],
  "includeFullReviews": false,
  "maxReviewsPerSource": 0,
  "includeContactEnrichment": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Host summaries and listing rows from processed profile URLs.

## `hostOverview` (type: `string`):

One row per host — counts, ratings, and listing URL list.

## `listings` (type: `string`):

Listing cards extracted from host profiles.

## `runLog` (type: `string`):

Progress log with host counts and duration.

# 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 = {
    "hostProfileUrls": [
        "https://www.airbnb.com/users/show/192427142"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/airbnb-host-portfolio-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 = { "hostProfileUrls": ["https://www.airbnb.com/users/show/192427142"] }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/airbnb-host-portfolio-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 '{
  "hostProfileUrls": [
    "https://www.airbnb.com/users/show/192427142"
  ]
}' |
apify call corent1robert/airbnb-host-portfolio-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Host Portfolio Scraper · Map Host Listings",
        "description": "Paste Airbnb host profile URLs and map each host's portfolio — listing count, ratings, superhost flags, and export-ready listing rows. No login. No API key.",
        "version": "1.8",
        "x-build-id": "2qstCyQ88yUEkRKbB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/corent1robert~airbnb-host-portfolio-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-corent1robert-airbnb-host-portfolio-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/corent1robert~airbnb-host-portfolio-scraper/runs": {
            "post": {
                "operationId": "runs-sync-corent1robert-airbnb-host-portfolio-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/corent1robert~airbnb-host-portfolio-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-corent1robert-airbnb-host-portfolio-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "hostProfileUrls": {
                        "title": "Host profile URLs",
                        "type": "array",
                        "description": "Public Airbnb host profile links.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeFullReviews": {
                        "title": "Fetch all profile reviews",
                        "type": "boolean",
                        "description": "Paginate all guest reviews (and host-as-guest tab when present) from the host profile. Off = fast sample only. For every review on one **listing URL**, use Airbnb Reviews Scraper instead.",
                        "default": false
                    },
                    "maxReviewsPerSource": {
                        "title": "Max reviews per tab",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only applies when **Fetch all profile reviews** is ON. Cap guest and host tabs separately. **0** = no cap (can be slow on hosts with thousands of reviews).",
                        "default": 0
                    },
                    "includeContactEnrichment": {
                        "title": "Pull business contact (email and phone)",
                        "type": "boolean",
                        "description": "Look up professional host disclosure on one listing per host. Email and phone are saved on the host row.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
