Airbnb Listings Scraper — Prices, Ratings & Changes
Pricing
from $1.60 / 1,000 listings
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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
| Field | What it is |
|---|---|
location, resolvedLocation | the place you typed, and the place Airbnb actually searched (for example Lisbon, Portugal) |
rank | position in Airbnb's results for this search (1 = first) |
listingId, url, title | the listing, its airbnb.com/rooms/… link, and the title its host gave it |
roomType, area | Apartment, Room, Hotel, Cottage…; and the neighbourhood label Airbnb prints under it |
pricePerNight, priceTotal, currency, nights | the 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 |
originalPrice | the crossed-out price, when the listing is discounted |
priceMonthly | only 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, adults | the stay the price is for |
rating, reviewCount | Airbnb's average rating and number of reviews (null for listings marked New) |
bedrooms, beds, bathrooms | as printed on the search card |
guestFavourite, superhost, badges, freeCancellation | the badges and the free-cancellation note on the card. superhost is a badge only; no host is identified |
lat, lng | the approximate coordinates Airbnb shows |
thumbnailUrl | first photo, 720 px wide |
isNewSinceLastRun, previousRank, rankChange, previousPricePerNight, priceChange, priceChangePercent, previousRunAt | the 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 |
firstSeenAt | the 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), andpriceChangeis 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
isNewSinceLastRunandrankChangeare noisy there;priceChangeis not, andfirstSeenAttells 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/reviewCountfor listings marked New;bedrooms,bedsandbathroomsonly 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;originalPriceunless the listing is discounted;priceMonthlyunless the stay is 28 nights or more;priceTotalonly for stays under 28 nights. The change fields (isNewSinceLastRun,previousRank,rankChange,previousPricePerNight,priceChange,priceChangePercent,previousRunAt) arenullon the first run of a search. areais the label Airbnb prints and hosts fill in, so it can be off (a Lisbon flat labelled with another city happens).resolvedLocationis what Airbnb really searched; Airbnb sometimes widens a neighbourhood to its city (Brooklyn, NYis searched asNew 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.