Airbnb Scraper API: Airbnb Listings, Prices, Calendar & Hosts
Pricing
from $1.00 / 1,000 listing with details
Airbnb Scraper API: Airbnb Listings, Prices, Calendar & Hosts
Airbnb API and Airbnb data scraper, no login: Airbnb listings by city, map box or search URL with dates, guests and Airbnb's filters, every listing past the 280-card cap; Airbnb rooms URLs for details, prices with taxes, availability calendar, cancellation policy, host.
Pricing
from $1.00 / 1,000 listing with details
Rating
0.0
(0)
Developer
Hyperbach
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Airbnb listings as data, logged out: places, Airbnb search URLs or a map box in, with your dates, guests and Airbnb's own filters; one row per listing out with the price for the stay to the cent — the nightly rate, a discount, the taxes as their own line and the total with taxes — and, on request, the listing's record: the name and the whole description, guests, bedrooms, beds and baths, every amenity, every photo with its room, the house rules with the check-in and check-out times, the six sub-ratings, the host's public fields, the registration number, the cancellation policy for the stay and the minimum nights. Listing URLs and ids give the same record; a host's profile gives the host and the host's listings. Airbnb shows 280 listings a search: past that, the search is read by price bands, each to its own end, every listing once. Every search gets a free summary row with the place Airbnb chose, its count, what was read and a verdict. On request: the availability calendar (12 months) and a price for each check-in date. A stay Airbnb will not book, a listing that does not exist, a place Airbnb cannot find: free rows that say why. No login, no Airbnb account, no cookie, no API key, proxies handled for you.
Why this Airbnb scraper
- The price for your stay, taxes as their own line. Every search, record and price call is sent your dates and guests. Airbnb's US view shows the total before taxes; its UK view the same lines plus "Taxes" and the total with taxes, and no setting moves a US connection to it: the price is read from a UK connection by default, and every row says which view it carries (
price_view), never a mix. The nightly rate, a discount (early-booking, weekly), the total to the cent and every line of the breakdown by its own label. Without dates, each card is priced for its own stay (Airbnb's suggestion), and the row says so. - Every listing, not the first 280. Airbnb shows 280 listings a search (7 pages of 40). Past that the search is read by price bands: each band is probed for its count, split until it fits the view, and walked to its own end, every listing once; 20,257 distinct London listings in one search on our test. The summary row puts the listings read beside Airbnb's own count, which is a per-connection view (7,583 on one connection and 12,650 on another for one search), and says LIST_END, TRUNCATED, CAPPED or PARTIAL.
- The right place. Airbnb resolves a place word by the visitor's country: "New York" seen from the UK is Shiremoor, England, "Springfield" is Virginia or Missouri by connection. The run reads the place Airbnb chose on the first page, names it on the summary row (
resolved_place,place_id) and pins it on every later call; a word Airbnb cannot place gets a freeplace_not_foundrow, never a charged worldwide list. - The listing's whole record in one call. The name (never the card's "Apartment in …" heading), the whole description by its own headings, the registration number under "Registration Details" (Paris, Lisbon), guests, bedrooms (a studio is 0), beds and baths as numbers, every amenity with its group, every photo with its room, the house rules with the check-in and check-out times, the six sub-ratings and the rating spread, the host's id, name, Superhost and verified flags, rating, years, response rate and languages, the co-hosts. A hotel-type listing carries each room with its price and rate plans.
- The cancellation policy and the minimum nights, filled. The leader's rows leave the cancellation policy and the house rules empty (175 of 175 on our test): here the policy for your stay (its summary and each refund milestone with its deadline) is on by default, and the minimum and maximum nights of the check-in day come from the listing's calendar.
- Airbnb's own filters, every one checked. Price, type of place, property type, bedrooms, beds, baths, 36 amenities, Instant Book, Superhost, Guest favourite, free cancellation, Luxe, pets and a map box are sent as Airbnb's own search keys (19 of 19 measured against same-minute controls; a list of amenities as one key, as Airbnb's page sends it). A search URL's own filters apply too. Minimum rating, minimum reviews and excluded words are applied to each card before it costs anything.
- Honest rows and billing. One row and one charge per listing a run, whatever searches, bands and URLs repeat it. A stay Airbnb will not book is a free row with Airbnb's message (and the record filled); a listing that does not exist is free once two connections agree; a value that is no Airbnb URL is a free row with the reason, and the run goes on.
Who it's for
- Short-term rental investors and analysts — every listing of a city for your dates with the price to the cent, the taxes, the rating and the host, past Airbnb's 280-card view; the calendar's unavailable days per month and a price for each check-in date.
- Property managers and hosts — the competition around a map box or a neighbourhood with the same guests and dates, their amenities, house rules, minimum nights and cancellation policies; only the new or re-priced listings on a schedule.
- Travel and data teams — listing URLs in, the whole record out; typed rows keyed by listing id with the input and the stay on each, a free summary row per search, a run summary to check a pipeline against.
- Researchers and regulators — registration numbers, hosts and their listing counts, entire homes against rooms, by place or by host.
Quick start
The listings of a city for your dates, with the record and the price (the lane's default job)
{"locationQueries": ["London"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 2,"maxListingsPerSearch": 50}
Listing URLs: the record, the price with taxes and the cancellation policy
{"startUrls": ["https://www.airbnb.com/rooms/32321762","https://www.airbnb.com/rooms/1350708559893906434"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 2}
Entire homes with a pool and wifi under $300, Superhosts only
{"locationQueries": ["Lisbon"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 4,"priceMax": 300,"roomTypes": ["entire_home"],"amenities": ["pool","wifi"],"superhost": true,"maxListingsPerSearch": 100}
Every listing of a search past the 280 view, cards only
{"locationQueries": ["Barcelona"],"checkIn": "2026-12-10","checkOut": "2026-12-13","adults": 2,"includeDetails": false,"maxListingsPerSearch": 2000}
A host and the host's listings, with 3 months of calendar
{"startUrls": ["https://www.airbnb.com/users/show/26402568"],"calendarMonths": 3}
Output
One row per listing (and one free summary row per search, one row per host asked):
| field | meaning |
|---|---|
row_type | listing (one listing), search (the free summary of one search: the place Airbnb chose, its count, what was read and the verdict) or host (one host asked by URL or id). |
status | A listing row: ok (charged), unavailable (the stay is not bookable: Airbnb's message in status_detail, the record still filled; free), not_found (Airbnb has no such listing: two connections agreed; free), failed, invalid (the value names no Airbnb search, listing or host), duplicate (another input of the run named it) or not_read (maxItems, the charge limit or the time limit came first), all free. A search row: ok, place_not_found (Airbnb could not place the word), no_results, failed, invalid, duplicate, not_read. A host row: ok (charged), not_found, failed, not_read. |
status_detail | Why, in words: the reason of a free row, or what a charged row lacks and why (the record was not read and the row carries the search card; the taxes view was refused and the row carries the US view). |
search_id | The run's id of the input this row answers (s1, l2, h3…): a search's listings and its summary row share it. |
input | The input as you gave it (the place, the URL or the id). |
input_index | The input's position in your lists (places first, then URLs). |
scraped_at | When the row was read (UTC). |
country | The country whose Airbnb the search was read from (country, US by default): Airbnb orders a search and resolves a place by the visitor's country. |
id | Airbnb's listing id, as text (ids pass 2^53: 1715326028816662853); the de-duplication key (one row and one charge per listing a run). On a host row the host's id. |
url | The listing on Airbnb: https://www.airbnb.com/rooms/ |
title | The listing's own name (the record's title; a card row the card's nameLocalized), never the card's heading ("Apartment in Kensington and Chelsea" is the heading, card_heading). In the asked language when Airbnb translates it. |
title_original | The host's original name of the listing when the shown one is a translation; null otherwise. |
card_heading | The search card's heading: " |
card_subtitle | The search card's subtitle line (Airbnb writes it; it can differ from the listing's name). |
rank | The listing's place in the search, in the order the walk met it (Airbnb's order on page 1, then the price bands). |
page | The page of the search (or of its price band) the listing was on (40 a page). |
price_band | The price band (150-185) a listing past Airbnb's 280-card view was read in; null in the first view. |
room_type | Entire home/apt, Private room, Shared room or Hotel room (Airbnb's own room type). |
property_type | Airbnb's property label: Entire condo, Private room in home, Room in hotel… |
is_hotel | True for a hotel-type listing (its rooms and their prices in rooms), false for a home. |
pdp_type | Airbnb's page type: MARKETPLACE (a home) or HOTEL. |
guests | The listing's guest capacity. |
bedrooms | Bedrooms (a studio = 0 with is_studio). From the overview line; a hotel's rooms carry their own. |
is_studio | True for a studio. |
beds | Beds. |
bathrooms | Bathrooms (1.5 for "1.5 baths"). |
bathroom_shared | True for a shared bath, false for a private one, null when Airbnb does not say. |
overview_items | The overview line as Airbnb writes it ("2 guests", "Studio", "2 beds", "1 bath"): the text behind the numbers, in the asked language. |
card_beds_text | The search card's bed line ("2 beds", "1 double bed"). |
card_baths_text | The search card's bath line. |
card_host_text | The search card's host line where Airbnb shows one ("Business host"). |
latitude | The listing's pin; Airbnb shows an approximate pin until booking (location_is_exact). |
longitude | The listing's pin. |
location_is_exact | False when Airbnb shows the area, not the address (most homes: the exact location is given after booking). |
location | The location line: "Greater London, England, United Kingdom". |
location_name | The area Airbnb names: "Kensington and Chelsea, London". |
neighbourhood_summary | Airbnb's summary of the neighbourhood. |
neighbourhood_from_host | The host's own text about the neighbourhood. |
rating | The overall rating (0–5). Null on a new listing and on a card of a listing with fewer than three reviews (Airbnb shows none). |
reviews_count | The review count. |
rating_cleanliness | The cleanliness sub-rating. |
rating_accuracy | The accuracy sub-rating. |
rating_checkin | The check-in sub-rating. |
rating_communication | The communication sub-rating. |
rating_location | The location sub-rating. |
rating_value | The value sub-rating. |
rating_distribution | The share of reviews per star ("5": 0.83 …). |
is_guest_favorite | Airbnb's Guest favourite badge. |
is_new_listing | True for a listing Airbnb marks new (no rating yet). |
instant_book | True when the listing books instantly (null on a hotel page). |
is_luxe | Airbnb Luxe. |
home_tier | Airbnb's home tier (1 standard, 2 Plus, 3 Luxe). |
badges | The search card's badges ("Guest favorite", "Superhost"). |
check_in | The stay the row is priced for: its check-in date. |
check_out | The stay's check-out date. |
nights | Nights of the stay. |
adults | Adults of the stay. |
children | Children of the stay. |
infants | Infants of the stay. |
pets | Pets of the stay. |
stay_source | Where the stay came from: asked (your checkIn / checkOut), url (the URL's own dates), card (no dates: the card's own stay, Airbnb's suggestion) or null (no stay: no price). |
available | Airbnb's answer for the stay: false makes the row a free unavailable row. |
unavailable_reason | Airbnb's own message for an unavailable stay ("Those dates are not available", "Maximum number of guests is 2"). |
currency | The ISO currency of every amount on the row (your currency). |
price_view | with_taxes (Airbnb's UK view: a Taxes line where the listing has taxes and the total with taxes) or before_taxes (the US view: the total before taxes). Every row says which; the two are never mixed. |
price_total | The price of the stay before taxes, to the cent ("Price after discount", or the lines' sum): the fees are inside the nightly rate on Airbnb's logged-out view ("Prices include all fees"). |
price_per_night | The nightly price the guest pays: the stay's total over its nights, after a discount; without a discount the rate of the "N nights x $rate" line. |
price_per_night_original | The nightly rate before a discount (the "N nights x $rate" line's rate); null without a discount. |
price_original | The price before a discount ("originally $1,390"), before the taxes like price_total; null without a discount. |
price_discount | The discount lines' sum (negative: an early-booking, weekly or monthly discount). |
price_taxes | The Taxes line (the UK view); null where the listing has none or in the US view. |
price_total_with_taxes | The total with taxes on the taxes view: its "Total" line (a long stay's "Monthly total"), or the sum of its lines where it shows none (no tax in the place, a hotel's "Taxes and fees"). |
price_label | Airbnb's price text: "$603 for 3 nights", "$492 total", "From $449" (a hotel). |
price_style | Airbnb's display style: TOTAL_ONLY (US) or REGULATED_TOTAL (UK, EU). |
price_lines | Every line of Airbnb's price breakdown, by its own label: {label, amount, text}. |
rooms | A hotel's rooms: name, details, available, the price for the stay and the rate plans ("Free cancellation +$79.18"). |
min_nights | The minimum nights of the stay's check-in day (from the listing's calendar). |
max_nights | The maximum nights of the stay's check-in day. |
cancellation_policy | The policy for the stay: summary ("Free cancellation before November 10…"), milestones (refund, terms, deadline), kind (cancellation, or a hotel's booking_requirements). Null without a stay; status_detail then quotes Airbnb ("Add your trip dates"). Read for an unavailable stay too. |
description | The whole description as plain text (in the asked language). |
description_original | The host's original description when the shown one is a translation. |
description_sections | The description by its own headings: {"": summary, "The space": …, "Guest access": …, "Registration Details": …}. |
registration_number | The text under the description's Registration Details heading ("7511107244296", "17939/AL", "Exempt - hotel-type listing"); null where the listing has none. |
language | The description's own language. |
highlights | The listing's highlights: {type, title, detail} (Self check-in, a popular amenity…). |
amenities | Every amenity: {name, group, available, detail}; available false for the "Not included" group. |
amenities_count | Amenities the listing has (available ones). |
photos | Every photo: {url, room, caption} (the room from Airbnb's photo tour; the host's caption where the host wrote one). A card row: the card's photos. |
photo_count | Photos. |
thumbnail | The first photo. |
check_in_time | The check-in time or window ("3:00 PM", "3:00 PM - 12:00 AM", "15:00" in a 24-hour language). |
check_out_time | The check-out time. |
self_check_in | The self check-in kind ("Self check-in with keypad", from the house rules or the policies), or "Self check-in" where the amenity is listed; null where Airbnb names none. |
max_guests | The most guests the stay takes (infants not counted). |
max_guests_rule | The house rules' guest limit. |
pets_allowed | Pets allowed. |
parties_allowed | Parties or events allowed. |
smoking_allowed | Smoking allowed. |
quiet_hours | Quiet hours ("10:00 PM - 9:00 AM"). |
children_allowed | Children allowed. |
infants_allowed | Infants allowed. |
house_rules | Every house rule: {type, title, detail}. |
safety_and_property | Safety devices and property notes: {group, title, detail}. |
sleeping_arrangements | Where guests sleep: {room, beds}. |
accessibility_features | The accessibility features by room. |
host_id | The host's Airbnb user id. |
host_name | The host's public display name, as on the listing page. |
host_url | The host's public profile. |
host_is_superhost | The host is a Superhost. |
host_is_verified | The host's identity is verified. |
host_rating | The host's rating over all their listings. |
host_reviews_count | The host's review count over all their listings. |
host_years | Years as a host. |
host_months | Months past those years. |
host_response_rate | Airbnb's response-rate line ("Response rate: 100%"). |
host_response_time | Airbnb's response-time line ("Responds within an hour"). |
host_languages | The languages the host speaks. |
host_picture_url | The host's profile picture. |
host_listings_count | How many listings the host manages (the host's profile: a host row, or includeHostProfile). |
host_verifications | What Airbnb verified for the host (Identity, Email address, Phone number). |
host_listings | A host row: the host's listings as the profile lists them (id, url, title, room and property type, bedrooms, beds, baths, rating, reviews, instant book, thumbnail); each also follows as its own listing row. A listing row with includeHostProfile: the same list of its host's listings. |
cohosts | The co-hosts: {id, name}. |
host_profile_read | True when the host's profile was read for this row (includeHostProfile). |
calendar | With calendarMonths: one entry per day {date, available, bookable, check_in, check_out, min_nights, max_nights}. |
unavailable_days_by_month | With calendarMonths: unavailable days per month ("2026-12": 9): booked or blocked, which Airbnb does not tell apart; the days before today are not counted. |
dated_prices | With datedPriceDays: one entry per check-in day {check_in, check_out, nights, available, price_total, price_per_night, price_original, price_discount, price_taxes, price_total_with_taxes, price_label, currency, note}. |
dated_prices_count | Dated prices with a price (each one charged as a dated price). |
details_read | True when the listing's record was read (charged as a listing); false on a card row (charged as a card). |
price_read | True when the row carries a price for the stay. |
query | A search row: the word the search sent (a URL's path slug for a search URL; empty for a map box). |
resolved_place | A search row: the place Airbnb resolved the word to ("London, United Kingdom"); null for a map box. |
place_id | A search row: the place id Airbnb chose, pinned on every later call of the search. |
filters | A search row: the run's filters as sent. |
results_count | A search row: the count Airbnb shows for the search on the connection that read it (a per-connection view: two views of one search differ by thousands). |
listings_found | A search row: the distinct listings the walk read. |
listings_delivered | A search row: the charged listing rows the search delivered. |
duplicates_skipped | A search row: listings another input of the run delivered, and repeats of a listing on a later page or price band of the same search (no second row, no second charge). |
filtered_out | A search row: listings dropped free — cards the card filters dropped, and records of another room type than roomTypes asked (Airbnb does not apply every room type). |
price_bands | A search row: the price bands read past Airbnb's 280-card view, each to its own end. |
verdict | A search row: LIST_END (the list read to its end, or every price band to its own end), TRUNCATED (a limit of Airbnb's came first), CAPPED (your limit came first) or PARTIAL (a refusal or the time limit stopped it). |
verdict_detail | A search row: the verdict in words, with the listings read beside Airbnb's count. |
list_calls | A search row: the search calls the walk made. |
change_type | With monitorMode: new or changed since the memory's last delivery. |
changed_fields | With monitorMode: what moved (price; stay when a search without dates got another stay from Airbnb, whose price is then not compared). |
previous_read_at | With monitorMode: when the memory last delivered this listing. |
first_read_at | With monitorMode: when the memory first read this listing. |
times_read | With monitorMode: how many runs of the memory read this listing. |
previous_price | With monitorMode: the card's price at the last delivery. |
price_change | With monitorMode: the card's price now minus the previous price. |
Example record:
{"row_type": "listing","status": "ok","status_detail": null,"search_id": "s1","input": "London","input_index": 1,"scraped_at": "2026-10-20T18:27:08Z","country": "US","id": "1518845467174835436","url": "https://www.airbnb.com/rooms/1518845467174835436","title": "Quiet 1-Bed Retreat in Kensington AC","title_original": null,"card_heading": "Apartment in Kensington and Chelsea","card_subtitle": "Modern flat near Kensington Gardens","rank": 5,"page": 1,"price_band": null,"room_type": "Entire home/apt","property_type": "Entire rental unit","is_hotel": false,"pdp_type": "MARKETPLACE","guests": 4,"bedrooms": 1,"is_studio": null,"beds": 2,"bathrooms": 1.0,"bathroom_shared": null,"overview_items": ["4 guests","1 bedroom","2 beds","1 bath"],"card_beds_text": "2 beds","card_baths_text": "1 bath","card_host_text": null,"latitude": 51.5038,"longitude": -0.1944,"location_is_exact": true,"location": "Greater London, England, United Kingdom","location_name": "Kensington and Chelsea, London","neighbourhood_summary": "The Natural History Museum, Portobello Road markets, and leafy garden squares give this London borough a cultured, residential feel.","neighbourhood_from_host": "Set in the heart of Kensington, this area blends classic London charm with a modern, stylish vibe. Think leafy streets, chic boutiques, independent coffee shops, and some of the city’s best brunch spots — all just around the corner. You're a short walk from Kensington High Street, Notting Hill, and the stunning Kensington Gardens. Whether you're into food, fashion, or just soaking up the local culture, this is one of London's coolest (yet most relaxed) spots to call home during your stay.","rating": 4.99,"reviews_count": 73,"rating_cleanliness": 5.0,"rating_accuracy": 5.0,"rating_checkin": 5.0,"rating_communication": 5.0,"rating_location": 5.0,"rating_value": 4.9,"rating_distribution": {"5": 0.9863,"4": 0.0137,"3": 0.0,"2": 0.0,"1": 0.0},"is_guest_favorite": true,"is_new_listing": false,"instant_book": true,"is_luxe": false,"home_tier": 1,"badges": ["Guest favorite"],"check_in": "2026-12-10","check_out": "2026-12-13","nights": 3,"adults": 2,"children": null,"infants": null,"pets": null,"stay_source": "asked","available": true,"unavailable_reason": null,"currency": "USD","price_view": "with_taxes","price_total": 1111.62,"price_per_night": 370.54,"price_per_night_original": 463.18,"price_original": 1390.0,"price_discount": -277.91,"price_taxes": null,"price_total_with_taxes": 1111.62,"price_label": "$1,112 total, originally $1,390","price_style": "REGULATED_TOTAL","price_lines": [{"label": "3 nights x $463.18","amount": 1389.53,"text": "$1,389.53"},{"label": "Early booking discount","amount": -277.91,"text": "-$277.91"},{"label": "Total","amount": 1111.62,"text": "$1,111.62"}],"rooms": null,"min_nights": 3,"max_nights": 365,"cancellation_policy": {"name": null,"summary": "Free cancellation for 24 hours. After that, the reservation is non-refundable. Review this host's full policy for details.","milestones": [{"refund": "Full refund","terms": "Get back 100% of what you paid.","deadline": "24 hours after booking","when": "Within"},{"refund": "No refund","terms": "This reservation is non-refundable.","deadline": "Oct 21 7:27 PM","when": "After"}],"kind": "cancellation"},"description": "Bright and modern flat in the heart of Kensington, just minutes from High Street Kensington and Holland Park. Features a UK king-size bed, a comfy sofa bed, fully equipped kitchen, …(truncated for display)","description_original": null,"description_sections": {"": "Bright and modern flat in the heart of Kensington, just minutes from High Street Kensington and Holland Park. Features a UK king-size bed, a comfy sofa bed, fully equipped kitchen, and sleek bathroom. Ideal for couples, families, or work trips. The apartment is located on the 2nd floor and is easily accessible via elevator."},"registration_number": null,"language": "en","highlights": [{"type": "LISTING_GUEST_FAVORITE","title": "Top 5% of homes","detail": "This home is highly ranked based on ratings, reviews, and reliability."},{"type": "LISTING_SELF_CHECKIN","title": "Self check-in","detail": "Check yourself in with the smartlock."},{"type": "LISTING_REVIEW_AREA_VIBES","title": "Calm and convenient location","detail": "Guests say this area is peaceful and it’s easy to get around."}],"amenities": [{"name": "Hair dryer","group": "Bathroom","available": true,"detail": null},{"name": "Hot water","group": "Bathroom","available": true,"detail": null},{"name": "Washer","group": "Bedroom and laundry","available": true,"detail": null},{"name": "Dryer","group": "Bedroom and laundry","available": true,"detail": null},{"name": "Essentials","group": "Bedroom and laundry","available": true,"detail": "Towels, bed sheets, soap, and toilet paper"},{"name": "Hangers","group": "Bedroom and laundry","available": true,"detail": null},{"name": "Bed linens","group": "Bedroom and laundry","available": true,"detail": null},{"name": "Iron","group": "Bedroom and laundry","available": true,"detail": null},{"name": "TV","group": "Entertainment","available": true,"detail": null},{"name": "Crib","group": "Family","available": true,"detail": null},{"name": "Air conditioning","group": "Heating and cooling","available": true,"detail": null},{"name": "Heating","group": "Heating and cooling","available": true,"detail": null},{"name": "Wifi","group": "Internet and office","available": true,"detail": null},{"name": "Kitchen","group": "Kitchen and dining","available": true,"detail": "Space where guests can cook their own meals"},{"name": "Refrigerator","group": "Kitchen and dining","available": true,"detail": null},{"name": "Microwave","group": "Kitchen and dining","available": true,"detail": null},{"name": "Cooking basics","group": "Kitchen and dining","available": true,"detail": "Pots and pans, oil, salt and pepper"},{"name": "Dishwasher","group": "Kitchen and dining","available": true,"detail": null},{"name": "Stove","group": "Kitchen and dining","available": true,"detail": null},{"name": "Oven","group": "Kitchen and dining","available": true,"detail": null},{"name": "Hot water kettle","group": "Kitchen and dining","available": true,"detail": null},{"name": "Toaster","group": "Kitchen and dining","available": true,"detail": null},{"name": "Private entrance","group": "Location features","available": true,"detail": "Separate street or building entrance"},{"name": "Elevator","group": "Parking and facilities","available": true,"detail": "The home or building has an elevator that’s at least 52 inches deep and a doorway at least 32 inches wide"},{"name": "Self check-in","group": "Services","available": true,"detail": null},{"name": "Smart lock","group": "Services","available": true,"detail": null},{"name": "Smoke alarm","group": "Not included","available": false,"detail": "There is no smoke alarm on the property."},{"name": "Carbon monoxide alarm","group": "Not included","available": false,"detail": "There is no carbon monoxide detector on the property."},{"name": "Shampoo","group": "Not included","available": false,"detail": null}],"amenities_count": 26,"photos": [{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/445e2200-2899-46ef-b974-ba53755fa073.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/6c819908-f01a-4e19-9d32-856dec2be2c2.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/ee90eee1-6065-44e2-9ced-f97ac8763807.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/60ee7c60-0f72-478e-bb0d-0f30032d3eaa.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/e3bb2116-24fa-4e84-b2b6-12857b6d4f99.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/425de488-80a1-4733-9fd6-d0087d5c5957.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/eee77001-8414-4cd1-aa96-b6dd69b51c27.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/24680118-b9c8-4bbe-960a-b1a440f7b580.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/4a5f3936-24d6-49fe-a2d5-c00a72cfb62b.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/fdd0d8ef-afd9-440d-9016-3ba178dadcfb.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/5c22a6f7-21dd-4606-a52f-827826f4896d.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/42f3e0e0-876a-4c40-95ab-367699702c02.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/3adbd749-01db-4f0d-8ca9-ddc4ec31281a.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/79a051e2-ba9c-4c2a-a675-a6263dc7e079.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/1372350d-5165-4dd0-972e-fd3d9bfd6015.jpeg","room": "Living room 1","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/feaf9350-d929-4338-bfd8-274b3cfec910.jpeg","room": "Living room 2","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/d1200426-048a-4438-8959-db4142d05627.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/50d8c3ec-bded-4424-8eb7-250680ab7dd5.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/52b43ae5-7cda-49d9-bb94-fc2a15864c09.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/ac8e5c6a-694d-484f-9260-ffd9f7f1e7d1.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/2ddc0250-02fe-4ae6-b2a8-58a0643ea7d5.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/5fbd990b-ead3-4eaa-b8b2-b6f2fe667bde.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/d8577ce0-f883-4aa1-b1d0-053e1e09865c.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/114bff92-03f8-4081-9f84-b946d3668f5b.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/22d5f472-99e1-4df5-bb37-ab4bc4801b61.jpeg","room": "Bedroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/7d7e50f8-1c34-49aa-bc58-9561467409bd.jpeg","room": "Full bathroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/c2164e6c-200c-4cca-830f-8d511bea5a07.jpeg","room": "Full bathroom","caption": null},{"url": "https://a0.muscache.com/im/pictures/hosting/Hosting-1518845467174835436/original/ca0ea5ab-ff6c-4274-9748-6dbe039f6d1d.jpeg","room": "Additional photos","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/ec5d687f-50ba-49c9-9197-8fa764c93c71.jpeg","room": "Additional photos","caption": null},{"url": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/d637082a-5d49-42eb-8ba2-293921151255.jpeg","room": "Additional photos","caption": null}],"photo_count": 30,"thumbnail": "https://a0.muscache.com/im/pictures/prohost-api/Hosting-1518845467174835436/original/445e2200-2899-46ef-b974-ba53755fa073.jpeg","check_in_time": "3:00 PM","check_out_time": "11:00 AM","self_check_in": null,"max_guests": 4,"max_guests_rule": 4,"pets_allowed": false,"parties_allowed": false,"smoking_allowed": false,"quiet_hours": "11:00 PM - 7:00 AM","children_allowed": true,"infants_allowed": true,"house_rules": [{"type": "person_capacity","title": "Up to 4 overnight guests","detail": null},{"type": "pets","title": "No pets","detail": "Service animals only"},{"type": "smoking_allowed","title": "No smoking","detail": "Including vaping and e-cigarettes"},{"type": "quiet_hours","title": "Quiet hours","detail": "11:00 PM - 7:00 AM"},{"type": "events_allowed","title": "No parties or events","detail": null},{"type": "commercial_photography_allowed","title": "No commercial photography","detail": "Including commercial filming"},{"type": "additional_rules","title": "During the stay","detail": "Please note we can provide travel cots upon request but not baby bedding; guests will need to bring their own."}],"safety_and_property": [{"group": "Safety devices","title": "No carbon monoxide alarm","detail": null},{"group": "Safety devices","title": "No smoke alarm","detail": null}],"sleeping_arrangements": [{"room": "Bedroom","beds": "1 king bed"},{"room": "Living room","beds": "1 sofa bed"}],"accessibility_features": null,"host_id": "11515631","host_name": "[redacted]","host_url": null,"host_is_superhost": true,"host_is_verified": true,"host_rating": 4.91,"host_reviews_count": 13423,"host_years": 7,"host_months": 6,"host_response_rate": "Response rate: 100%","host_response_time": "Responds within an hour","host_languages": ["English","Polish","Spanish"],"host_picture_url": "https://a0.muscache.com/im/pictures/user/User/original/efd62475-fc45-4605-8ea8-a372f383bbee.jpeg","host_listings_count": 178,"host_verifications": ["Identity","Email address","Phone number"],"host_listings": null,"cohosts": [{"id": "1470455058784267803","name": "[redacted]"},{"id": "1507787571978543016","name": "[redacted]"},{"id": "1486954732052316342","name": "[redacted]"},{"id": "1632493357203626237","name": "[redacted]"}],"host_profile_read": true,"calendar": [{"date": "2026-10-01","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-02","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-03","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-04","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-05","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-06","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-07","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-08","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-09","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-10","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-11","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-12","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-13","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-14","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-15","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-16","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-17","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 1,"max_nights": 1},{"date": "2026-10-18","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-19","available": false,"bookable": null,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-20","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-21","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-22","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-23","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-24","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-25","available": true,"bookable": true,"check_in": true,"check_out": false,"min_nights": 2,"max_nights": 365},{"date": "2026-10-26","available": true,"bookable": true,"check_in": false,"check_out": true,"min_nights": 3,"max_nights": 365},{"date": "2026-10-27","available": false,"bookable": false,"check_in": false,"check_out": true,"min_nights": 3,"max_nights": 365},{"date": "2026-10-28","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 3,"max_nights": 365},{"date": "2026-10-29","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 3,"max_nights": 365},{"date": "2026-10-30","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 3,"max_nights": 365},{"date": "2026-10-31","available": false,"bookable": false,"check_in": false,"check_out": false,"min_nights": 3,"max_nights": 365}],"unavailable_days_by_month": {"2026-10": 29},"dated_prices": [{"check_in": "2026-10-25","check_out": "2026-10-27","nights": 2,"available": true,"price_total": 638.86,"price_per_night": 319.43,"price_taxes": null,"price_total_with_taxes": null,"price_label": "$639 for 2 nights","currency": "USD","note": null}],"dated_prices_count": 1,"details_read": true,"price_read": true,"query": null,"resolved_place": null,"place_id": null,"filters": null,"results_count": null,"listings_found": null,"listings_delivered": null,"duplicates_skipped": null,"filtered_out": null,"price_bands": null,"verdict": null,"verdict_detail": null,"list_calls": null,"change_type": null,"changed_fields": null,"previous_read_at": null,"first_read_at": null,"times_read": null,"previous_price": null,"price_change": null}
Pricing
Pay for the listings a run delivers, plus one run start; no platform usage is billed to you. The row prices fall with your Apify plan.
| event | unit | Free | Starter | Scale | Business |
|---|---|---|---|---|---|
Listing with details (listing) | per 1,000 | $4.00 | $2.00 | $1.50 | $1.00 |
Listing by URL (listing-url) | per 1,000 | $5.00 | $3.00 | $2.50 | $1.95 |
Listing card (search only) (card) | per 1,000 | $0.20 | $0.17 | $0.14 | $0.10 |
Host (host) | per 1,000 | $5.00 | $4.25 | $3.50 | $2.50 |
Host profile on a listing (host-profile) | per 1,000 listings | $2.00 | $1.35 | $1.20 | $1.00 |
Price for a date (dated-price) | per 1,000 dates | $10.00 | $8.50 | $7.00 | $5.00 |
Run start (start) | per run | $0.0027 | $0.0027 | $0.0027 | $0.0027 |
A listing of a search with its record read (the price for the stay with its lines and the taxes, the description, rooms and beds, amenities, photos, house rules, the host's public fields, the cancellation policy and the minimum nights) is $4.00 per 1,000 on the Free plan ($0.004 a listing) and $2.00 on Starter. A listing asked by its URL or id is $5.00 per 1,000 on Free ($3.00 on Starter); a search card alone (includeDetails off) $0.20; a host asked by profile $5.00, each of the host's listings then a listing row. Two add-ons, only when you ask for them: the host's profile on a listing row (includeHostProfile) $2.00 per 1,000 listings, and a price for each open check-in date (datedPriceDays) $10.00 per 1,000 dates priced. The taxes view, the cancellation policy, the calendar (calendarMonths), Airbnb's filters and the monitor cost nothing extra. Each run that delivers a charged row also pays the run start, $0.0027 once; a run that delivers no charged row pays nothing at all. So the form's own run (London, the first 240 listings with the record) costs $0.9627 on the Free plan and $0.4827 on Starter; 1,000 listings with the record $4.0027 and $2.0027; 1,000 search cards $0.2027 and $0.1727; several searches in one run share one start. Free: every search summary row (the place Airbnb chose, its count and the verdict; place_not_found for a word Airbnb cannot place), a stay Airbnb will not book (unavailable), a listing Airbnb does not have (not_found), a value that names nothing (invalid), a repeat (duplicate), an input left unread at the cap or the time limit (not_read), a record that could not be read (failed), a record of a room type the search did not ask for, and a listing the monitor holds back. A listing is charged once a run whatever inputs overlap; a run that stops early (a timeout, an abort) is charged for the rows it delivered. maxItems counts the charged rows. Before the first request the log names the price of each row at your plan, the run start and, when a cap bounds the run (maxItems, maxListingsPerSearch, one row a listing URL), the most it can cost, the cap filled with the dearest rows first. A search without a cap has no bound but Airbnb's own list: the log names Airbnb's count for each search when its first page is read, and the read ends at Airbnb's own list end (Moab, UT: 1,233 listings against Airbnb's count of 1,308 on our test, $4.9347 on Free; London: more than 20,000). Set maxItems (the form starts at 240), maxListingsPerSearch or a charge limit for a lower maximum. Enterprise plans have their own rates — the Actor's Pricing tab shows the price for your plan.
Usage patterns
- What to give —
locationQueries: places, one search each, as you would type them in Airbnb's search box (qualify an ambiguous one: "Springfield, MO").startUrls: Airbnb search URLs (their own filters, dates and map box apply), listing URLs or bare listing ids, host profiles (/users/show/ - Dates and guests —
checkIn/checkOutand the guests price every row for that stay, and Airbnb lists only places open for it. Without dates each search card is priced for its own stay (Airbnb proposes one per card, usually 5 nights) and a listing URL for its owncheck_in/check_out;stay_sourcesays which. A listing URL with no dates anywhere gives the record without a price. - How many listings —
maxListingsPerSearchcaps each search (0 = every listing);maxItemscaps the charged rows of the run. Airbnb shows 280 listings a view: a search that may pass it is read by price bands, each to its own end, and its summary row gives the listings read beside Airbnb's count. A cap is claimed before a listing is read, so nothing past it is read or charged. - What a row is —
row_type=listing: one listing, with its record whenincludeDetailsis on (the default;details_readtrue, charged as a listing) or the search card alone when it is off (name, price for the stay, rating, beds, photos, coordinates; charged as a card). A listing asked by URL is a listing row too (charged as a listing by URL).row_type=search: the free summary of one search.row_type=host: one host asked by URL, the host's listings following as listing rows. - Scheduled runs: only new or re-priced listings — Save a task with
monitorModenew(orchanged, which also delivers a listing whose price for the stay moved) and astateStoreName, and schedule it: a listing the memory delivered before is held back free and takes no room in your caps;change_type,previous_priceandprice_changesay what moved. A price is compared only with the price of the same stay: other dates are a new memory entry, never a price change.
Input configuration
| field | type | default | what it does |
|---|---|---|---|
locationQueries | array | [] | Places to search, one search each (at most 200), as you would type them in Airbnb's search box: "London", "New York, NY", "Springfield, MO". Airbnb resolves a place by the visitor's country ("New York" seen from the UK is Shiremoor, England), so the run pins the place Airbnb chose on the first page for the whole search and names it on the summary row; qualify an ambiguous name. A word Airbnb cannot place is a free place_not_found row, never a worldwide list. |
startUrls | array | [] | Airbnb search URLs (https://www.airbnb.com/s/ |
checkIn | string | The check-in date (YYYY-MM-DD), with checkOut. Every search, record and price call is sent this stay; every row says the stay it was priced for. Empty: each card's own stay (Airbnb proposes one per card), a listing URL's own check_in, or no price. | |
checkOut | string | The check-out date (YYYY-MM-DD), after checkIn (at most 365 nights). | |
adults | integer | Adults (13+); 1 when empty. Airbnb's own guest rules apply: a stay over a listing's maximum is a free unavailable row with Airbnb's message. | |
children | integer | Children (2–12): they count toward the listing's maximum. | |
infants | integer | Infants (under 2): Airbnb does not count them toward the maximum. | |
pets | integer | Pets: a search with pets lists only places that allow them. | |
priceMin | integer | Airbnb's price filter, lower end, in the run's currency (Airbnb filters on its nightly price with fees). | |
priceMax | integer | Airbnb's price filter, upper end. | |
minBedrooms | integer | Airbnb's bedrooms filter. | |
minBeds | integer | Airbnb's beds filter. | |
minBathrooms | integer | Airbnb's bathrooms filter. | |
roomTypes | array | [] | Airbnb's type-of-place filter; empty = any. |
propertyTypes | array | [] | Airbnb's property-type filter (the catalogue's House, Apartment, Guesthouse and Hotel); empty = any. |
amenities | array | [] | Every amenity picked must be there (Airbnb's own amenity filter, all values in one key). Empty = no amenity filter. |
instantBook | boolean | false | Airbnb's Instant Book filter. |
superhost | boolean | false | Only listings of Superhosts (Airbnb's own key: 12,650 → 4,288 for London, every row checked). |
guestFavorite | boolean | false | Airbnb's Guest favourite filter. |
freeCancellation | boolean | false | Airbnb's free-cancellation filter. |
luxe | boolean | false | Airbnb's Luxe tier. |
boundingBox | string | "" | A map area instead of (or with) a place: four numbers, north-east latitude, north-east longitude, south-west latitude, south-west longitude ("51.51, -0.17, 51.49, -0.20"). Every listing read is inside the box (Airbnb's own map search). With no place, the box is a search of its own. |
minRating | number | Keep listings rated at least this (0–5). A listing with no rating shown (new, or fewer than three reviews) is dropped when this is set. | |
maxRating | number | Keep listings rated at most this. | |
minReviews | integer | Keep listings with at least this many reviews. | |
excludeKeywords | array | [] | Drop a card whose name, heading or subtitle holds one of these words (whole words, any case). |
includeDetails | boolean | true | On (default): each listing's record — the name, the description and its sections, the guests, bedrooms, beds and baths, the amenities, every photo with its room, the house rules with the check-in and check-out times, the six sub-ratings, the host's public fields, the registration number — and the price breakdown for the stay. Off: the search card alone (name, price for the stay, rating, beds, photos, coordinates), a cheaper row. |
includeTaxes | boolean | true | On (default): the price is read from a UK connection, where Airbnb shows the taxes as a line and the total with taxes (the US view shows the total before taxes only; no setting moves it). Off: the US view. Every row says which view it carries (price_view). |
includeCancellationPolicy | boolean | true | On (default): the cancellation policy for the stay (its summary and each refund milestone with its deadline), a hotel's booking requirements, and the check-in and check-out times: one small call more per listing. |
includeHostProfile | boolean | false | One call per host: the host's listing count, languages and verifications on each listing row. |
calendarMonths | integer | 0 | 0 = no calendar. 1–12: each listing's availability per day (available, check-in and check-out days, minimum and maximum nights) for this many months from this month, and the unavailable days per month (booked or blocked: Airbnb does not tell them apart). Airbnb serves 12 months at most. |
datedPriceDays | integer | 0 | 0 = off. 1–60: for each check-in day in the next N days that Airbnb opens for check-in, the price of a stay of datedPriceNights (one small call per date), in dated_prices. |
datedPriceNights | integer | 0 | The stay length of each dated price; 0 = the day's own minimum nights. |
currency | string | "USD" | The currency of every price (an ISO code: USD, EUR, GBP…); every row carries it beside the amounts. |
locale | string | "en" | Airbnb's language for the texts (en, en-GB, de, fr, es…): the titles and descriptions as Airbnb translates them, with the original beside a translated title and description. |
country | US / GB / DE / FR / ES / IT / NL / CA / AU / IE / PT / AT / CH / BE / SE / DK / NO / PL / MX / BR / JP / IN / SG / AE / NZ / ZA | "US" | The country the searches are read from: Airbnb orders a search and resolves a place by the visitor's country (a US and a UK reader share 14–20 of the first 40 London listings). US by default; every row says the country it was read from. |
monitorMode | all / new / changed | "all" | new: a search delivers (and charges) only the listings an earlier run of this memory has not delivered; changed: also a listing whose price for the stay moved (change_type, previous_price, price_change say what moved). A held-back listing is free and takes no room. |
stateStoreName | string | "" | The name of the memory monitorMode keeps between runs; empty = a name made from the searches. |
maxItems | integer | 0 | The most charged rows of the whole run (listings and hosts); 0 = no limit. The form starts at 240. Without a limit a search reads every listing Airbnb lists for it: 1,233 for Moab, UT on our test (Airbnb counted 1,308), more than 20,000 for London. The cap is claimed before a listing is read, so nothing past it is read or charged. |
maxListingsPerSearch | integer | 0 | The most listings each search delivers, in Airbnb's order; 0 = every listing. Airbnb shows 280 listings a view; past that the run reads the search by price bands, each to its own end, every listing once (20,257 for London on our test). |
maxConcurrency | integer | 6 | How many listings are read at once (each on its own connection). 12 read 200 listings in 64 s on our test (6: 82 s); with a run timeout under about 2 minutes keep 6, so a cut run still delivers and ends in time. |
Errors
A run does not fail because of your input. When an input cannot be used — a date that is not a date, an id in the wrong form, two settings that contradict each other — the run ends Succeeded, charges nothing, and says what to change:
- the status message starts with
INPUT REJECTED; - the dataset holds one row,
{"error": true, "code": "…", "message": "…"}, and no results; - the key-value store record
ERRORholds the same object.
From code, check error on the first row before reading results.
A search with no listing is not an error: it gets one free summary row with status no_results (or place_not_found for a word Airbnb cannot place), and the run goes on with the others. A run that ends Failed is a fault on our side, never your input; it charges nothing, and we are alerted.
FAQ
How many listings does a search return?
As many as you ask, up to every listing Airbnb has for the search: Airbnb's page shows 280 a search, and past that the run reads price bands, each to its own end (20,257 distinct London listings in one search on our test; 900 of one price range in 28 seconds, cards only). Airbnb's own count is a per-connection view that moves by thousands between two connections in the same minute, so the summary row shows it beside what was read and never calls a walk complete against it.
Are the prices with taxes and fees?
Fees: Airbnb's logged-out page shows prices with every fee inside the nightly rate ("Prices include all fees"); there is no separate cleaning or service line to read. Taxes: with includeTaxes (the default) the price is read from a UK connection, where Airbnb shows the taxes as a line and the total with taxes (price_view with_taxes); off, the US view's total before taxes. The currency is your currency, on every row.
Why is a listing unavailable?
Airbnb's answer for your stay: the dates are booked, the stay is shorter than the minimum nights, or your guests pass the listing's maximum. The row is free, carries Airbnb's own message in status_detail, and still has the record.
Does it need an Airbnb account, cookies or an API key?
No. Everything is read from Airbnb's public pages' own data, logged out, with a plain HTTP client; nothing of yours is sent to Airbnb. Reviews and host contacts are not read.
Does the country matter?
For a search, yes: Airbnb orders a search and resolves a place by the visitor's country (a US and a UK reader share 14–20 of the first 40 London listings). country picks where searches are read from (US by default); every row says it. The listing's record is the same everywhere; the price view is the UK's with includeTaxes.
Which status is which?
A listing row's status is ok (charged), unavailable (Airbnb will not book the stay: its message in status_detail, the record filled), not_found (Airbnb has no such listing: two connections agree), failed (refused past the retries; read it again later), invalid (the value names no Airbnb search, listing or host), duplicate (another input of the run named it) or not_read (maxItems, the charge limit or the time limit came first). A search row's status is ok, place_not_found, no_results, failed, invalid, duplicate or not_read. Only ok listing and host rows are charged.
Integration
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('hyperbach/airbnb-scraper').call({"locationQueries": ["London"], "checkIn": "2026-12-10", "checkOut": "2026-12-13", "adults": 2, "maxListingsPerSearch": 50});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('hyperbach/airbnb-scraper').call(run_input={'locationQueries': ['London'], 'checkIn': '2026-12-10', 'checkOut': '2026-12-13', 'adults': 2, 'maxListingsPerSearch': 50})items = client.dataset(run['defaultDatasetId']).list_items().items
CLI
$apify call hyperbach/airbnb-scraper --input '{"locationQueries": ["London"], "checkIn": "2026-12-10", "checkOut": "2026-12-13", "adults": 2, "maxListingsPerSearch": 50}'
REST
curl -X POST "https://api.apify.com/v2/acts/hyperbach~airbnb-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H 'Content-Type: application/json' -d '{"locationQueries": ["London"], "checkIn": "2026-12-10", "checkOut": "2026-12-13", "adults": 2, "maxListingsPerSearch": 50}'
Support
This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.