Airbnb Host Portfolio Scraper · Map Host Listings
Pricing
from $5.49 / 1,000 results
Airbnb Host Portfolio Scraper · Map Host Listings
Paste Airbnb host profile URLs and map each host's portfolio — listing count, ratings, superhost flags, and export-ready listing rows. No login. No API key.
Pricing
from $5.49 / 1,000 results
Rating
0.0
(0)
Developer
Corentin Robert
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Airbnb Host Portfolio Scraper
Paste Airbnb host profile URLs and map each host's portfolio — listing counts, ratings, superhost flags, and export-ready listing rows for STR research and outbound.
No login. No API key. No Airbnb account.
Who is this for?
| You are… | Typical goal | Suggested setup |
|---|---|---|
| STR outbound / SDR team | Size a host before cold outreach | Discover with Airbnb Pro Host Scraper, then paste hostProfileUrl here |
| Conciergerie / PM operator | Benchmark competitor portfolio depth | Bulk 10–50 profile URLs; keep Include listing rows ON |
| Market analyst | Count listings and average ratings by host | Host overview view; filter extractionStatus; use cities / countries on host rows |
| Reputation / review research | Sample guest sentiment before full review export | Keep Include review rows ON; enable Fetch all profile reviews for complete history |
| Investor / acquisition scout | Shortlist multi-listing operators | Combine with Pro Host city search → Portfolio bulk → Pro Host contact pull |
What you get by default: host name, company/work label, location, bio snippet, verification flags, reported listing count, returned listing cards, host rating, review count, superhost / pro flags, languages, canonical listing URLs, listing rows with city / region / country (when detail enrichment is ON), and a review sample (~5 per tab).
When counts differ: With Fetch full portfolio ON (default), the Actor keeps loading until the reported listing total is reached when the profile page only shows a preview. Disable includeFullPortfolio to skip via API (see Input). For amenities, pricing, calendar, and GPS, chain listing URLs to the Airbnb Property Details Scraper.
Part of the Airbnb Actors suite — see linked Actors below for discovery, listing depth, and review export.
What you get
Host row (recordType: host)
| Field | Description |
|---|---|
hostId, hostProfileUrl, hostName | Host identity |
profilePictureUrl | Avatar from profile |
companyName | Work / company label from profile prompts |
companyLegalName, companyEmail, companyPhone, companyAddress, companyRegister, companyRCS | Legal business contact (optional — see Pull business contact input) |
emailDomain, contactStatus, contactSourceListingUrl | Contact metadata when enrichment is enabled |
hostLocation | Location from profile or prompts |
about, aboutShort | Full bio and 300-char export snippet |
listingCount | Listings returned in this run |
listingCountReported | Total shown on Airbnb profile |
averageRating, totalReviews, reviewsFromHostsCount | Host-level reputation |
isProHost, isSuperhost, hasBusinessBadge | Trust flags (isProHost uses work label, business badge, and multi-listing heuristics) |
hasIdentityBadge, identityVerifiedSince, identityVerificationTypes | Identity verification |
guestType, isServiceHost, isExperienceHost | Host program flags |
yearsHosting, languages | Host metadata |
cities, countries | Unique cities and countries from enriched listing rows |
listingUrls | Room URLs for downstream scrapers |
extractionStatus | success, partial, or failed |
Listing row (recordType: listing)
| Field | Description |
|---|---|
listingId, listingUrl, title | Listing identity |
city, region, country | Listing location (filled when Fill bedrooms, bathrooms, beds, and location is ON) |
rating, reviewCount | Listing reputation |
roomType, propertyType, bedrooms, bathrooms, beds | Property summary |
pictureUrl, isSuperhostListing | Card metadata |
Review row (recordType: review)
| Field | Description |
|---|---|
reviewSource | guest (from travelers about this host) or host (from other hosts when profile user was a guest) |
rating, comment, commentTranslated, commentLanguage, createdAt | Review content |
reviewerName, reviewerLocation, reviewerCity, reviewerRegion, reviewerCountry, reviewerIsSuperhost | Who wrote the review — location is the reviewer's city, not the listing |
listingUrl | Linked listing when present on the review |
Review location vs listing location: reviewerLocation (e.g. Olympia, Washington) is where the guest lives. Listing geo lives on listing rows (city, region, country).
Typical fill rates
Honest coverage from a reference run (May 2026): 2 public hosts — Sylviane (FR, 3 listings) and Lodgewell (US PM, 36 listings). Input: default options with Fetch full portfolio, Fill bedrooms, bathrooms, beds, and location, Include review rows, and Pull business contact ON.
| Area | Field / outcome | Typical fill | Notes |
|---|---|---|---|
| Host | hostName, listingCountReported, ratings | 100% | From profile HTML |
| Host | Full portfolio (listingCount = reported) | 100% | 3/3 and 36/36 in reference run |
| Host | hostLocation (profile) | ~50% | Depends on what the host filled in |
| Host | companyName / work label | ~100% | Both reference hosts had a label |
| Host | Business email or phone (contact ON) | ~50% | 1/2 in reference run — FR legal block found; US PM row empty |
| Host | cities / countries (aggregated) | 100% when listing details ON | Host row + CSV — e.g. 1 city / FR vs 7 cities / US for Lodgewell |
| Listing | title, roomType, beds / bedrooms / bathrooms | 100% | 39/39 with detail enrichment ON |
| Listing | city, region, country | ~100% | 39/39 after listing-page enrichment — not on profile cards alone |
| Listing | rating, reviewCount | ~95% | Empty when Airbnb shows 0 reviews on new listings |
| Review sample | comment | 100% | Embedded ~5 guest + ~5 host reviews per profile (when present) |
| Review sample | reviewerLocation (+ parsed city/region) | ~65–70% | 10/15 in reference run — many guests hide location |
| Review sample | listingUrl on review row | ~0% | Profile review cards rarely expose a listing link |
How options change these numbers:
- Fetch full portfolio OFF — large PMs often stop at ~10 listing rows →
extractionStatus: partial. - Fill bedrooms… OFF —
bedrooms/bedsmay stay empty on Beehive-only cards; no listing geo. - Pull business contact OFF —
companyEmail/companyPhonestay empty (no extra fetch). - Fetch all profile reviews ON — review row count scales to full history (e.g. 7,520 guest reviews for Lodgewell); fill rates for
reviewerLocationstay similar, sample bias drops.
Local output-hosts.csv now includes cities and countries (semicolon-separated). For array fields in the Apify dataset JSON, use the Host overview view.
How it works
- Parse input — normalize host profile URLs or numeric IDs.
- Load each profile — one HTTP request per host; extract host qualification fields and embedded listing cards + review samples from public profile HTML.
- Expand portfolio (optional, default ON) — when the profile preview shows fewer listings than reported, keep loading until the full list is returned.
- Enrich listing details (optional, default ON) — for each listing missing rooms or geo, open the public listing page once and fill bedrooms, bathrooms, beds, city, region, and country.
- Business contact (optional) — one listing page per host on the EU disclosure domain for legal email and phone.
- Reviews (optional) — save embedded samples (~5 per tab) or paginate all guest/host profile reviews when enabled.
- Export — host summary row, listing rows, review rows to the Apify dataset (and local CSV when running offline).
All steps are HTTP-only — no browser, no Airbnb login.
Performance and cost
Reference timings on a 36-listing US PM (Lodgewell, May 2026, local run, 1024 MB class):
| Scenario | Hosts | Listing rows | Review rows | Wall time | Notes |
|---|---|---|---|---|---|
| Default sample | 2 | 39 | 15 (embedded) | ~14–16 s | Full portfolio + listing details + review sample |
| Lodgewell scale | 1 | 36 | 43 (30 guest + 13 host, capped) | ~16 s | includeFullReviews ON, maxReviewsPerSource: 30 — measured May 2026 |
| Full guest history | 1 | 36 | 7,520+ guest | 10–30+ min | Not recommended without maxReviewsPerSource; use review sample for qualification |
Compute: defaultRunOptions.memoryMbytes: 1024 in actor.json — sufficient for parallel host batches (≤10) and listing detail enrichment (≤10 concurrent listing fetches).
Airbnb Actors suite (Outreacher / corent1robert)
Five Actors cover the STR outbound stack — from city discovery to full listing and review export. All built by corent1robert on Apify.
| Step | Actor | Apify link | Best for |
|---|---|---|---|
| 1 — Discover hosts | Airbnb Pro Host Business Email Scraper | Store → | City search, pro host contacts (email, phone, company, RCS/SIRET), hostProfileUrl in export |
| 2 — Size portfolios | Airbnb Host Portfolio Scraper (this Actor) | Console → · Store → | Paste profile URLs → listing count, geo, room counts, review sample, optional business contact |
| 3 — Full listing rows | Airbnb Property Details Scraper | Store → | 30+ fields per listing: amenities, GPS, photos, pricing context, host card |
| 4 — Atypical / niche stays | Airbnb Atypical Stays Scraper | Store → | Castles, treehouses, boats… city + category filters, same depth as Property Details |
| 5 — All guest reviews | Airbnb Reviews Scraper | Store → | Every review on a listing URL — rating, comment, date, host reply |
Recommended pipeline
- Discover — run Pro Host Scraper on a city; export
hostProfileUrl. - Qualify — run this Actor on those URLs; sort by
listingCountReported,cities,isProHost. - Contact — enable Pull business contact here, or use emails already from Pro Host.
- Deep-dive — pass
listingUrlvalues to Property Details or Reviews.
Reviews on this Actor vs Reviews Scraper: default run saves a profile review sample (~5 guest). Enable Fetch all profile reviews in Console for the full host history. For every review on one listing, use Airbnb Reviews Scraper.
Also from the same developer
| Actor | Link |
|---|---|
| Booking Pro Host Scraper | apify.com/corent1robert/booking-pro-host-scraper |
Quick Start
- Open the Actor in Apify Console.
- Paste one or more host profile URLs (
https://www.airbnb.com/users/show/{id}). - Click Start — paste URLs, optionally enable Fetch all profile reviews or Pull business contact. Everything else runs with smart defaults.
- Open Host overview, Listings, or Reviews dataset views.
Input
Console (Apify UI)
| Field | Default | Description |
|---|---|---|
hostProfileUrls | 1 sample URL | Bulk list of profile URLs |
includeFullReviews | false | Paginate all profile reviews (guest tab + host tab). Off = ~5 guest review sample |
maxReviewsPerSource | 0 | Cap per tab when full reviews ON (0 = no cap) |
includeContactEnrichment | false | Business email and phone on the host row (no extra result row) |
Included automatically (no toggle in Console)
| Field | Default | What it does |
|---|---|---|
includeListingRows | true | One dataset row per listing |
includeFullPortfolio | true | Full portfolio when profile preview is incomplete |
includeListingRoomStats | true | Bedrooms, bathrooms, beds, city, region, country |
includeReviewRows | true | Review rows ON — sample or full depending on includeFullReviews |
maxConcurrency | 5 | Parallel host fetches |
maxHosts | 0 | No host cap |
verboseLogs | false | Clean run logs |
API-only fields (JSON / API runs)
Pass these in input JSON when you need to override defaults — they are not shown in the Console form.
| Field | Default | Description |
|---|---|---|
hostIds | — | Numeric host IDs (built into profile URLs) |
includeListingRows | true | Turn OFF for host-summary-only export |
includeFullPortfolio | true | Turn OFF for ~10-card HTML preview only |
includeListingRoomStats | true | Turn OFF to skip per-listing page fetches |
includeReviewRows | true | Turn OFF to skip all review rows |
maxListingsPerHost | 0 | Cap listing rows per host (0 = no cap) |
maxConcurrency | 5 | Parallel hosts (1–10) |
maxHosts | 0 | Cap hosts processed (0 = no cap) |
disclosureDomain | airbnb.fr | TLD for legal contact block (EU disclosure) |
verboseLogs | false | Debug lines in run log |
Example JSON — Console-equivalent (full profile reviews, capped)
{"hostProfileUrls": ["https://www.airbnb.com/users/show/15782486"],"includeFullReviews": true,"maxReviewsPerSource": 30}
Example JSON — full outbound (API)
{"hostProfileUrls": ["https://www.airbnb.com/users/show/15782486"],"includeContactEnrichment": true,"includeFullReviews": true,"maxReviewsPerSource": 30}
Output sample
Host summary row:
{"recordType": "host","hostId": "15782486","hostName": "Lodgewell","listingCount": 36,"listingCountReported": 36,"averageRating": 4.8,"totalReviews": 7520,"isProHost": true,"isSuperhost": true,"cities": ["Austin", "Marble Falls", "West Lake Hills"],"countries": ["United States"],"extractionStatus": "success"}
Listing row (with detail enrichment):
{"recordType": "listing","hostName": "Lodgewell","listingId": "24038356","title": "The Shorewood | Dog-Friendly Lake Retreat","city": "Marble Falls","region": "Texas","country": "United States","bedrooms": 4,"bathrooms": 3,"beds": 8,"rating": 4.66,"reviewCount": 83}
Review row (reviewer location ≠ listing location):
{"recordType": "review","reviewSource": "guest","rating": 5,"reviewerName": "Carmen","reviewerLocation": "Austin, TX","reviewerCity": "Austin","reviewerRegion": "TX","comment": "This place is absolutely beautiful..."}
Limitations
- Very large portfolios: hosts with thousands of listings take longer when the full portfolio and listing detail enrichment are both ON — use
maxListingsPerHostto cap exported rows. - Listing location: city / region / country come from public listing page metadata, not the profile card. A small share of titles may parse imperfectly; verify critical rows against
listingUrl. - Review sample vs full export: default run saves ~5 guest reviews embedded on the profile. Enable Fetch all profile reviews in Console for paginated history (use Max reviews per tab to cap cost on large hosts).
- Public profiles only: private or restricted hosts may fail with
extractionStatus: failed. - Contacts are optional: enable Pull business contact for legal email and phone from one listing per host. Hard cases (browser modal) still belong in Airbnb Pro Host Scraper.
Pricing (pay-per-result)
Each row saved to the dataset is one result (apify-default-dataset-item). On the Store, results are billed at about $0.007 each (Bronze tier ~$0.00699).
| Row type | recordType | When saved |
|---|---|---|
| Host summary | host | One per profile URL (includes contact fields when that option is ON — no extra row) |
| Listing | listing | One per listing when listing rows are ON (default) |
| Review | review | One per review when review export is ON (default: sample) |
Reviews on this Actor vs Reviews Scraper
| This Actor — profile reviews | Airbnb Reviews Scraper | |
|---|---|---|
| Input | Host profile URL | Listing URL |
| Default | ~5 guest review sample | All listing reviews |
| Full mode | Enable Fetch all profile reviews in Console | Always full export |
| Best for | Host reputation before outreach | Deep dive on one property |
Examples (at $0.007/result):
- Qualify only — 20 hosts, listing rows OFF, reviews OFF → 20 results ≈ $0.14
- Standard run — 1 host, 36 listings, 5 review sample rows → 42 results ≈ $0.29
- Full profile reviews (capped) — 1 host, 36 listings, 30 guest + 13 host reviews → 80 results ≈ $0.56
- Outbound — 20 hosts + contacts ON, listing rows OFF → 20 results ≈ $0.14 (contact on host row)
Configure Pay per event in Console with a single priced event: apify-default-dataset-item. No custom event names in code — no unknown-event warnings.
Actor ID (dev): ylqefCXcCvaEHdatW · Full Airbnb suite
Local development
cd airbnb-host-portfolio-scrapernpm installcp input.json storage/key_value_stores/default/INPUT.jsonnpm start
After a local run, open:
output-hosts.csv— one row per host (counts, ratings, flags, cities/countries)output-listings.csv— one row per listing (whenincludeListingRowsis ON)output-reviews.csv— one row per review (whenincludeReviewRowsis ON)
All CSVs are UTF-8 with BOM for Excel. On Apify Cloud, use the Host overview, Listings, and Reviews dataset views instead.
Local input: apify run validates storage/key_value_stores/default/INPUT.json against the Console schema. Keep that file complete, or pass --input-file=./input.json. Simulated KV input overwrites overlapping keys from repo-root input.json.
Run tests:
npm test# Scale smoke — Lodgewell only, 30 reviews per tab (timed run for perf docs)npm run start:scale-lodgewell
Support
Questions or custom workflows: corentin@outreacher.fr