Airbnb Scraper - Listings, Prices, Ratings & Coordinates
Under maintenancePricing
from $0.002 / actor run started
Airbnb Scraper - Listings, Prices, Ratings & Coordinates
Under maintenanceAirbnb scraper for a location and travel dates: every listing with stay total, nightly rate, rating, review count, coordinates, badges and photos, tagged with the dates and guests the price is for. For trip comparison, rental market research and price tracking.
Pricing
from $0.002 / actor run started
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
20 days ago
Last modified
Categories
Share
Airbnb Scraper
Airbnb Scraper returns public accommodation listings for a location and date window, with stay totals, nightly prices, coordinates, ratings, reviews, badges and photos. Every row carries the dates and guest count that its price refers to. You can use it to compare stays for a trip, collect dated snapshots for market research, or export accommodation search results into a spreadsheet.
You type a place and, optionally, dates and a party size. The actor runs the same search a visitor would run on Airbnb, reads every result card on the requested pages and delivers one clean row per stay. There is no login, no browser extension and no API key to arrange. Results can be downloaded as JSON, CSV, Excel or HTML, or pulled into your own code through the Apify API.
What the Airbnb scraper returns
- Identity: listing id, public URL, the property label Airbnb shows (for example "Apartment in Amsterdam"), the host's own title and a subtitle.
- Price: the quoted stay total, the nightly figure from the price breakdown, the number of nights and the price text exactly as displayed.
- Context of the price: check-in, check-out, adults, children and the ISO currency on every row.
- Quality signals: average rating out of 5, review count and badges such as Guest favourite.
- Location: latitude and longitude of the card's map pin.
- Photos: the primary image and all images on the card.
- Order: the one-based position in the search results.
Airbnb Scraper input
The only required input is location. Use Airbnb's place naming, for example Amsterdam, Netherlands or Austin, Texas, United States. Include the region or country when a city name is ambiguous. The summary records the location and the spelling used for the search. Airbnb may include nearby towns in its results, so the requested location is search context and is not an address for every returned property.
Choose checkin and checkout as YYYY-MM-DD strings. If either date is absent or empty, both dates default to a five-night stay starting thirty days from the run date. Saved rows include the effective dates, so a result remains interpretable after the travel window passes. Explicit dates make comparisons across separate runs more useful.
adults defaults to 1 and accepts 1–16. children defaults to 0 and accepts 0–15; infants defaults to 0 and accepts 0–5. Guest counts influence available properties and quoted prices. currency defaults to EUR. Set it to USD, GBP or another currency supported by Airbnb to request comparable amounts. If you leave the currency string empty, Airbnb chooses its own currency and the actor reports the requested ISO code as null rather than guessing from a symbol.
room_type defaults to any. Other choices are entire_home, private_room, shared_room and hotel_room. The optional filters price_min, price_max, min_bedrooms, min_beds and min_bathrooms narrow the search. Price filters refer to Airbnb's nightly search figure, before fees. A zero value leaves a price or room-count filter unset. proxy_country preserves the existing two-letter country selection input.
limit defaults to 36 and accepts 1–270. Airbnb offers eighteen cards per page and at most fifteen pages. retries defaults to 4 and accepts 1–6. Results can be fewer than the requested limit because Airbnb repeats cards between pages or has fewer available properties. Duplicate listings are delivered once.
A real input used to obtain the example below:
{"location": "Amsterdam, Netherlands","adults": 2,"currency": "EUR","proxy_country": "nl","limit": 36,"retries": 4,"children": 0,"infants": 0,"room_type": "any","checkin": "2026-11-02","checkout": "2026-11-07"}
Output fields and example
Each dataset row includes the original listing_id, url, title, name, subtitle, rating, reviews_count, rating_label, latitude, longitude, badges, images and image. Listing identifiers are strings, including long identifiers that would lose precision as numbers. Missing ratings are null. Empty badge and image sets are null, preserving the existing dataset format.
Price fields are price_total, price_display, price_qualifier, price_nightly, price_nightly_display, nights, currency_symbol and price_label. price_total is the displayed stay total, including fees that Airbnb shows. Discounted cards use the discounted total. A nightly figure from the breakdown can be lower than the total divided by nights because taxes or property fees are separate. Compare totals only for the same travel dates, currency and party size.
Rows also include checkin, checkout, adults, children, currency, search_location and the one-based position. Additional fields provide a common accommodation format: source, platform, fetched_at, rating_scale, accommodation_id, lat, lng, price, check_in and check_out. The original field names remain available.
Selected fields from an actual returned listing (Amsterdam, two adults, 2–7 November 2026, first of 30 listings in that run):
{"position": 1,"listing_id": "1142549760112481397","url": "https://www.airbnb.com/rooms/1142549760112481397","title": "Urban Lodge Hotel","name": "Urban Lodge Hotel","subtitle": "Hotel in Amsterdam","rating": 4.75,"reviews_count": 1687,"rating_label": "4.75 out of 5 average rating, 1687 reviews","latitude": 52.3855,"longitude": 4.8346,"badges": ["Featured hotel"],"checkin": "2026-11-02","checkout": "2026-11-07","adults": 2,"children": 0,"currency": "EUR","price_total": 690,"price_display": "€690","price_qualifier": "total","price_nightly": 103.31,"price_nightly_display": "€103.31","nights": 5,"currency_symbol": "€","price_label": "€690 total","search_location": "Amsterdam, Netherlands"}
A newly listed property in the same run had rating and reviews_count set to null, a rating_label of "New place to stay" and badges set to null. Those nulls are real: the card carried no rating yet.
The default key-value store contains summary, including item and error counts, effective dates, page counts and the number of listings with a price. When some later pages fail, the dataset keeps successfully collected listings and an errors record explains what was missed. A search with no available listings succeeds with an empty dataset. The actor also provides its standard OUTPUT record with delivery information.
Use cases for Airbnb data
- Trip planning and comparison: run one search per date window or party size and sort by
price_totalorratingin a spreadsheet, without clicking through result pages. - Short term rental market research: collect dated snapshots for a city to see how many stays appear, what kind of property dominates, and how totals move between seasons. Because every row carries its dates and party size, snapshots from different days stay comparable.
- Price monitoring for hosts: schedule the actor for your own neighbourhood and dates to see what nearby listings with similar ratings ask for the same stay.
- Location analysis: the coordinates place each stay on a map, so you can count listings per area or join them with your own geographic data.
- Lead lists and content: build lists of highly rated stays, featured hotels or guest favourites for a travel guide or a partnership approach.
How to scrape Airbnb with this actor
- Open the actor in Apify Console and enter a
location, for exampleLisbon, Portugal. - Optionally set
checkin,checkout,adultsandcurrency, and narrow the search withroom_typeor the price and room filters. - Set
limitto the number of listings you need, up to 270. - Start the run and download the dataset, or call the actor from the Apify API, a scheduled task or an integration such as Make, Zapier or n8n.
Airbnb scraper compared with other Airbnb data sources
- The official Airbnb API is a partner program for hosts and software vendors who manage listings and reservations. It is not an open search API, so it does not give an outsider the results of a public search.
- Rental analytics dashboards sell estimated occupancy and revenue per market on a subscription. They answer different questions; this actor gives you the raw, current search results with the actual quoted price for dates you choose, and you pay per listing delivered.
- Open datasets published by researchers are snapshots for selected cities on fixed dates. Useful for history, but they do not answer "what does a stay for my dates cost now".
- Writing your own web scraping code means keeping up with page changes, pagination, duplicates and currency handling yourself. This actor already returns typed fields, deduplicates listings and keeps the price tied to its dates and party size.
- Other Airbnb scrapers in the Store differ in scope; some also collect reviews, calendars or detail pages. This one focuses on search results with a clear price model: one start event plus one event per delivered listing.
Pricing and free users
The price is unchanged: USD 0.002 per run start, plus USD 0.0025 per delivered listing. For example, a run delivering twenty listings has USD 0.052 in actor event charges. An empty search incurs only the USD 0.002 start event and no listing charge. Listing charges follow dataset delivery; a missing result is never billed as a listing. Any separate platform usage is shown by Apify.
Users without a paid Apify plan receive at most ten listings per run. Their requested limit is capped before collection and only delivered rows are billed. Paid users can request the normal limit of up to 270. Splitting work into different date or location searches can help organise research; each new run has its own start event.
FAQ
Why did I receive fewer results than my limit?
The limit is a ceiling. Airbnb may offer fewer stays or repeat listings across its available pages. The actor removes duplicates and preserves the page order. If some pages could not be collected, check the errors and summary rather than interpreting a partial dataset as the complete available market.
Can I compare a nightly price with the stay total?
They describe different amounts. The total covers the quoted stay and includes displayed fees. The nightly breakdown can exclude those fees. Keep the dates, party size and ISO currency together with the price when comparing results.
Do these results include a confirmed street address?
The search cards provide coordinates and their own property labels. They do not consistently disclose a street address for every stay. The actor does not invent an address or copy the requested city into a property's address field.
What happens when a search is empty or a page fails?
An empty search completes successfully with zero dataset rows and no listing charge. If a later page fails, available rows are retained with diagnostic information. Temporary source failures can change what is available on a later run, so inspect the recorded summary before drawing conclusions from a small dataset.
Does the Airbnb scraper need an Airbnb account or API key?
No. It reads the public search results that any visitor sees. You only need an Apify account to start the run.
Which currencies and countries are supported?
Any location Airbnb can search, and any currency code Airbnb accepts, such as EUR, USD or GBP. The requested ISO code is written on every row in currency; the printed symbol is kept separately in currency_symbol, because one symbol can stand for several currencies.
Can I scrape Airbnb reviews or the availability calendar?
Not with this actor. It returns the rating and review count from each search card, not the review texts or the day-by-day calendar of a listing.