Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Airbnb Listings Scraper icon

Airbnb Listings Scraper

Scrape Airbnb listings by location, dates and guests. Get listing ID, name, room type, price, rating, reviews and host. No account, no API key.

111 runs on Apify $0.0004 per listing ($0.4 / 1,000)
Run this in the cloudRun on Apify →

Travel, Hotels & Events

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust locations, checkIn, checkOut (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0004 per listing = $0.4 per 1,000

You are charged forWhenPrice
ListingCost per genuine public Airbnb listing saved$0.0004

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-07-29, and they are what you are actually charged.

Inputs

FieldWhat it doesType
locationsCity, region, or destination strings for public Airbnb stays search. Leave empty for an uncharged sample row.array
checkInOptional YYYY-MM-DD check-in date. Use both dates to receive date-specific displayed prices.string
checkOutOptional YYYY-MM-DD check-out date. Must be after check-in when both are supplied.string
adultsNumber of adult guests sent to the public search page.integer
childrenChildren aged 2 to 12, on top of the adults. They count as guests, so only homes that hold everyone come back, and the price can change. 0 to 16.integer
petsPets coming along, 0 to 5. Only homes that allow pets come back, and some add a pet fee to the price.integer
currencyShow prices in this currency. Leave it empty and Airbnb picks one.string
localeThe Airbnb site language the listing cards come back in. Listing names can come back machine-translated.string
maxItemsPerLocationHard cap on genuine listing rows saved for each location.integer
deadlineSecsHard wall-clock budget for all locations.integer

What you get

A structured dataset — each result includes fields like:

listingIdnamepropertyTyperatingreviewCountpricecurrencylistingUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Travel, Hotels & Events

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Google Hotels Scraper iconTravel, Hotels & Events

Google Hotels Scraper

Scrape Google Hotels by destination and dates: name, nightly price, stay total, rating, reviews, link. $3.50 per 1,000.

Ready to run — no setup

Luma Events Scraper iconTravel, Hotels & Events

Luma Events Scraper

Scrape lu.ma events by city, calendar or event link. Get name, date with timezone, venue, host, ticket price and guest count. $2.125 per 1,000.

Ready to run — no setup

Booking.com Reviews Scraper iconReviews & Reputation Data

Booking.com Reviews Scraper

Scrape Booking.com guest reviews. Get the score, title, liked and disliked text, reviewer name, country and stay dates. $1.50 per 1,000 reviews.

Ready to run — no setup

Tripadvisor Reviews Scraper iconReviews & Reputation Data

Tripadvisor Reviews Scraper

Scrape Tripadvisor reviews for hotels, restaurants and attractions. Get rating, full text, reviewer, hometown, trip type and owner reply. $0.25/1,000.

1 use cases

See all Travel, Hotels & Events →

Airbnb Listings Scraper: prices, ratings and coordinates from Airbnb search

Name a city or a destination, optionally give your dates and who is coming, and get the listings back as rows: the listing id, the name, the property type, the star rating, the review count, the price Airbnb showed, the map coordinates and up to five photos.

This reads Airbnb's public search results, so it gives you a sample of a destination rather than its whole inventory. Twenty listings per location, five locations per run, and no paging past that.

InputCity or destination names, up to 5 per run
OutputOne row per listing
Ceiling20 listings per location, 5 locations per run
Account neededNone, and no Airbnb key
Price$0.40 per 1,000 listings, flat on every plan

🔍 What Airbnb Listings Scraper does

Each location string goes into Airbnb's own stays search the way you would type it: Toronto, Ontario, Canada, Lisbon, Big Sur, California. Airbnb sends non-US visitors to a country domain first, and that handoff is followed for you, so a search run from anywhere lands on the same results.

Give it both dates and the prices come back for your actual stay. Give it neither and you get Airbnb's default view. One date on its own is rejected before any request goes out, because a half-specified search silently returns something else.

Every row carries the search that found it: searchLocation, checkIn, checkOut and adults, plus children and pets when you set them, so a multi-city run stays joinable back to your own list.

Children and pets narrow the search the way they do on Airbnb itself: only homes that hold everyone, or allow pets, come back.

There is a wall-clock budget on the whole run. When it runs out, the locations still waiting get a DEADLINE row rather than being dropped in silence.

📥 What you give it

{
  "locations": ["Toronto, Ontario, Canada", "Montreal, Quebec, Canada"],
  "checkIn": "2026-11-10",
  "checkOut": "2026-11-14",
  "adults": 2,
  "children": 1,
  "maxItemsPerLocation": 20
}
FieldDefaultWhat it is
locationsbox starts at Toronto, Ontario, CanadaCity, region or destination names. Up to 5 are used and the rest are ignored. Leave it empty and you get one labelled sample row instead of a real run.
checkIn, checkOutnoneYYYY-MM-DD. Supply both or neither, with check-out after check-in.
adults2Guests sent to the search, 1 to 16.
children0Children aged 2 to 12, 0 to 16. They count as guests, so only homes that hold everyone come back.
pets00 to 5. Only homes that allow pets come back, and some add a pet fee to the price.
currencynoneUSD, EUR, GBP, CAD, AUD, JPY, CHF, MXN, BRL or INR. Empty lets Airbnb pick.
localenoneThe language the cards come back in: en, fr, de, es, it, pt, nl or ja. Listing names can come back machine-translated.
maxItemsPerLocation20Listings kept per location. 20 is both the default and the ceiling.
deadlineSecs90Wall-clock budget for the whole run, 15 to 180 seconds.

Give it both dates or neither. One on its own stops the run with a single BAD_INPUT row, and no locations are searched.

A location string that is empty or longer than 160 characters stops the whole run, not just that one entry. Check the list before a long batch.

📤 What you get back

A real row from a recent run, with the photo list cut short here for length:

{
  "ok": true,
  "recordType": "listing",
  "listingId": "14822179",
  "name": "Luxury 1BR- Exclusive Maple Leaf Square condo",
  "propertyType": "Condo in Toronto",
  "rating": 4.98,
  "reviewCount": 169,
  "price": "$1,069",
  "priceAmount": 1069,
  "currency": null,
  "priceQualifier": "for 5 nights",
  "priceAccessibilityLabel": "$1,069 for 5 nights, originally $1,211",
  "badges": ["Guest favorite"],
  "spaceDetails": ["1 bedroom", "2 beds", "1 bath"],
  "latitude": 43.64361,
  "longitude": -79.38011,
  "photoUrls": ["https://a0.muscache.com/im/pictures/hosting/Hosting-14822179/original/...", "..."],
  "listingUrl": "https://www.airbnb.com/rooms/14822179",
  "searchLocation": "Toronto, Ontario, Canada",
  "checkIn": "2026-08-10",
  "checkOut": "2026-08-12",
  "adults": 2,
  "source": "airbnb_public_search_html",
  "transport": "direct"
}
FieldWhat it is
price, priceAmountThe card's display text, and the first number pulled out of it.
priceQualifierAirbnb's own wording for what that price covers. Read it before you treat priceAmount as a nightly rate: on the row above it is a five-night total.
priceAccessibilityLabelThe longer label Airbnb writes for screen readers. It is where a struck-through original price shows up.
currencyFilled when the price text carries a three-letter code, or a symbol only one currency uses (€, £, R$, ₹, Fr.). A bare $ leaves it null. Set currency in the input if you need to know.
children, petsOn rows from a search that set them.
propertyTypeThe card's heading, such as Condo in Toronto. It carries the city as well as the type.
badges, spaceDetailsAirbnb's own labels, as arrays. Guest favorite, 1 bedroom, 2 beds, 1 bath.
latitude, longitudeAirbnb's approximate pin. It is deliberately fuzzy until a booking is made.
photoUrlsUp to five, from Airbnb's image host.
listingIdAirbnb's numeric id. Use it to dedupe across runs.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itCharged
A listingrecordType: "listing" and no _sampleyes
The sample row_sample: trueno
A diagnosticrecordType: "diagnostic" and a codeno

Filter on _sample being absent, not on recordType. The free sample row also carries recordType: "listing". Note the diagnostic field is code, not errorCode.

CodeWhat it means
BAD_INPUTOne date without the other, check-out not after check-in, a location string that was empty or far too long, or a children, pets, currency or language value Airbnb does not take. The run stops there, before any search.
NO_RESULTSThe search page loaded and held no new listings for that location.
TARGET_ERRORThe search page came back in a shape the parser did not recognise. Worth reporting.
BLOCKEDAirbnb refused the request. Try again shortly.
NOT_FOUNDThe search URL answered 404.
NETWORKAirbnb could not be reached, or the request ran out of time.
DEADLINEThe run's wall-clock budget ran out before this location. Raise deadlineSecs or search fewer places.

One failed location does not stop the others, and a diagnostic row never fails the run.

▶️ How to run it

1. Open Airbnb Listings Scraper and click Try for free. 2. Type your destinations into Locations, one per line, up to five. 3. Fill in Check-in date and Check-out date together if you want prices for real dates. 4. Set Adults, and Children or Pets if they are coming, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.40 per 1,000 listings. Flat on every Apify plan, no volume tiers.

You pay per listing row delivered. The sample row, diagnostic rows and listings already seen in the same run are all free, and a run that returns no listings is not charged.

💡 What people use it for

  • Checking what a city is charging for your dates before setting your own price.
  • Sampling several neighbourhoods or nearby towns in one run and comparing the rating spread.
  • Pulling coordinates and ratings for a map of where the well-reviewed stays cluster.
  • Watching a destination on a schedule, with the same dates each time, to see the price move.
  • Giving a model a small clean table of real listings instead of a page of search HTML.

🚧 What it does not do

  • No host details. Host name, superhost status and response rate are not on the search cards and

are not in these rows.

  • No amenities, no availability calendar, no house rules, no per-listing reviews.
  • No infants setting. Airbnb's search takes it, but in our tests it changed neither which homes

came back nor their prices, so it would only look like filtering.

  • No paging. Twenty per location is the ceiling, so this is a sample of a destination, not its

inventory.

  • Five locations per run. Anything after the fifth is dropped without a warning.
  • priceAmount is not always a nightly rate. It is whatever number leads the card text, and

priceQualifier says what that covers.

  • Prices are the card's display value, before Airbnb's checkout adds fees and taxes.
  • Coordinates are approximate. Airbnb fuzzes the pin until a stay is booked.
  • Past dates are accepted and sent as given, which returns whatever Airbnb makes of them.
  • Rows are a snapshot, and Airbnb search results move constantly.

🧭 Which stay scraper do you need?

If you wantUse
Airbnb search listings with prices and ratingsThis one
Hotels with live rates for your own datesBooking.com Hotels Scraper
Nightly rates compared across booking sitesGoogle Hotels Scraper
Guest reviews with the stay dates attachedBooking.com Reviews Scraper
Reviews for a hotel, restaurant or attractionTripadvisor Reviews Scraper

❓ Questions people ask

Do I need an Airbnb account or API key? No. It reads the public search pages.

Why is currency empty? A bare $ does not say which dollar, so the field stays empty rather than being guessed. Set currency in the input when you need to be sure.

Can I get more than 20 listings for a city? Not in one run. Search neighbourhoods separately, or vary the dates and guest count, and dedupe on listingId.

Why did my run stop after one row? Almost always one date without the other, or a stray blank line in the locations list. The BAD_INPUT row says which.

Can I get the host's name? Not from search results. Airbnb does not put it on the cards.

Is scraping Airbnb listings legal? These are public search results, read the way a browser reads them. Listings can carry personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID, the location and the dates you used. The code on the diagnostic row usually names the problem on its own.