Airbnb Scraper: Occupancy Rate, Prices & Market Data avatar

Airbnb Scraper: Occupancy Rate, Prices & Market Data

Deprecated

Pricing

Pay per usage

Go to Apify Store
Airbnb Scraper: Occupancy Rate, Prices & Market Data

Airbnb Scraper: Occupancy Rate, Prices & Market Data

Deprecated

Scrape every Airbnb listing in a city or map area (no ~270-result cap) with the price for your dates and an occupancy rate estimate for the next 30/60/90 days from each calendar, plus a market summary. Pay-per-result AirDNA alternative. No personal data.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Miguel Jardim

Miguel Jardim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 days ago

Last modified

Categories

Share

Scrape every Airbnb listing in a city or map area, with the price for your dates and an Airbnb occupancy rate estimate for the next 30, 60 and 90 days read from each listing's public calendar, plus a ready-made short-term rental market summary (median nightly price, median occupancy, rating, property mix).

Built for short-term-rental investors, Airbnb hosts, property managers and analysts who want AirDNA-style market data for a specific area without a monthly subscription: you pay only for the listings you get.

Why this Actor

  • Full coverage, not the first 270 results. Airbnb stops returning results after ~15 pages per search. This Actor splits the map into smaller tiles until each tile fits under that cap, so a whole city is covered. Duplicates are removed.
  • Occupancy from the public calendar. For each listing it reads the public availability calendar and reports unavailable nights and an occupancy estimate for the next 30/60/90 days.
  • A market summary in one place. The run writes a SUMMARY record to the key-value store: listing count, median nightly price, median occupancy (30 and 90 days), median rating and reviews, share of "Guest favourite" listings and the property-type mix.
  • No personal data. Output contains listing data only (no host names, profiles or contact details).

Input

FieldWhat it does
locationCity or area, e.g. Lisbon, Portugal. The area's boundaries are looked up on OpenStreetMap.
checkIn / checkOutDates for pricing (default: 30 days from today, 3 nights).
adultsGuests (default 2).
currencyPrice currency (default EUR).
maxListingsStop after this many listings (default 500).
includeOccupancyRead each listing's calendar for occupancy (default on).
minPrice / maxPrice, roomTypesOptional Airbnb filters.
neLat, neLng, swLat, swLngOptional custom map area instead of location.

Output (one row per listing)

listingId, url, name, propertyType, area, latitude, longitude, bedrooms, beds, baths, isStudio, rating, reviewsCount, isNew, isGuestFavorite, hostCategory (e.g. "Individual host"), checkin, checkout, nights, adults, currency, totalPrice (whole stay incl. fees and taxes), nightlyPrice (total ÷ nights, i.e. what a guest really pays per night), listedNightlyRate (the host's nightly rate before discounts, fees and taxes, when shown), freeCancellation, photoUrl, and with occupancy on: unavailableNights30/60/90, occupancyEstimate30/60/90, minNights.

Example row:

{
"listingId": "19926030",
"propertyType": "Apartment",
"area": "Santa Maria Maior",
"bedrooms": 1, "beds": 1, "baths": 1,
"rating": 4.54, "reviewsCount": 109,
"nightlyPrice": 82.33, "totalPrice": 247, "currency": "EUR",
"occupancyEstimate30": 0.767, "occupancyEstimate90": 0.3, "minNights": 2
}

How to read the occupancy numbers

  • They are forward-looking ("on the books" today): the share of the next N nights that are not available. Far-away windows are naturally lower because fewer nights are booked yet.
  • The public calendar does not distinguish booked nights from nights blocked by the host, so the estimate is an upper bound on real occupancy.
  • Listings with incomplete calendar data get null rather than a guess.

Tips

  • To get a representative market picture, set maxListings high enough to cover the whole area. With a low cap the Actor returns the first tiles it visits, not a random sample.
  • Prices depend on the dates and number of guests you choose; run the same area for different dates to see seasonality.

Pricing

Pay per event: $1.00 per 1,000 listings saved, plus $1.50 per 1,000 listings whose occupancy was computed (lower on paid Apify plans). For example, 1,000 listings with occupancy cost $2.50. You never pay for listings you don't receive, and you can cap spending per run in Apify Console.

FAQ

How is the Airbnb occupancy rate estimated? For each listing, the Actor reads the public availability calendar and counts the nights in the next 30, 60 and 90 days that can't be booked. occupancyEstimate30 is that count divided by 30 (same for 60 and 90).

Is it an AirDNA alternative? It covers the core of what people use AirDNA-style tools for in a given area: which listings exist, what they charge for your dates and how booked their calendars are. It does not estimate past revenue, ADR or RevPAR. In exchange there's no subscription, you choose the exact area, and you get the raw per-listing data to analyse yourself.

How many listings can I get? Airbnb shows at most ~270 results per search. This Actor splits the map into smaller tiles, so you can get every listing in a city (a 1,500-listing Lisbon run with occupancy took about 13 minutes). Set maxListings to how many you need.

Can I use it for any city? Yes. Type a city, region or neighbourhood in location (e.g. Madrid, Spain, Austin, Texas), or pass a custom map area with neLat/neLng/swLat/swLng.

Can I run it on a schedule? Yes. Save your input as a task and add a schedule in Apify Console to track prices and occupancy over time, or call it through the Apify API.

Notes

This Actor collects publicly visible listing information. You are responsible for using the data in line with applicable laws and Airbnb's terms. Built by Miguel Jardim with the help of AI tools (Claude); every release is tested against live data before publishing.