Airbnb Host Portfolio Scraper avatar

Airbnb Host Portfolio Scraper

Pricing

Pay per event

Go to Apify Store
Airbnb Host Portfolio Scraper

Airbnb Host Portfolio Scraper

🏠 Map public Airbnb host profiles to surfaced managed listings. Export host details, reported portfolio size, property types, ratings, reviews, images, and canonical URLs.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Turn public Airbnb host profiles into structured host-to-listing portfolio data.

Paste Airbnb host profile URLs or numeric host IDs. The Actor returns one export-ready row for every managed listing that Airbnb publicly surfaces, enriched with host identity, portfolio size, property attributes, ratings, reviews, and images.

Coverage note: Airbnb currently surfaces up to 10 managed listings on a public host profile. This Actor reports that visible subset honestly. When Airbnb exposes a larger total count, isPortfolioTruncated tells you that more inventory exists but is not public on the profile.

What does Airbnb Host Portfolio Scraper do?

Airbnb Host Portfolio Scraper maps a public host profile to its visible property portfolio.

It extracts:

  • 🧑 Host ID, display name, location, bio, and profile image
  • ⭐ Superhost, identity badge, profile, and home-host flags
  • 🗓️ Hosting experience and public verification types
  • 🏘️ Total managed listing count reported by Airbnb
  • 🔎 Number of listing records surfaced on the public profile
  • 🏠 Listing ID, canonical URL, name, property type, and room type
  • 🛏️ Bedrooms, bathrooms, and beds when available
  • ⚡ Instant-book, luxury, new-listing, and Superhost flags
  • 📊 Rating average and review count
  • 🖼️ Listing image and thumbnail URLs

Results are available as JSON, CSV, Excel, XML, RSS, or through the Apify API.

Who is it for?

Short-term rental analysts

Build repeatable samples of professional operators and compare reported portfolio sizes with publicly promoted inventory.

Property-management sales teams

Enrich host lead lists, identify multi-listing operators, and prioritize accounts with larger reported portfolios.

Real estate investors

Research operator concentration, property types, and visible listing quality before deeper market analysis.

Regulators and researchers

Create reproducible snapshots of public host-to-listing relationships without signing into Airbnb.

Data vendors and developers

Feed normalized host and listing rows into CRMs, warehouses, dashboards, enrichment pipelines, and monitoring jobs.

Why use this Airbnb host scraper?

Airbnb host pages contain useful structured data, but collecting it manually is slow and inconsistent.

This Actor provides:

  • Batch input for URLs and host IDs
  • Stable fields across every dataset row
  • Deduplication when the same host appears more than once
  • Traceability through source URLs, statuses, errors, and timestamps
  • Honest coverage that distinguishes total portfolio size from surfaced listings
  • No-login operation for public host profiles
  • Optional proxies for environments where direct access is blocked
  • Apify integrations for schedules, webhooks, API access, and cloud storage

What data can you extract?

FieldDescription
rowTypelisting for a surfaced property or host for an empty/error profile
statusok, empty, or error
hostIdNumeric Airbnb user ID
hostNamePublic host display name
hostLocationPublic profile location
hostBioPublic host biography
hostIsSuperhostHost-level Superhost flag
hostVerificationTypesVerification labels Airbnb exposes publicly
hostManagedListingsTotalCountTotal managed listings reported by Airbnb
surfacedListingCountListing records returned on the public profile
isPortfolioTruncatedWhether reported total exceeds surfaced count
listingIdAirbnb listing ID
listingUrlCanonical Airbnb room URL
listingNamePublic listing name or placeholder name
propertyTypeNameProperty type, such as Apartment
roomTypeLocalized public room type
bedrooms, bathrooms, bedsCapacity fields when exposed
instantBookEnabledInstant Book availability
ratingAveragePublic average rating
reviewCountPublic review count
pictureUrl, thumbnailUrlPublic image URLs
scrapedAtUTC extraction timestamp

Airbnb does not populate every listing field on every host page. Missing optional values are omitted rather than guessed.

