Airbnb Scraper avatar

Airbnb Scraper

Pricing

Pay per event

Go to Apify Store
Airbnb Scraper

Airbnb Scraper

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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_nightly is 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

FieldTypeRequiredDefaultWhat it does
locationstringyesAmsterdam, NetherlandsWhere to search, as you would type it on Airbnb
checkinstringno30 days outCheck-in date, YYYY-MM-DD
checkoutstringno5 nights laterCheck-out date, YYYY-MM-DD
adultsintegerno1Guest count, which changes eligibility and price
childrenintegerno0Children in the party
room_typeselectnoanyentire_home, private_room, shared_room, hotel_room
price_min / price_maxintegernoAirbnb's own price filter bounds
proxy_countrystringnonlTwo-letter code for the country the search runs from, which decides the currency
limitintegerno36Listings to return, 1 to 270
retriesintegerno4Retry 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 actortri_angle/airbnb-scraperautomation-lab/airbnb-listing
Per 1.000 listings$2,50$4,00$5,00
Actor-start feenone$0,0001$0,005
Store rating2,54 from 13 reviews5,00 from 3
30-day run failure rate0% across validation runs6,9%2,0%
Nightly rate as its own fieldyesnonot stated
Coordinatesyesyesnot stated
Currency pinned by countryyesnono
Explicit date window reported per rowyesnono

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 datesWereDefaulted in the summary. That keeps runs comparable to each other, but it is not the window you probably meant.
  • proxy_country decides 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.