# 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
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## 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/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 Listings Scraper

Paste an Airbnb host URL (or just a host ID) and the Airbnb Host Listings Scraper returns the host's full public profile plus every listing they manage. One clean record per listing, with the host profile flattened in. Built directly on Airbnb's public GraphQL API, so it is fast, cheap, and does not require a browser, cookies, or login credentials of any kind.

### What the Airbnb Host Listings Scraper does

Give the actor a host URL like `https://www.airbnb.com/users/show/107434423` and you get back:

- The host's profile: name, location, biography, profile picture, languages spoken, response stats, identity verification status, Superhost flag, years hosting, total listings count, total reviews received, and a structured array of all profile prompts.
- Every public listing the host manages, with: numeric ID, canonical URL, property type, room type, beds, bedrooms, bathrooms, primary photo, thumbnail, instant-book flag, rating average, and review count.
- Optionally (one extra call per listing): the full PDP detail: description HTML, all photos, full amenity list, highlights, location coordinates, cancellation policy, and house rules.

The Airbnb Host Listings Scraper handles single-property Superhosts and large property-management companies on the same code path. Airbnb's public API caps managed-listings responses at 10 per host, and the actor faithfully reports `hostManagedListingsTotalCount` so you always know whether you have the whole set or the first 10 of a larger portfolio.

### When to use this actor

- Real estate market analysis: map portfolio sizes across cities, find professional hosts vs. casual hosts, segment by Superhost status.
- Property management lead generation: identify multi-listing operators by name and location.
- Competitor research: see what a competitor host charges per night across all their listings.
- Investor due diligence: confirm a host's track record and tenure before partnering.
- Data enrichment: hydrate a list of host IDs with structured profile data.
- Aggregating reviews and ratings for sentiment or reputation analysis.

### Input

The Airbnb Host Listings Scraper accepts host URLs, host IDs, or both:

