Airbnb Host Portfolio · Listings by Profile
Pricing
from $5.49 / 1,000 results
Airbnb Host Portfolio · Listings by Profile
Paste Airbnb host profile URLs and map each host's portfolio — listing count, ratings, listing rows, and optional full profile reviews. 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
10
Total users
3
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.
Start from Pro Host. Export hostProfileUrl with Airbnb Pro Host Scraper, then paste those URLs here to map each host’s portfolio.
Also available
The Store does not cross-sell this suite. Pick the Actor that matches the job:
| Actor | Use when |
|---|---|
| Airbnb Pro Host | Business emails and phones by city |
| Airbnb Property Details | Amenities, GPS, photos, completeness |
| Airbnb Calendar | Occupancy and day-by-day availability |
| Airbnb Price Monitor | Nightly rates across a market |
| This Actor — Host Portfolio | Map a host’s listings from profile URLs |
| Airbnb Experiences | Experience hosts, emails when enriched |
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.
Ready-made examples (published tasks)
| Example | Best for |
|---|---|
| Map one Airbnb host portfolio | Qualify a single host before outreach |
| Bulk host portfolios from Pro Host export | Paste many hostProfileUrl rows |
| Host portfolio with business contact | Portfolio + email/phone on the host row |
| Host reputation — full profile reviews | Review history on the host profile |
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
Is it legal to scrape Airbnb host profiles?
This Actor only reads public host profile and listing pages. No login. Host names, bios, and reviews can be personal data — use exports in line with GDPR and Airbnb's terms.
Support
Questions or custom workflows: corentin@outreacher.fr