Airbnb Listings Scraper — Prices, Ratings & Changes avatar

Airbnb Listings Scraper — Prices, Ratings & Changes

Pricing

from $1.60 / 1,000 listings

Go to Apify Store
Airbnb Listings Scraper — Prices, Ratings & Changes

Airbnb Listings Scraper — Prices, Ratings & Changes

Airbnb search results for any place: price per night and total for your dates, rating, reviews, bedrooms, beds, baths, Guest favourite and Superhost badges, coordinates and photo. Run it again or on a schedule to get new listings, price changes and rank moves since the last run. No login.

Pricing

from $1.60 / 1,000 listings

Rating

0.0

(0)

Developer

Northbell

Northbell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Give it a place — Lisbon, Portugal, Kyoto, Japan — and optionally your check-in and check-out dates, and get one clean row per Airbnb listing: price per night and total for your dates, rating and review count, bedrooms, beds, baths, Guest favourite and Superhost badges, coordinates and a photo. $2 per 1,000 listings, no login, no API key.

Run it again — or put it on a daily schedule — and every row also tells you what changed since the last run: which listings are new, the price change per night, and how far each listing moved up or down the results. Airbnb only shows you today's price; this keeps yesterday's.

What you get

FieldWhat it is
location, resolvedLocationthe place you typed, and the place Airbnb actually searched (for example Lisbon, Portugal)
rankposition in Airbnb's results for this search (1 = first)
listingId, url, titlethe listing, its airbnb.com/rooms/… link, and the title its host gave it
roomType, areaApartment, Room, Hotel, Cottage…; and the neighbourhood label Airbnb prints under it
pricePerNight, priceTotal, currency, nightsthe price for the stay as Airbnb shows it, fees included. Exact to the cent where Airbnb's price breakdown allows (the page itself rounds up to whole units). pricePerNight is priceTotal ÷ nights
originalPricethe crossed-out price, when the listing is discounted
priceMonthlyonly for stays of 28 nights or more: Airbnb shows a monthly price instead of a total. priceTotal is then null and pricePerNight is the monthly price ÷ 30
checkIn, checkOut, adultsthe stay the price is for
rating, reviewCountAirbnb's average rating and number of reviews (null for listings marked New)
bedrooms, beds, bathroomsas printed on the search card
guestFavourite, superhost, badges, freeCancellationthe badges and the free-cancellation note on the card. superhost is a badge only; no host is identified
lat, lngthe approximate coordinates Airbnb shows
thumbnailUrlfirst photo, 720 px wide
isNewSinceLastRun, previousRank, rankChange, previousPricePerNight, priceChange, priceChangePercent, previousRunAtthe change since your previous run of the same search (null on the first run). rankChange is positive when the listing moved up; priceChange is positive when it got more expensive
firstSeenAtthe first time any run of this search saw the listing

Use it for

  • Pricing your own place — see what comparable listings charge for your dates, and when they cut prices
  • Market scans — compare price, rating and size across neighbourhoods or cities, then export to Sheets or your BI tool
  • Deal watching — schedule a search for your trip dates and look at priceChange
  • Competitor tracking for hosts and property managers — see new listings and who is moving up the results

Input

{
"locations": ["Lisbon, Portugal", "Porto, Portugal"],
"checkIn": "2026-11-10",
"checkOut": "2026-11-13",
"adults": 2,
"currency": "EUR",
"maxListingsPerLocation": 100,
"maxPrice": 200
}

You can also paste an airbnb.com/s/… search link as a location; the place is taken from it. minPrice / maxPrice are per night, in the chosen currency, and are applied by Airbnb on its own nightly price, so pricePerNight (which includes fees) can land a little outside the range. 41 currencies are supported (see the input form).

The previous run is remembered per search (place + dates + guests + currency + price range) in a named key-value store in your Apify account, so the second run of the same search already shows changes. Schedule it (Apify → Schedules) for a daily history.

Pricing

$2.00 per 1,000 listings, plus $0.01 per run. Error rows (a place Airbnb does not recognise, no results, a blocked page) are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

Notes

  • Public data only: what anyone sees on an Airbnb search page without signing in. No host names, host IDs, host photos or reviewer names are returned.
  • Give dates when you want to compare prices. With check-in and check-out every listing is priced for the same stay. Without dates Airbnb picks a different 5-night window for each listing (shown in checkIn / checkOut), and priceChange is only given when a listing shows the same window as last time. Dates must be today or later.
  • Airbnb returns at most about 270 results per search (15 pages of 18), and a few repeat between pages, so one search gives up to roughly 200–250 different listings. For a big city, search a neighbourhood (Alfama, Lisbon) or add a price range to split it up. Asking for more than Airbnb has left just ends the list.
  • Airbnb's ranking moves between requests. In a big city about a third of a 200-listing list is different even minutes later, so isNewSinceLastRun and rankChange are noisy there; priceChange is not, and firstSeenAt tells a listing that is new to your history from one that came back. Small markets and narrowed searches are steadier. Keep Max listings per place the same between runs.
  • Some fields are empty by design: rating / reviewCount for listings marked New; bedrooms, beds and bathrooms only when the search card prints them (hotels print none; rooms, studios and many apartments print beds but no bedrooms; some cards print no baths) — they are never guessed; originalPrice unless the listing is discounted; priceMonthly unless the stay is 28 nights or more; priceTotal only for stays under 28 nights. The change fields (isNewSinceLastRun, previousRank, rankChange, previousPricePerNight, priceChange, priceChangePercent, previousRunAt) are null on the first run of a search.
  • area is the label Airbnb prints and hosts fill in, so it can be off (a Lisbon flat labelled with another city happens). resolvedLocation is what Airbnb really searched; Airbnb sometimes widens a neighbourhood to its city (Brooklyn, NY is searched as New York City, NY), so check it.
  • Airbnb does not recognise some names, especially non-English ones such as 東京; it then shows unrelated listings from all over the world. The Actor returns an error row instead of keeping them. Use the English name with the country (Tokyo, Japan).
  • The price is the one on the search card. Airbnb's checkout can still differ (for example taxes).
  • If Airbnb shows a bot check, the row is an error row and nothing is stored for that search, so your history is kept. If a later page fails halfway, the rows already read are kept, a free error row says where it stopped, and the saved history is left as it was, so the next run does not call everything new. A run that could read nothing at all fails.
  • Places that cannot be read at all (for example a link that is not an airbnb.com/s/… search) are refused before the run starts, which costs nothing.

For AI agents

{"locations": ["Lisbon, Portugal"], "checkIn": "2026-11-10", "checkOut": "2026-11-13", "maxListingsPerLocation": 20} returns up to 20 rows with price per night and total for those dates, rating, beds and the changes since the last run. Rows have type: listing or error.

**Something broke or looks wrong?** Open an issue on this Actor's Issues tab and I'll look at it. **Found it useful?** A short review on the Store page helps other people find it.