Airbnb Scraper + STR Market KPIs (ADR · Occupancy · RevPAR)
Pricing
Pay per event
Airbnb Scraper + STR Market KPIs (ADR · Occupancy · RevPAR)
Airbnb scraper for short-term-rental investors. Search by destination, coordinates, place ID, category or URL. Returns listings with ADR, occupancy, RevPAR and estimated annual revenue, plus market KPIs, calendar enrichment and an HTML report.
Pricing
Pay per event
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
1
Bookmarked
24
Total users
12
Monthly active users
3 days ago
Last modified
Categories
Share
Airbnb Property Scraper - STR KPIs, Occupancy & RevPAR 🚀
🎉 The Airbnb analyzer built for investors — forward-looking calendar enrichment computes ADR, occupancy, RevPAR & annual revenue per listing
Built-in Airbnb profit calculator and income estimator for short-term rental investors, vacation-rental analysts, and Airbnb arbitrage operators
🔎 What is the Airbnb Scraper — and when should you use it?
The Airbnb Scraper turns short-stay rental listings from Airbnb into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: nightly rate, bedrooms, beds and baths, rating and review count, Superhost and Guest Favorite badges, photos and coordinates for every listing. Switch on the calendar enrichment and each row also carries ADR, occupancy rate, RevPAR, estimated annual revenue and the days until the next available night. The forward availability calendar behind those numbers is returned too.
Use something else when: you want a different short-stay platform, or long-term rents to compare against. Use Vrbo Scraper for Vrbo's inventory with the same ADR, occupancy and RevPAR fields. Use STR vs LTR Market Lens for short-stay and long-term rates side by side, normalised to a monthly figure. This actor returns short-stay rental inventory with nightly rates and booking calendars, not homes for sale.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/airbnb-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want Airbnb listings with short-term rental KPIs using the Apify Actor `sian.agency/airbnb-property-scraper`.Use it when I need: nightly rate, bedrooms, beds and baths, rating and review count, Superhost and Guest Favorite badges, photos and coordinates for every listing. Switch on the calendar enrichment and each row also carries ADR, occupancy rate, RevPAR, estimated annual revenue and the days until the next available night. The forward availability calendar behind those numbers is returned too.Don't use it when: you want a different short-stay platform, or long-term rents to compare against — use vrbo-property-scraper or str-investor-market-lens instead.How to call it: pick a `searchMode` — `destination` (free text such as "Lisbon, Portugal"), `coordinates` (a map-bounds box: `ne_lat`, `ne_lng`, `sw_lat`, `sw_lng`), `placeId`, `category` (`category_tag` like `Tag:4104`, PAID) or `url` (`airbnbUrl`). Optional `checkIn`/`checkOut` switch on date filtering and per-night prices; `computeOccupancy: true` adds one calendar call per listing and fills in occupancy, RevPAR and estimated annual revenue; `fetchHomeDetails` and `fetchReviews` add amenities, house rules and guest reviews.Start with this input:{"searchMode": "destination","destination": "Lisbon, Portugal","computeOccupancy": true,"availabilityWindowDays": 90,"maxResultsPerQuery": 40}Ask me which destination or map area, and whether to turn on the calendar enrichment for occupancy and RevPAR, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Estimate annual revenue for two-bedroom entire homes in Lisbon and rank the top 20.
- Compare occupancy and ADR across three neighbourhoods in the same city.
- Flag listings with a completely open calendar and fewer than three reviews.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/airbnb-property-scraper.md.
📋 Overview
Stop guessing what an Airbnb market is worth. This Airbnb scraper pulls clean listing data plus the short-term rental KPIs investors actually need — average daily rate (ADR), occupancy, RevPAR, and estimated annual revenue — across any city, map area, or category on Airbnb.
Why thousands of STR investors and analysts choose us:
- ✅ 5 search modes: destination text, map-bounds coordinates, place ID, Airbnb category tag, or paste-a-URL — cover every research workflow
- ⚡ 40 listings per page, auto-paginated: cursor-based pagination drains entire markets without manual clicking
- 🎯 Real STR KPIs: ADR, occupancy rate, RevPAR, estimated annual revenue, days-until-next-available — computed per listing from forward-looking calendar data
- 💰 Best price on Apify: pay-per-result, no monthly fee, FREE tier with 25 listings to test
- 💎 Beautiful HTML market report: shareable summary with KPI distributions, top performers, and stale-listing flags
- ✨ 35+ data fields per listing (40+ with
computeOccupancyenrichment): photos, bedrooms, baths, ratings, reviews, badges, lat/lng, price qualifiers, and more
✨ Features
- 🧭 Destination Search: free-text city or neighborhood ("Lisbon, Portugal", "Brooklyn, NY")
- 🗺 Map-Bounds Coordinates: NE + SW lat/lng box for precise geographic scans
- 🆔 Place ID Search: pinpoint a market by Google/Airbnb internal place ID
- 🎯 Category Browsing (PAID): scrape entire Airbnb categories like Beach, Cabin, Tiny Home
- 🔗 URL Mode: paste any Airbnb search URL directly from your browser
- 📅 Calendar Enrichment: per-listing forward availability → real occupancy & RevPAR
- 🏠 Full Home Details (PAID): description, amenities, house rules, and additional photos per listing
- 💬 Guest Reviews (PAID): real reviewer names, ratings, comments, and dates per listing
- 💹 STR KPI Engine: ADR, occupancy, RevPAR, estimated annual revenue, stale-listing detector
- 📊 HTML Market Report: visual summary with charts saved to key-value store
- 🌍 Multi-currency: 3-letter ISO currency support (USD, EUR, GBP, AUD, etc.)
- 🏘 Smart Filters: price range, bedrooms, beds, baths, Superhost, Guest Favorite, Luxe
🎬 Quick Start
Pick a search mode, drop in a destination (or coordinates, place ID, category, or URL), and run. Results land in your Apify dataset within minutes — listings plus computed STR KPIs and a shareable HTML report.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~airbnb-property-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchMode":"destination","destination":"Lisbon, Portugal","computeOccupancy":true}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose Your Search Mode
Pick destination, coordinates, placeId, category, or url. Each mode reads its own dedicated input fields.
Step 2: Configure Stay Context (Optional)
Add checkIn/checkOut for accurate per-night pricing, set guests/currency, apply filters (price range, bedrooms, Superhost, Guest Favorite, Luxe).
Step 3: Enable Occupancy KPIs (PAID, Recommended)
Turn on computeOccupancy to fetch each listing's calendar and compute ADR, occupancy, RevPAR, and estimated annual revenue. Perfect for underwriting.
That's it! In a few minutes, you'll have:
- Clean Airbnb listings with 35+ fields (40+ with calendar enrichment)
- Computed STR KPIs (ADR, occupancy, RevPAR, annual revenue)
- A beautiful HTML market report ready to share with stakeholders
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
| searchMode | string | Yes | destination, coordinates, placeId, category, or url |
| destination | string | Mode-specific | Free-text city (destination mode) |
| destinations | array | Optional (PAID) | Bulk destinations array |
| ne_lat / ne_lng / sw_lat / sw_lng | string | Mode-specific | Map-bounds box (coordinates mode) |
| placeId | string | Mode-specific | Google/Airbnb place ID |
| category_tag | string | Mode-specific (PAID) | Airbnb category tag (e.g. Tag:4104) |
| airbnbUrl | string | Mode-specific | Airbnb search URL |
| airbnbUrls | array | Optional (PAID) | Bulk URLs |
| checkIn / checkOut | string | Optional | ISO dates for date-filtered search & per-night pricing |
| adults / children / infants / pets | integer | Optional | Guest counts |
| currency | string | Optional | 3-letter ISO code (default USD) |
| typeOfPlace | string | Optional | Any_type, Room, or Entire_home |
| priceRangeMin / priceRangeMax | integer | Optional | Nightly price filter |
| bedrooms / beds / bathrooms | integer | Optional | Minimum room counts |
| superhost / guestFavorite / luxuryHomes | boolean | Optional | Quality filters |
| computeOccupancy | boolean | Optional (PAID) | Enable calendar enrichment & full STR KPIs |
| availabilityWindowDays | integer | Optional | 30 / 90 (default) / 180 / 365 |
| fetchHomeDetails | boolean | Optional (PAID) | Fetch full listing details (description, amenities, house rules, photos). Requires checkIn/checkOut |
| fetchReviews | boolean | Optional (PAID) | Fetch guest reviews per listing |
| reviewsLimit | integer | Optional | Max reviews per listing when fetchReviews is on (default 20, max 50) |
| maxResultsPerQuery | integer | Optional | Cap per query (default 40, FREE capped at 25) |
Example — Destination with full KPIs:
{"searchMode": "destination","destination": "Lisbon, Portugal","checkIn": "2026-07-15","checkOut": "2026-07-22","currency": "EUR","computeOccupancy": true,"availabilityWindowDays": 90,"maxResultsPerQuery": 100}
Example — Map-bounds coordinates:
{"searchMode": "coordinates","ne_lat": "44.029","ne_lng": "-79.317","sw_lat": "43.824","sw_lng": "-79.498","typeOfPlace": "Entire_home"}
Example — URL mode (bulk, PAID):
{"searchMode": "url","airbnbUrls": ["https://www.airbnb.com/s/Lisbon--Portugal/homes","https://www.airbnb.com/s/Porto--Portugal/homes"]}
📤 Output
Results are saved to the Apify dataset. Every listing returns 35+ base fields; turning on computeOccupancy adds the calendar-enrichment fields (marked below).
| Field | Type | Description |
|---|---|---|
| listingId | string | Numeric Airbnb listing ID |
| detailUrl | string | Direct URL to the listing page |
| listingTitle | string | Listing title |
| subtitle | string | Property name / headline |
| city | string | Localized city |
| latitude / longitude | number | Coordinates |
| totalPrice | number | Sample stay total |
| nightlyRateFromTotal | number | Nightly rate from sample |
| adr | number | Average daily rate (computed) |
| occupancyRate (enrichment) | number | Occupancy rate decimal (0.65 = 65%) |
| unavailableRate (enrichment) | number | Raw share of unavailable nights |
| revpar (enrichment) | number | Revenue per available night (ADR × occupancy) |
| estimatedAnnualRevenue (enrichment) | number | RevPAR × 365 |
| daysUntilNextAvailable (enrichment) | number | Forward-looking earliest open night |
| isStale (enrichment) | boolean | True if calendar fully open AND reviews < 3 |
| bedrooms / beds / baths | number | Property dimensions |
| rating / reviewCount | number | Social proof signals |
| badges | array | Superhost, Guest Favorite, Luxe |
| photos | array | All photo URLs |
| availability (enrichment) | object | Full per-day calendar |
| homeDetails (enrichment) | object | Full listing detail payload — description, amenities, house rules, policies |
| reviews (enrichment) | array | Guest reviews — reviewer name, rating, comment, date |
| kpiAssumptions (enrichment) | object | Documented heuristic baselines |
Fields marked (enrichment) are only populated when the corresponding input flag (
computeOccupancy,fetchHomeDetails,fetchReviews) is set. Without enrichment they're omitted from the record (saving you per-row cost when you don't need them).
A shareable HTML market report is saved to the run's key-value store with KPI distributions, top performers, and assumption disclosures.
Example listing record (with computeOccupancy: true — occupancy/revpar fields shown):
{"listingId": "12345678","detailUrl": "https://www.airbnb.com/rooms/12345678","listingTitle": "Apartment in Lisbon","city": "Lisbon","latitude": 38.7223,"longitude": -9.1393,"adr": 142.5,"occupancyRate": 0.74,"revpar": 105.45,"estimatedAnnualRevenue": 38489.25,"daysUntilNextAvailable": 3,"rating": 4.92,"reviewCount": 187,"bedrooms": 2,"beds": 3,"baths": 1,"isStale": false}
💼 Use Cases & Examples
1. STR Investment Underwriting
Real estate investors evaluating short-term rental purchases
Input: Destination + price range + bedroom filter + computeOccupancy: true
Output: ADR, occupancy, RevPAR, and projected annual revenue for every comparable listing
Use: Pro-forma underwriting, rent-vs-buy analysis, market comp pulls for lender packages
2. Rental Market Analysis by Metro or Map Area
Hospitality consultants and PE analysts mapping new markets
Input: Map-bounds coordinates covering a metro or resort area Output: Total active listings, ADR distribution, RevPAR by submarket Use: Market entry decisions, expansion strategy decks, demand forecasting
3. Competitor RevPAR Benchmarking
Existing Airbnb hosts and property managers tracking the competition
Input: URL mode with the host's local search URL + computeOccupancy: true
Output: Side-by-side ADR and occupancy for every neighbor
Use: Pricing strategy, dynamic-rate calibration, identifying underpriced or stale comps
4. Vacation Rental Investment & Arbitrage Sourcing
Rental arbitrage operators scouting cities for new units
Input: Destination + Entire-home filter + price range Output: Top-performing listings with revenue benchmarks and review velocity Use: Lease-up decisions, neighborhood ranking, ROI projections for landlords
5. Destination Revenue Forecasting
Tourism boards, DMOs, and academic researchers tracking STR supply
Input: Destination or place ID + 365-day availability window Output: Full-year occupancy curves, seasonality patterns, supply density Use: Policy briefs, tax-revenue projections, supply-vs-demand reports
6. Category-Level Trend Research (PAID)
Travel media, OTA strategists, and content brands
Input: Category mode with tags like Tag:4104 (Beach) or Tag:8186 (Cabin)
Output: Category-wide pricing and occupancy benchmarks
Use: Editorial features, trend reports, category-specific marketing
7. Stale-Listing & Inventory Quality Audits
Airbnb co-hosts and property management agencies
Input: Destination + computeOccupancy: true
Output: isStale flag plus full forward calendar per listing
Use: Identify abandoned listings, recovery outreach, inventory cleanup
🔗 Integration Examples
A clean real estate data API for your stack — call the actor from anywhere via the Apify REST API or one of the official client libraries.
JavaScript/Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/airbnb-property-scraper').call({searchMode: 'destination',destination: 'Lisbon, Portugal',computeOccupancy: true,availabilityWindowDays: 90,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/airbnb-property-scraper').call(run_input={'searchMode': 'coordinates','ne_lat': '44.029','ne_lng': '-79.317','sw_lat': '43.824','sw_lng': '-79.498','computeOccupancy': True,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~airbnb-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"searchMode":"url","airbnbUrl":"https://www.airbnb.com/s/Lisbon--Portugal/homes"}'
Automation Workflows (n8n / Zapier / Make)
- Trigger: Schedule a weekly market scan
- HTTP Request: Call the actor with your destination
- Process: Filter listings by ADR or occupancy thresholds
- Action: Push winners to Notion, Sheets, or Slack
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 listings per query — full data fields, same quality
- All 5 search modes available (except Category & bulk arrays)
- No credit card required
- Perfect for evaluating a market before investing
PAID Tier (Production Ready)
- Unlimited listings per query, up to 500 per run
- Bulk arrays for destinations and URLs
- Calendar enrichment unlocked — full ADR, occupancy, RevPAR, estimated annual revenue
- Category-mode browsing
- Pay-per-result: only charged for listings actually returned
Pricing events:
apify-actor-start— $0.005 per runListingExtracted— $0.005 per listingOccupancyEnriched— $0.003 per listing (only when calendar enrichment succeeds)
💰 Best price on the market — full STR underwriting data for under a cent per listing.
❓ Frequently Asked Questions
Q: Is there a free Airbnb profit calculator? A: Yes — the FREE tier doubles as a free Airbnb profit calculator: run any market, get ADR, occupancy, RevPAR, and estimated annual revenue per listing on the first 25 results. Upgrade to PAID for unlimited listings and full forward-looking calendar enrichment.
Q: How do I calculate Airbnb investment returns?
A: Enable computeOccupancy: true (PAID) and the actor returns ADR, occupancy rate, RevPAR, and estimated annual revenue per listing — the same inputs every Airbnb investment calculator uses, but populated from real forward-looking calendar data instead of city-level averages. Pull comps for any address radius or category and underwrite directly from the dataset.
Q: How many listings can I scrape? A: FREE tier: 25 per query. PAID tier: up to 500 per query, unlimited queries via bulk arrays.
Q: How accurate are the occupancy and RevPAR numbers?
A: Occupancy is a forward-looking heuristic derived from each listing's public calendar minus a 10% host-block baseline. It's a strong directional signal — full assumptions are documented in the kpiAssumptions field and HTML report.
Q: Do I need to provide check-in / check-out dates? A: Optional but recommended. Without dates, the search returns results without date filtering and per-night prices are unavailable. With dates, you get filtered results and accurate nightly pricing.
Q: What's the difference between ADR and nightlyRateFromTotal?
A: nightlyRateFromTotal comes from the search sample stay; adr is computed across the full availability window when calendar enrichment is enabled. ADR is more accurate for revenue projections.
Q: Can I filter by Superhost or Guest Favorite?
A: Yes — toggle superhost, guestFavorite, or luxuryHomes to restrict results.
Q: Can I get a listing's full description, amenities, and house rules?
A: Yes — enable fetchHomeDetails: true (PAID). It requires checkIn/checkOut to be set and returns the full listing detail payload alongside the search result.
Q: Can I get guest reviews for each listing?
A: Yes — enable fetchReviews: true (PAID). Each listing gets up to reviewsLimit reviews (default 20, max 50) with reviewer name, rating, comment, and date.
Q: What output formats are available? A: JSON, CSV, Excel, HTML, RSS — export directly from the Apify dataset. A pre-built HTML market report is also saved to the key-value store.
Q: How long does processing take? A: ~1 second per listing without enrichment, ~2 seconds with calendar enrichment. A 100-listing market scan with full KPIs takes about 3 minutes.
Q: Is this legal? A: Yes — only publicly available Airbnb listing data is extracted. See the legal section below.
🐛 Troubleshooting
No results returned for a destination
- Verify the destination string matches Airbnb's autocomplete (e.g. "Lisbon, Portugal" not "lisbon portugal")
- Try URL mode instead with the exact search URL from airbnb.com
Coordinates mode returns empty
- Confirm
sw_lat < ne_latandsw_lng < ne_lng(southwest corner is the smaller box corner) - Lat must be -90..90, lng must be -180..180
Occupancy rate seems low
- The 10% host-block baseline is documented in
kpiAssumptions. For raw availability, useunavailableRate - A wider
availabilityWindowDays(180 or 365) smooths short-term anomalies
Per-night prices are missing
- Pass
checkInandcheckOut— without them, Airbnb returns sample-stay totals only
FREE tier hit the 25-listing cap
- Upgrade to PAID for full market depth and calendar enrichment
⚠️ Trademark Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Airbnb, Inc. or any of its subsidiaries. The name "Airbnb" is used solely in a descriptive sense to identify the public data source the Actor reads from. All trademarks, service marks, and trade names referenced in this Actor or its documentation are the property of their respective owners.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
🤝 Support
Join our active support community
- For issues or questions, open an issue in the actor's repository
- Check SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Built by SIÁN Agency | More Tools