How to scrape Airbnb host portfolios

  1. Open the Actor input page.
  2. Add one or more Airbnb URLs like https://www.airbnb.com/users/show/107434423.
  3. Optionally add numeric host IDs.
  4. Keep the maximum at 10 for all publicly surfaced listings.
  5. Leave proxy use disabled unless your environment needs it.
  6. Click Start.
  7. Open the dataset to preview or export the rows.

For repeat monitoring, save the input as an Apify task and attach a schedule.

Input example

{
"hostProfileUrls": [
{ "url": "https://www.airbnb.com/users/show/107434423" }
],
"hostIds": [],
"maxListingsPerHost": 10,
"proxyConfiguration": {
"useApifyProxy": false
}
}

You may combine URLs and IDs. The Actor normalizes both forms and processes each unique host once.

Output example

{
"rowType": "listing",
"status": "ok",
"sourceUrl": "https://www.airbnb.com/users/show/107434423",
"hostProfileUrl": "https://www.airbnb.com/users/show/107434423",
"hostId": "107434423",
"hostName": "Georgia",
"hostLocation": "New York, NY",
"hostManagedListingsTotalCount": 3584,
"surfacedListingCount": 10,
"isPortfolioTruncated": true,
"listingId": "579362581900442399",
"listingUrl": "https://www.airbnb.com/rooms/579362581900442399",
"listingName": "Blueground | Capitol Hill, gym & lounge, nr I5",
"propertyTypeName": "Apartment",
"roomType": "Rental unit",
"bedrooms": 1,
"bathrooms": 1,
"beds": 1,
"instantBookEnabled": true,
"ratingAverage": 5,
"reviewCount": 1,
"scrapedAt": "2026-07-14T00:00:00.000Z"
}

Actual values change as Airbnb profiles change.

Empty, private, and unavailable profiles

Batch workflows need one traceable answer per input.

If a profile has no surfaced listings, the Actor emits a host-only row with status: "empty".

If Airbnb returns an error or no public profile payload, it emits a host-only row with status: "error" and a readable error field.

These rows are charged like other dataset rows because they are persisted results that preserve input-to-output traceability.

How much does it cost to scrape Airbnb host portfolios?

The Actor uses pay-per-event pricing:

  • A small start charge covers fixed run setup.
  • Each saved listing or host-only status row is one result event.
  • Apify subscription tiers receive automatic volume discounts.

You can always see the estimated maximum charge before starting a run. Final tier prices shown on the Actor page are authoritative.

A profile usually produces at most 10 rows, so a small lookup remains inexpensive and predictable.

Accuracy and portfolio coverage

hostManagedListingsTotalCount and surfacedListingCount measure different things.

For example, a professional operator may have a total count of 3,584 while Airbnb surfaces only 10 representative listings on the public profile.

The Actor does not claim that those 10 records are the operator's full inventory.

Use isPortfolioTruncated to identify profiles where the visible subset is smaller than the reported total.

Tips for reliable runs

  • Use canonical /users/show/<hostId> profile URLs.
  • Prefer numeric host IDs when URLs were copied from systems that add tracking parameters.
  • Keep batches moderate and schedule recurring runs instead of sending bursts.
  • Configure a proxy only after direct access fails in your environment.
  • Filter status = ok for listing-only exports.
  • Keep host-only rows in monitoring workflows to detect removed or empty profiles.
  • Store snapshots with scrapedAt when comparing portfolio changes over time.

Export and integrations

Google Sheets and Excel

Export the dataset as CSV or XLSX, or connect Apify to Google Sheets for recurring lead enrichment.

Webhooks

Trigger a webhook after each run and send new portfolio rows to your application, CRM, or automation platform.

Make and Zapier

Use Apify integrations to start runs from a workflow and route finished dataset items to downstream tools.

Data warehouses

Fetch dataset items through the API and load them into BigQuery, Snowflake, PostgreSQL, or your preferred warehouse.

Monitoring

Save host inputs as a task, schedule daily or weekly runs, and compare listing IDs or total counts with the previous snapshot.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/airbnb-host-portfolio-scraper').call({
hostIds: ['107434423'],
maxListingsPerHost: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/airbnb-host-portfolio-scraper').call(run_input={
'hostIds': ['107434423'],
'maxListingsPerHost': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

API usage with cURL