```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
}
````

#### Input fields

- `startUrls` (array of `{ url }` objects): one or more host profile URLs.
- `hostIds` (array of strings): numeric host IDs, equivalent to passing the corresponding URL.
- `includeFullListingDetails` (boolean, default false): when on, each listing is enriched with PDP-level fields (description, photos, amenities, coordinates, house rules). Adds one extra API call per listing.
- `maxItems` (integer, optional): hard cap on total records pushed.
- `maxConcurrency` (integer, default 5): how many hosts to process in parallel.
- `locale` (string, default `en-US`): Airbnb locale.
- `currency` (string, default `USD`): currency for price-bearing fields.
- `proxyConfiguration` (object): Apify proxy configuration (defaults to automatic).

### Output

One record per listing, with the host profile flattened into every record so each row is self-contained. For hosts with no public listings, a single host-only record is emitted with `listingId` set to null. Records include over 50 host and listing fields; full type definitions live in `dataset_schema.json`.

#### Sample output (one listing record)

```json
{
    "extractionStatus": "ok",
    "hostId": "15782486",
    "hostUrl": "https://www.airbnb.com/users/show/15782486",
    "hostName": "Lodgewell",
    "hostLocation": "Austin, TX",
    "hostIsSuperhost": true,
    "hostManagedListingsTotalCount": 36,
    "hostRatingAverage": 4.8,
    "hostTimeAsHostYears": 11,
    "hostLanguages": "English, Spanish",
    "listingId": "28254684",
    "listingUrl": "https://www.airbnb.com/rooms/28254684",
    "listingName": "Cozy East Austin Bungalow",
    "listingPropertyType": "House",
    "listingRoomType": "Entire home",
    "listingBeds": 2,
    "listingBedrooms": 1,
    "listingBathrooms": 1,
    "listingRatingAverage": 4.9,
    "listingReviewCount": 412,
    "listingPictureUrl": "https://a0.muscache.com/im/pictures/...jpg",
    "scrapedAt": "2026-05-16T14:30:00.000Z"
}
```

### How the Airbnb Host Listings Scraper works under the hood

The actor calls Airbnb's public `UserProfileLegacyQuery` GraphQL endpoint with the persisted query hash, no authentication, no cookies, no API key beyond the public client identifier that Airbnb ships in every page. When `includeFullListingDetails` is on, it additionally calls `StaysPdpSections` per listing. Both endpoints return JSON, so no headless browser is ever launched. The actor runs comfortably at 512 MB and processes 5 hosts in parallel by default.

### Pricing

Flat pay-per-event pricing: one charge per record written to the dataset. No per-input charges, no per-host start fees, no surprises. Hosts with no listings produce one host-only record; hosts with N listings produce N records.

### Limits and constraints of the Airbnb Host Listings Scraper

- Airbnb's public API returns at most 10 listings per host call. The `hostManagedListingsTotalCount` field always reports the full total. For property-management companies with hundreds or thousands of listings, only the most recently surfaced 10 are returned.
- Private profiles (users who are not hosts, or who have hidden their profile) return an error record instead of a listing record.
- Output text fields respect the `locale` input.

### FAQ

#### Do I need an Airbnb account or login to scrape with this actor?

No. The Airbnb Host Listings Scraper uses Airbnb's public API surface. No login, no cookies, no session tokens.

#### Can the Airbnb Host Listings Scraper return more than 10 listings per host?

No. Airbnb's public API hard-caps the response at 10 managed listings, and there is no `offset` or `cursor` parameter exposed for this field. The actor returns the same data Airbnb's host profile page shows publicly.

#### Does the Airbnb Host Listings Scraper work for hosts in any country?

Yes. Airbnb's API is global; pass any host URL from any Airbnb regional domain (.com, .ca, .fr, .co.uk).

#### How fast is the Airbnb Host Listings Scraper?

About one host per second on default settings with one API call per host. With `includeFullListingDetails` on, each listing adds one extra call, so a 10-listing host takes roughly 5 seconds end to end.

#### What Python / Node libraries does this use?

The actor is built on Crawlee and the official Apify SDK for Node.js. It uses `got-scraping` for the HTTP transport. No browser dependencies.

# Actor input Schema

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

One or more Airbnb host URLs in the form https://www.airbnb.com/users/show/<id>. Mix freely with hostIds below.

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

Convenience input: pass just numeric host IDs and we will build the URLs for you. Combine freely with startUrls above.

## `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. The default uses Apify Proxy automatic mode.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.airbnb.com/users/show/107434423"
    },
    {
      "url": "https://www.airbnb.com/users/show/15782486"
    }
  ],
  "hostIds": [],
  "includeFullListingDetails": false,
  "maxConcurrency": 5,
  "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("💾 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 '{
  "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": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=cirkit/airbnb-host-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Host Listings Scraper",
        "description": "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.",
        "version": "0.3",
        "x-build-id": "xTQTiV7rQoILfwD3N"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/cirkit~airbnb-host-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-cirkit-airbnb-host-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/cirkit~airbnb-host-scraper/runs": {
            "post": {
                "operationId": "runs-sync-cirkit-airbnb-host-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/cirkit~airbnb-host-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-cirkit-airbnb-host-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": {
                    "startUrls": {
                        "title": "Host URLs",
                        "type": "array",
                        "description": "One or more Airbnb host URLs in the form https://www.airbnb.com/users/show/<id>. Mix freely with hostIds below.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "hostIds": {
                        "title": "Host IDs",
                        "type": "array",
                        "description": "Convenience input: pass just numeric host IDs and we will build the URLs for you. Combine freely with startUrls above.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeFullListingDetails": {
                        "title": "Include full PDP details per listing",
                        "type": "boolean",
                        "description": "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.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the total number of result records to push. Leave empty for no limit."
                    },
                    "maxConcurrency": {
                        "title": "Max concurrent hosts",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "How many hosts to process in parallel.",
                        "default": 5
                    },
                    "locale": {
                        "title": "Locale",
                        "type": "string",
                        "description": "Airbnb locale for the response (affects localized text fields).",
                        "default": "en-US"
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency code for any price-bearing fields when full PDP details are fetched.",
                        "default": "USD"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy configuration for Airbnb requests. The default uses Apify Proxy automatic mode.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
