Airbnb Scraper
Pricing
Pay per event
Airbnb Scraper
Pricing
Pay per event
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
An Airbnb scraper that returns listings for a location and a date window, with the nightly rate and the stay total as separate numbers, plus coordinates, rating, review count and badges. No login, no cookie, no API key.
It reads the search payload Airbnb already ships inside its own page, so every row comes from the same data the site uses to render the card.
What you get
- Nightly rate and stay total as separate fields. Airbnb displays a total for the whole stay, which is not comparable between listings with different minimum-night rules.
price_nightlyis parsed out of Airbnb's own price breakdown, not divided out by hand - Coordinates on every row, so results drop straight into a map or a distance calculation
- Rating and review count split into numbers rather than left as "4.97 (315)"
- Currency you choose, by naming the country the search runs from. Airbnb quotes in the currency of the visitor's country, so an unpinned scrape returns whatever currency the proxy landed in
- Exact pagination. Airbnb publishes a cursor list saying how many pages exist, so the walk stops at the real end instead of hammering until something breaks
- Badges such as Guest favourite, and the full image set per card
- The dates the price actually applies to on every row, so a stored result is still interpretable months later
- No actor-start fee. A run that returns nothing costs nothing
Why scrape Airbnb
Short-let pricing is the most volatile retail price there is. It moves with the season, the day of the week, a football fixture and a conference, and none of that is visible from a single snapshot. For a host setting a rate, a property manager benchmarking a portfolio, or an analyst measuring what short-lets do to a city's housing, the useful thing is the same query repeated with the same dates.
Airbnb has no public listings API. What it does have is a server-rendered search page carrying its entire result set as JSON, which is what this actor reads. That is more stable than driving a browser and far cheaper, and it is why a run over a city takes seconds rather than minutes.
The detail that decides whether the data is usable is dates. Airbnb prices a stay, not a night, so a scrape without an explicit window returns totals for windows the site picked, of differing lengths, in a currency decided by wherever the request came from. The rows look fine and the numbers cannot be compared to each other. This actor makes the window explicit, reports it back on every row, and pins the currency.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
location | string | yes | Amsterdam, Netherlands | Where to search, as you would type it on Airbnb |
checkin | string | no | 30 days out | Check-in date, YYYY-MM-DD |
checkout | string | no | 5 nights later | Check-out date, YYYY-MM-DD |
adults | integer | no | 1 | Guest count, which changes eligibility and price |
children | integer | no | 0 | Children in the party |
room_type | select | no | any | entire_home, private_room, shared_room, hotel_room |
price_min / price_max | integer | no | – | Airbnb's own price filter bounds |
proxy_country | string | no | nl | Two-letter code for the country the search runs from, which decides the currency |
limit | integer | no | 36 | Listings to return, 1 to 270 |
retries | integer | no | 4 | Retry attempts per page, each with a rotated user agent and TLS fingerprint |
Output
{"position": 1,"listing_id": "1070144720855983147","url": "https://www.airbnb.com/rooms/1070144720855983147","title": "Guesthouse in Almere-Stad","name": "Nice studio close to Amsterdam","subtitle": "Cozy houseboat with parking in the center of Amsterdam","rating": 4.71,"reviews_count": 77,"latitude": 52.3686,"longitude": 5.2142,"price_total": 435.0,"price_nightly": 87.0,"price_nightly_display": "€87.00","nights": 5,"price_display": "€435","price_qualifier": "total","currency": "€","badges": ["Guest favourite"],"image": "https://a0.muscache.com/im/pictures/miso/...","checkin": "2026-09-30","checkout": "2026-10-05","adults": 1,"search_location": "Amsterdam, Netherlands"}
Use cases
Setting a nightly rate as a host. Run your own city with your own dates and guest count, sort by price_nightly, and you have the actual market for the week you are pricing. Filtering by room_type to match your own property is the difference between a useful benchmark and an average dragged around by hotel rooms and shared spaces.
Portfolio benchmarking for property managers. Schedule the same location and rolling date window daily, store listing_id and price_nightly, and you get a rate curve per property. Because listing ids are stable and coordinates come on every row, you can restrict the comparison to the few streets that actually compete with your unit rather than the whole city.
Housing and tourism research. Coordinates plus rating plus review count is enough to estimate density and activity per neighbourhood. Review count is the closest public proxy for how much a listing is actually let, and it comes as an integer rather than a string you have to unpick.
Event-driven pricing. Point the same location at the week of a conference or a match and at a control week, then compare price_nightly. Because both runs use explicit dates and the same currency, the delta is the event premium rather than an artefact of when you happened to run the scrape.
How it compares
| this actor | tri_angle/airbnb-scraper | automation-lab/airbnb-listing | |
|---|---|---|---|
| Per 1.000 listings | $2,50 | $4,00 | $5,00 |
| Actor-start fee | none | $0,0001 | $0,005 |
| Store rating | – | 2,54 from 13 reviews | 5,00 from 3 |
| 30-day run failure rate | 0% across validation runs | 6,9% | 2,0% |
| Nightly rate as its own field | yes | no | not stated |
| Coordinates | yes | yes | not stated |
| Currency pinned by country | yes | no | no |
| Explicit date window reported per row | yes | no | no |
Honest about the other side: tri_angle/airbnb-scraper has 761 monthly users against our zero, and curious_coder/airbnb-scraper will do a thin listing row for $0,20 per 1.000, which is a twelfth of our price. If all you need is a title and a URL, that one is cheaper and it works.
Pricing
One event. listing costs $0,0025 per listing returned, which is $2,50 per 1.000. All pricing is pay-per-event, so you only pay for listings you actually receive. No actor-start fee, no per-compute-unit charges, and a run that returns nothing costs nothing.
Limits and gotchas
- Set your dates. Without them the run picks a fixed window 30 days out and flags
datesWereDefaultedin the summary. That keeps runs comparable to each other, but it is not the window you probably meant. proxy_countrydecides the currency. Leaving it empty means the proxy picks a random country and Airbnb quotes in that country's currency, which makes rows incomparable. This is the single most common way an Airbnb scrape produces unusable numbers.- Airbnb redirects to the country domain. From a UK exit, airbnb.com answers with a small page that redirects to airbnb.co.uk in JavaScript rather than over HTTP. The actor detects this and follows it; without that, a UK-based search returns nothing at all.
- Search results are not a complete inventory. Airbnb ranks and caps what it shows, so a city with tens of thousands of listings still returns a few hundred per query. Narrow by neighbourhood, price band or room type to see further into the tail.
- Prices include Airbnb's current display setting. The total is what a guest would see for that window and guest count, which may or may not include fees depending on region and the site's own rules at the time.
- Rating and review count are empty on brand new listings. That is correct rather than missing, and typically affects one or two rows per page.
FAQ
Can I scrape Airbnb without an API key? Yes. Airbnb server-renders its search results and embeds them as JSON for the browser to display. There is no credential field in this actor's input.
Why do I get prices in the wrong currency?
Because Airbnb quotes in the currency of the country the request comes from. Set proxy_country to the market you care about and the currency follows. Leaving it empty gives you whatever country the proxy landed in.
Can I get the nightly price rather than the stay total?
Yes, as price_nightly, parsed from Airbnb's own price breakdown along with the number of nights it covers. Most Airbnb scrapers return only the total, which cannot be compared between listings with different minimum stays.
How many listings can I get for one location? Airbnb publishes a cursor list, so the actor knows exactly how many pages exist and the summary reports it. Expect a few hundred per query rather than a full city inventory, and narrow the search to go deeper.
Does it return coordinates? Yes, latitude and longitude on every row, which is what makes distance filtering and map work possible without a second geocoding step.
Related Actors
- Google Hotels Scraper — hotel prices across booking sites
- Google Maps Scraper — places, ratings and contact details
- Google Maps Reviews Scraper — reviews for any place