curl -X POST \
'https://api.apify.com/v2/acts/automation-lab~airbnb-host-portfolio-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"hostIds":["107434423"],"maxListingsPerHost":10}'

After the run finishes, read items from its default dataset URL.

Use with Apify MCP and AI agents

The MCP endpoint for this Actor is:

https://mcp.apify.com/?tools=automation-lab/airbnb-host-portfolio-scraper

Claude Code setup

$claude mcp add --transport http apify-airbnb-hosts "https://mcp.apify.com/?tools=automation-lab/airbnb-host-portfolio-scraper"

Claude Desktop setup

Add this configuration to Claude Desktop. The same mcpServers JSON works as a starting point for Cursor and VS Code MCP setup; place it in the MCP configuration file used by that client.

{
"mcpServers": {
"apify-airbnb-hosts": {
"type": "http",
"url": "https://mcp.apify.com/?tools=automation-lab/airbnb-host-portfolio-scraper"
}
}
}

Cursor setup

Open Cursor MCP settings, add a new HTTP server, and use the endpoint above or the mcpServers JSON.

VS Code setup

Open your MCP server configuration, add an HTTP server named apify-airbnb-hosts, and use the same endpoint.

Example prompts:

  • “Extract the publicly surfaced listings for Airbnb host 107434423.”
  • “Compare these Airbnb host IDs and rank them by reported managed listing count.”
  • “Return host name, total portfolio count, listing URLs, ratings, and review counts as JSON.”
  • “Check this saved list weekly and identify newly surfaced listing IDs.”

Responsible use and legality

This Actor extracts information that Airbnb displays on public host profile pages without login.

Public availability does not remove your responsibilities. Follow applicable laws, Airbnb's terms, privacy obligations, and contractual restrictions.

Do not use the data for harassment, discrimination, unauthorized profiling, or decisions that require consent or regulated due process.

Collect only what your use case needs, secure exported data, define retention periods, and honor valid deletion requests.

Limitations

  • Airbnb may change its page structure or public profile payload.
  • Public profiles currently surface at most 10 managed listings.
  • The surfaced subset is not guaranteed to represent every property a host manages.
  • Some property fields are absent on host pages even when available on listing detail pages.
  • Removed, private, or non-host profiles may return only a status row.
  • Ratings, counts, flags, and images reflect Airbnb's public state at extraction time.
  • This Actor does not sign in, solve CAPTCHAs, or access private account data.

Troubleshooting

“Invalid Airbnb host profile URL or host ID”

Use a numeric ID or a URL containing /users/show/<numeric-id>. Listing URLs under /rooms/ are not host profile URLs.

A run returns status: error

Read the error field and run log. Retry transient upstream failures. If direct access is blocked in your environment, enable Apify Proxy in the input.

Why are only 10 listings returned?

That is the subset Airbnb publicly surfaces on the host profile. Check hostManagedListingsTotalCount and isPortfolioTruncated for the reported larger portfolio.

Why are some property fields missing?

Airbnb does not include every attribute for every surfaced listing. The Actor omits unavailable values instead of inventing them.

FAQ

Does this scraper require an Airbnb account?

No. It uses public host profile data and does not require Airbnb login credentials.

Can it find every listing owned or managed by a host?

No. It extracts only the listing records Airbnb publicly surfaces and clearly reports when the total count is larger.

Can I input host IDs instead of URLs?

Yes. Add numeric IDs in hostIds; URLs and IDs may be used together.

Are duplicate hosts charged twice?

No. Inputs normalize to host IDs, and each unique host is fetched once per run.

Can I monitor portfolio changes?

Yes. Schedule a saved task and compare listingId, surfacedListingCount, and hostManagedListingsTotalCount across dated datasets.

Does it scrape reviews?

It returns listing review counts, not review text. Use the related Airbnb reviews scraper for review records.

Choose this Actor when your starting entity is a host profile and your goal is a host-to-managed-listing portfolio map.

Support

If a public host profile stops extracting, open an issue from the Actor page and include:

  • the public host URL or ID;
  • the run URL;
  • the expected versus actual result;
  • whether a proxy was enabled.

Do not include passwords, session cookies, private account data, or other secrets.