Airbnb Host Portfolio Scraper
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
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,
isPortfolioTruncatedtells 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?
| Field | Description |
|---|---|
rowType | listing for a surfaced property or host for an empty/error profile |
status | ok, empty, or error |
hostId | Numeric Airbnb user ID |
hostName | Public host display name |
hostLocation | Public profile location |
hostBio | Public host biography |
hostIsSuperhost | Host-level Superhost flag |
hostVerificationTypes | Verification labels Airbnb exposes publicly |
hostManagedListingsTotalCount | Total managed listings reported by Airbnb |
surfacedListingCount | Listing records returned on the public profile |
isPortfolioTruncated | Whether reported total exceeds surfaced count |
listingId | Airbnb listing ID |
listingUrl | Canonical Airbnb room URL |
listingName | Public listing name or placeholder name |
propertyTypeName | Property type, such as Apartment |
roomType | Localized public room type |
bedrooms, bathrooms, beds | Capacity fields when exposed |
instantBookEnabled | Instant Book availability |
ratingAverage | Public average rating |
reviewCount | Public review count |
pictureUrl, thumbnailUrl | Public image URLs |
scrapedAt | UTC 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
- Open the Actor input page.
- Add one or more Airbnb URLs like
https://www.airbnb.com/users/show/107434423. - Optionally add numeric host IDs.
- Keep the maximum at 10 for all publicly surfaced listings.
- Leave proxy use disabled unless your environment needs it.
- Click Start.
- 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 = okfor listing-only exports. - Keep host-only rows in monitoring workflows to detect removed or empty profiles.
- Store snapshots with
scrapedAtwhen 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 ApifyClientclient = 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().itemsprint(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.
Related Airbnb scrapers
- Airbnb Listing Scraper — extract listing and search data.
- Airbnb Reviews Scraper — collect review records for Airbnb listings.
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.