Airbnb Scraper + STR Market KPIs (ADR ยท Occupancy ยท RevPAR)
Pricing
Pay per event
Airbnb Scraper + STR Market KPIs (ADR ยท Occupancy ยท RevPAR)
๐ Airbnb scraper for STR investors โ listings + ADR + occupancy + RevPAR + estimated annual revenue. Market KPIs, HTML report, calendar enrichment. Search by destination, coordinates, place ID, category, or URL. Independent tool โ not affiliated with Airbnb, Inc.
Pricing
Pay per event
Rating
0.0
(0)
Developer
SIรN Oร
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 hours 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
๐ 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
- ๐น 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 |
| 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 |
| kpiAssumptions (enrichment) | object | Documented heuristic baselines |
Fields marked (enrichment) are only populated when
computeOccupancy: trueis set on the input. 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.
๐ View current pricing
โ 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: 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
- ๐ง hello@sian-agency.online
Built by SIรN Agency | More Tools