Airbnb Scraper + STR Market KPIs (ADR ยท Occupancy ยท RevPAR) avatar

Airbnb Scraper + STR Market KPIs (ADR ยท Occupancy ยท RevPAR)

Pricing

Pay per event

Go to Apify Store
Airbnb Scraper + STR Market KPIs (ADR ยท Occupancy ยท RevPAR)

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รœ

SIรN Oรœ

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Airbnb Property Scraper - STR KPIs, Occupancy & RevPAR ๐Ÿš€

SIรN Agency Store Airbnb Property Scraper

๐ŸŽ‰ 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 computeOccupancy enrichment): 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).

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

FieldTypeRequiredDescription
searchModestringYesdestination, coordinates, placeId, category, or url
destinationstringMode-specificFree-text city (destination mode)
destinationsarrayOptional (PAID)Bulk destinations array
ne_lat / ne_lng / sw_lat / sw_lngstringMode-specificMap-bounds box (coordinates mode)
placeIdstringMode-specificGoogle/Airbnb place ID
category_tagstringMode-specific (PAID)Airbnb category tag (e.g. Tag:4104)
airbnbUrlstringMode-specificAirbnb search URL
airbnbUrlsarrayOptional (PAID)Bulk URLs
checkIn / checkOutstringOptionalISO dates for date-filtered search & per-night pricing
adults / children / infants / petsintegerOptionalGuest counts
currencystringOptional3-letter ISO code (default USD)
typeOfPlacestringOptionalAny_type, Room, or Entire_home
priceRangeMin / priceRangeMaxintegerOptionalNightly price filter
bedrooms / beds / bathroomsintegerOptionalMinimum room counts
superhost / guestFavorite / luxuryHomesbooleanOptionalQuality filters
computeOccupancybooleanOptional (PAID)Enable calendar enrichment & full STR KPIs
availabilityWindowDaysintegerOptional30 / 90 (default) / 180 / 365
maxResultsPerQueryintegerOptionalCap 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).

FieldTypeDescription
listingIdstringNumeric Airbnb listing ID
detailUrlstringDirect URL to the listing page
listingTitlestringListing title
subtitlestringProperty name / headline
citystringLocalized city
latitude / longitudenumberCoordinates
totalPricenumberSample stay total
nightlyRateFromTotalnumberNightly rate from sample
adrnumberAverage daily rate (computed)
occupancyRate (enrichment)numberOccupancy rate decimal (0.65 = 65%)
unavailableRate (enrichment)numberRaw share of unavailable nights
revpar (enrichment)numberRevenue per available night (ADR ร— occupancy)
estimatedAnnualRevenue (enrichment)numberRevPAR ร— 365
daysUntilNextAvailable (enrichment)numberForward-looking earliest open night
isStale (enrichment)booleanTrue if calendar fully open AND reviews < 3
bedrooms / beds / bathsnumberProperty dimensions
rating / reviewCountnumberSocial proof signals
badgesarraySuperhost, Guest Favorite, Luxe
photosarrayAll photo URLs
availability (enrichment)objectFull per-day calendar
kpiAssumptions (enrichment)objectDocumented heuristic baselines

Fields marked (enrichment) are only populated when computeOccupancy: true is 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 ApifyClient
client = 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)

  1. Trigger: Schedule a weekly market scan
  2. HTTP Request: Call the actor with your destination
  3. Process: Filter listings by ADR or occupancy thresholds
  4. 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
  • 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 run
  • ListingExtracted โ€” $0.005 per listing
  • OccupancyEnriched โ€” $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_lat and sw_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, use unavailableRate
  • A wider availabilityWindowDays (180 or 365) smooths short-term anomalies

Per-night prices are missing

  • Pass checkIn and checkOut โ€” 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.


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

Telegram Support

Join our active support community


Built by SIรN Agency | More Tools