Airbnb Host Portfolio Scraper — All Listings by Host
Pricing
from $3.00 / 1,000 listings
Airbnb Host Portfolio Scraper — All Listings by Host
Scrape an Airbnb host's public portfolio: every listing they manage with title, type, rating, reviews and Superhost flag. Map portfolios from host URL, host ID or listing URL. B2B STR ops and competitor host intel.
Pricing
from $3.00 / 1,000 listings
Rating
0.0
(0)
Developer
Noah Adler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Airbnb Host Portfolio Scraper
Airbnb host portfolio / Airbnb listings by host API: paste a host URL (or listing URL) and get every public listing they manage — title, type, rating, reviews, photo, Superhost flag.
B2B angle: portfolio map, not email scraping.
Works via Airbnb’s public GraphQL (
UserProfileBeehiveListingQuery). Proxy optional; enable if blocked.
Why this Actor: Host URL / ID / listing URL · Paginated portfolio · One Dataset row per listing · Pairs with Occupancy (#02)
Table of contents
- What this Actor does
- What you get
- Features
- Input
- Output example
- Output fields
- Quick start (API)
- Use cases
- Limitations
- FAQ
- Keywords
What this Actor does
| Step | Action |
|---|---|
| 1 | Resolve hostId from host URL, ID, or listing page |
| 2 | Call Beehive listings GraphQL (pages of 12) |
| 3 | Normalize listing + host fields |
| 4 | Push one row per listing |
What you get
Host
hostId,hostUrl,hostName(when resolvable)isSuperhost,listingsCount
Each listing
- Title, property/room type
- Rating + review count
- Cover photo URL
Features
| Capability | Detail |
|---|---|
| Flexible input | Host URL, host ID, or listing URL |
| Pagination | Up to maxListings (default 200) |
| No browser | HTTP + curl_cffi |
| Composable | Feed listing IDs into Occupancy / Calendar Actors |
Input
| Field | Required | Description |
|---|---|---|
startUrls | Cond. | Host / listing URLs or IDs |
hostIds | Cond. | Numeric host IDs |
maxListings | No | Cap per host |
locale / currency | No | Request context |
proxyConfiguration | No | Optional |
Example
{"startUrls": ["https://www.airbnb.com/users/show/107434423"],"maxListings": 50}
Output example
{"hostId": "107434423","hostUrl": "https://www.airbnb.com/users/show/107434423","isSuperhost": false,"listingsCount": 12,"listingId": "12345678","listingUrl": "https://www.airbnb.com/rooms/12345678","title": "Blueground | Lakeview…","propertyType": "Apartment","ratingAverage": 4.8,"reviewsCount": 42}
Output fields
| Field | Notes |
|---|---|
hostId, hostUrl, hostName | Host identity |
isSuperhost, listingsCount | Portfolio signals |
listingId, listingUrl, title | Listing |
propertyType, roomType, roomTypeCategory | Type |
ratingAverage, reviewsCount, pictureUrl | Social proof |
scrapedAt, error, errorMessage | Meta |
Quick start (API)
from apify_client import ApifyClientclient = ApifyClient("<YOUR_TOKEN>")run = client.actor("YOUR_USERNAME/airbnb-host-portfolio").call(run_input={"startUrls": ["https://www.airbnb.com/users/show/107434423"],"maxListings": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["listingId"], item["title"])
Use cases
- Competitor host portfolio maps
- Multi-listing operator discovery
- Feed listings into Calendar / Occupancy Actors
- STR ops / agency prospecting (public data only)
Limitations
- No emails / phones (out of scope).
/users/showmay redirect to login in browser; GraphQL Beehive still works with API key.hostNamebest when input is a listing URL (parsed from PDP).listingsCount= listings returned (capped bymaxListings).- Respect Airbnb Terms of Service.
FAQ
Listing URL instead of host?
Yes — the Actor reads hostId from the listing page, then pulls the portfolio.
Occupancy for the whole portfolio?
Pipe listingIds into airbnb-occupancy-adr-revpar.
Blocked?
Enable Apify proxy in input.
Keywords
airbnb host portfolio, airbnb host listings, airbnb host scraper, listings by host, airbnb superhost portfolio, airbnb multi listing host, str host map