# Airbnb Host Listings Scraper (`cirkit/airbnb-host-scraper`) Actor

Paste any Airbnb host URL (or host ID) and get the host profile plus every public listing they manage. Pulls verified-since date, languages, response stats, total listings count, plus per-listing fields (room type, beds, photo, rating, review count). Optionally fetches full PDP detail per listing.

- **URL**: https://apify.com/cirkit/airbnb-host-scraper.md
- **Developed by:** [Crikit](https://apify.com/cirkit) (community)
- **Categories:** Real estate
- **Features:** Limited permissions
- **Stats:** 121 total users, 21 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 1.45 out of 5 stars

## Pricing

from $5.00 / 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.

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 Host Listings Scraper

**Scrape any Airbnb host** by URL or host ID and get the full public profile plus the listings they manage. This **Airbnb host scraper** returns verified-since date, languages spoken, response rate and time, superhost status, review counts, and per-listing detail — room type, beds, rating, and cover photo.

No Airbnb API key, no login, and no headless browser. Results land in a structured dataset you can export to JSON, CSV, Excel, or XML, or pull straight from the Apify API.

### What is Airbnb Host Listings Scraper?

Airbnb Host Listings Scraper is an [Apify Actor](https://apify.com/actors) that extracts host profiles and their full listing portfolios from [Airbnb](https://www.airbnb.com) and returns them as clean, structured records. Over 80 fields per host make it straightforward to separate a one-property host from a professional operator running dozens of units, which is the distinction most short-term-rental market analysis turns on. Airbnb's public API returns at most 10 managed listings per host, and the Actor always reports `hostManagedListingsTotalCount` so you know whether you have the full portfolio or the first 10 of a larger one.

### What data can this Airbnb host scraper extract?

Every run writes one row per host. The full schema carries **81 fields**; the most-used ones are below.

| Field | Type | Description |
| --- | --- | --- |
| `extractionStatus` | string | Status of the record: ok (basic listing card), ok+detail (with PDP enrichment), ok+detail-failed (basic card... |
| `hostId` | string | Airbnb numeric user ID of the host. |
| `hostUrl` | string | Canonical Airbnb host profile URL. |
| `hostName` | string | Public display name of the host (the smartName field on Airbnb). |
| `hostFirstName` | string | Public-facing first name shown on listings. |
| `hostAbout` | string | Free-text biography the host wrote about themselves. |
| `hostLocalizedAbout` | string | Localized version of the about text when Airbnb auto-translates. |
| `hostLocation` | string | Self-reported location of the host. |
| `hostProfilePictureUrl` | string | URL of the host's profile picture on the Airbnb CDN. |
| `hostHasProfilePicture` | boolean | Whether the host has uploaded a profile picture. |
| `hostCanViewProfilePicture` | boolean | Whether the profile picture is viewable by the public (Airbnb hides it in some states). |
| `hostHasIdentityBadge` | boolean | Whether the host shows the identity badge on their profile. |
| `hostHasVerificationBadge` | boolean | Whether Airbnb shows a verification badge on the host profile. |
| `hostIdentityVerificationTypes` | array | List of verification types passed (e.g. Email address, Phone number, Government ID). |
| `hostVerifiedSinceText` | string | Free-text verification date displayed on the host profile. |
| `hostIsSuperhost` | boolean | True when Airbnb currently flags the host as a Superhost. |
| `hostIsHomeHost` | boolean | Whether the user is set up to host stays (not just an experiences or service host). |
| `hostIsServiceHost` | boolean | Whether the user offers Airbnb Services. |
| `hostIsExperienceHost` | boolean | Whether the user offers Airbnb Experiences. |
| `hostGuestType` | string | Airbnb classification of the user's guest history (e.g. EXPERIENCED, NEW). |
| `hostShowBusinessLabel` | string | Business label string displayed for professional hosts, when applicable. |
| `hostShowBusinessVerificationBadge` | boolean | Whether the host shows a business verification badge. |

See the **Output** tab in Apify Console for all 81 fields.

### How to scrape Airbnb host profiles

1. Open [Airbnb Host Listings Scraper](https://apify.com/cirkit/airbnb-host-scraper) and click **Try for free**.
2. Paste Airbnb host URLs into `hostUrls` or `startUrls`, or pass bare IDs to `hostIds`.
3. Turn on `includeFullListingDetails` to enrich every listing the host manages, not just name it.
4. Set `locale` and `currency` for the language and money format you want.
5. Cap the run with `maxItems`, and raise `maxConcurrency` for large host lists.
6. Click **Start** and watch rows appear live in the **Output** tab.
7. Export the dataset as JSON, CSV, Excel, or XML — or fetch it from the [Apify API](https://docs.apify.com/api/v2) once the run finishes.

### Airbnb Host Listings Scraper input options

| Input | Type | What it does | Default |
| --- | --- | --- | --- |
| `startUrls` | array | Airbnb host profile URLs (https://www.airbnb.com/users/show/). Listing URLs (https://www.airbnb.com/rooms/) also... | `see schema` |
| `hostUrls` | array | Same as above but as plain strings - convenient when calling the actor via API. Host profile URLs, listing URLs, or... |  |
| `hostIds` | array | Convenience input: pass just numeric host IDs and the URLs are built for you. Combine freely with the other inputs. |  |
| `includeFullListingDetails` | boolean | When on, each listing record is enriched with photos, amenities, description, location, house rules, and host-card... | `false` |
| `maxItems` | integer | Hard cap on the total number of result records to push. Leave empty for no limit. |  |
| `maxConcurrency` | integer | How many hosts to process in parallel. | `10` |
| `locale` | string | Airbnb locale for the response (affects localized text fields). | `"en-US"` |
| `currency` | string | Currency code for any price-bearing fields when full PDP details are fetched. | `"USD"` |

Proxy is configured through the standard `proxyConfiguration` object; the defaults shipped with this Actor are already tuned for the target site.

### Example output

```json
{
    "startUrls": [
        { "url": "https://www.airbnb.com/users/show/107434423" },
        { "url": "https://www.airbnb.com/users/show/15782486" }
    ],
    "hostIds": ["10930913"],
    "includeFullListingDetails": false,
    "maxItems": 50,
    "maxConcurrency": 5
}
```

### How much does it cost to scrape Airbnb?

This Actor runs on **pay per result** pricing: **$0.005 per host record** ($5 per 1,000). A one-time start fee of $0.00005 applies per run.

| Results | Approximate cost |
| --- | --- |
| 1,000 | $5.00 |
| 10,000 | $50.00 |
| 100,000 | $500.00 |

You pay for rows you actually receive, so a search that returns nothing costs nothing beyond the start fee. Every Apify account includes free monthly usage credit, so you can trial Airbnb Host Listings Scraper at no cost.

### What can you build with Airbnb data?

#### Identify professional operators in a market

`hostManagedListingsTotalCount` separates hobbyist hosts from property managers instantly — and because it reports the true total even when only 10 listings are returned, it stays accurate for large portfolios.

#### Build a prospect list for property-management services

Hosts with several listings, mediocre ratings, and slow response times are the clearest fit for management, pricing, or co-hosting services. All three signals are on the same row.

#### Study what correlates with superhost status

Response stats, review counts, tenure, and per-listing ratings together let you model what actually predicts the superhost badge in a given market.

#### Map portfolio concentration in a neighborhood

Resolve every listing back to its host to see how much of a neighborhood's supply a handful of operators control.

#### Enrich acquisition targets

Before approaching an owner, pull their whole portfolio in one run so you know exactly what they hold.

### Airbnb scraping tips and limits

- Host IDs appear in any `airbnb.com/users/show/<id>` link, and every listing detail row carries its host — so [Airbnb Details Scraper](https://apify.com/cirkit/airbnb-details-scraper) output feeds this Actor directly.
- `includeFullListingDetails` multiplies both runtime and cost. Leave it off for a first pass at portfolio size.
- Airbnb caps managed-listings responses at 10 per host. Compare the number of listing rows you get against `hostManagedListingsTotalCount` before concluding you have a host's whole portfolio.
- Host names and photos are personal data. If you are in the EU or handling EU hosts, have a GDPR basis before storing rows.
- Response-rate fields are among the most volatile on the profile — re-pull them if the number matters to a decision.

### Integrations and automation

Run Airbnb Host Listings Scraper on a [schedule](https://docs.apify.com/platform/schedules) to keep a Airbnb dataset fresh, or trigger it from your own stack through the [Apify API](https://docs.apify.com/api/v2) and the official [JavaScript](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python) clients. Native [integrations](https://docs.apify.com/platform/integrations) push results into Google Sheets, Slack, Airtable, Zapier, Make, GitHub, or any webhook endpoint. The Actor also works as an [MCP](https://docs.apify.com/platform/integrations/mcp) tool, so an AI agent can call it directly.

### Related scrapers

| Actor | What it does |
| --- | --- |
| [Airbnb Listing Details Scraper](https://apify.com/cirkit/airbnb-details-scraper) | Full listing detail, including the host block that feeds this Actor. |
| [Airbnb Search Scraper](https://apify.com/cirkit/airbnb-search-scraper) | Discover listings across a market first. |
| [Airbnb Reviews Scraper](https://apify.com/cirkit/airbnb-reviews-scraper) | Reviews for any listing in the host's portfolio. |
| [VRBO Search Results Scraper](https://apify.com/cirkit/vrbo-search-scraper) | Check whether the same operator also lists on VRBO. |

### Frequently asked questions

#### Can I find every listing a host owns?

You get every listing Airbnb publicly attributes to that host profile. Operators who split a portfolio across several host accounts will not be fully captured by a single host lookup.

#### Does it work for co-hosts and business hosts?

Yes. `hostIsSuperhost`, `hostShowBusinessLabel`, and `hostGuestType` distinguish individual hosts, business hosts, and service hosts on the same row.

#### Do I need a Airbnb API key?

No. Airbnb Host Listings Scraper reads publicly available Airbnb pages and endpoints directly, so there is no key to obtain, no OAuth app to register, and no account to connect.

#### Can I export Airbnb data to CSV, Excel, or Google Sheets?

Yes. Every run stores results in an Apify dataset that exports to JSON, JSONL, CSV, Excel, XML, or HTML with one click, and the Google Sheets integration writes rows straight into a spreadsheet.

#### Can I run Airbnb Host Listings Scraper on a schedule?

Yes. Apify schedules run the Actor hourly, daily, weekly, or on any cron expression, and webhooks can notify your systems the moment a run finishes.

#### Is it legal to scrape Airbnb?

Scraping publicly available data is broadly lawful in the US and EU, but the answer depends on what you collect and how you use it. This Actor is built to gather public host profile information Airbnb publishes publicly — note this includes personal data such as names and photos. Personal data carries extra obligations under GDPR and CCPA. Read Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/) and take your own legal advice for your use case.

### Support and feedback

Found a bug, a missing field, or a Airbnb page shape this Actor does not handle yet? Open an issue from the **Issues** tab on the Actor page. Feature requests and custom-scraper enquiries are welcome there too.

# Actor input Schema

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

Airbnb host profile URLs (https://www.airbnb.com/users/show/<id>). Listing URLs (https://www.airbnb.com/rooms/<id>) also work - the owning host is resolved from the listing and then scraped. Mix freely with the other input fields.

## `hostUrls` (type: `array`):

Same as above but as plain strings - convenient when calling the actor via API. Host profile URLs, listing URLs, or numeric host IDs are all accepted. Combine freely with the other inputs.

## `hostIds` (type: `array`):

Convenience input: pass just numeric host IDs and the URLs are built for you. Combine freely with the other inputs.

## `includeFullListingDetails` (type: `boolean`):

When on, each listing record is enriched with photos, amenities, description, location, house rules, and host-card stats from the listing's PDP. Adds one extra API call per listing and slightly more memory.

## `maxItems` (type: `integer`):

Hard cap on the total number of result records to push. Leave empty for no limit.

## `maxConcurrency` (type: `integer`):

How many hosts to process in parallel.

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

Airbnb locale for the response (affects localized text fields).

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

Currency code for any price-bearing fields when full PDP details are fetched.

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

Proxy configuration for Airbnb requests. Defaults to Apify Proxy pinned to the US, because Airbnb omits some profile fields for non-US exit IPs. If a proxy or country is unavailable on your account, the run falls back automatically rather than failing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.airbnb.com/users/show/107434423"
    },
    {
      "url": "https://www.airbnb.com/users/show/15782486"
    }
  ],
  "hostUrls": [],
  "hostIds": [],
  "includeFullListingDetails": false,
  "maxConcurrency": 10,
  "locale": "en-US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (type: `string`):

All records extracted in the latest run.

## `itemsCsv` (type: `string`):

All records in CSV format.

## `itemsJson` (type: `string`):

All records in JSON format.

## `errors` (type: `string`):

Failed host attempts, if any, stored outside the default dataset.

## `consoleRun` (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 = {
    "startUrls": [
        {
            "url": "https://www.airbnb.com/users/show/107434423"
        },
        {
            "url": "https://www.airbnb.com/users/show/15782486"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cirkit/airbnb-host-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": [
        { "url": "https://www.airbnb.com/users/show/107434423" },
        { "url": "https://www.airbnb.com/users/show/15782486" },
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cirkit/airbnb-host-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": [
    {
      "url": "https://www.airbnb.com/users/show/107434423"
    },
    {
      "url": "https://www.airbnb.com/users/show/15782486"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cirkit/airbnb-host-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cirkit/airbnb-host-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/mBp8qfKRxxRaTjOXh/builds/mlDpGymvMymXJWipG/openapi.json
