App Logo
airbnb.com

Search Airbnb listings

TL;DR

Automatically search Airbnb listings on airbnb.com. Each stay comes back as a row with its price, rating, review count, coordinates and room link.

About

Handy when you want Airbnb results as rows you can sort instead of pins on a map. Say you rent out a two-bedroom flat in Alfama and want to price the first weekend of December. Search "Alfama, Lisbon" for 4 to 6 December with air conditioning and a kitchen required (amenity ids 5 and 8), and the flats nearby come back with the price Airbnb shows for those nights, the struck-through price if discounted, bedroom count, rating and coordinates. Sticking to the neighborhood rather than all of Lisbon keeps the list to flats a guest would weigh against yours. Leave the dates out and bedroom counts give way to each flat's next free dates. Prices arrive as text, often a whole phrase, in the language and currency Airbnb serves that browser (a browser in France lands on airbnb.fr, and a currency saved in its Airbnb settings counts too), so pull the number out before averaging.

Input

location required

Destination as a person types it: a city, a region or a neighborhood, e.g. "Paris" or "Lisbon, Portugal".

ib optional

Instant Book only.

page optional

Result page, 18 listings each. Airbnb stops at about 15 pages: maxPage says how many this search has.

Default: 1
pets optional

Number of pets; 1 or more keeps only listings that allow pets.

adults optional

Number of adults. Default 2.

Default: 2
checkin optional

Check-in date, YYYY-MM-DD. With checkout, prices are for those dates.

infants optional
checkout optional

Check-out date, YYYY-MM-DD.

children optional
currency optional

ISO 4217 currency for prices. Default USD.

Default: "USD"
min_beds optional
tier_ids optional

Listing tiers, e.g. Luxe (values from list_search_filters).

amenities optional

Amenity ids, all required (values from list_search_filters, key amenities).

price_max optional

Maximum price, in currency.

price_min optional

Minimum price, in currency.

room_types optional

Room types, e.g. ["Entire home/apt"] or ["Private room"] (values from list_search_filters).

kg_and_tags optional

Property tags, e.g. hotel, beachfront (values from list_search_filters).

min_bedrooms optional
min_bathrooms optional
guest_favorite optional

Guest favorites only.

host_languages optional

Host language codes, e.g. ["fr"] (values from list_search_filters).

bathroom_privacy optional

e.g. "ENSUITE" for a private attached bathroom (values from list_search_filters).

neighborhood_ids optional

Neighborhood ids of this location (values from list_search_filters for the same location).

l2_property_type_ids optional

Property type ids, e.g. house or apartment (values from list_search_filters).

Output

url required
page required
count required

Listings on this page.

listings required
resolvedLocation required

The place Airbnb searched. precision is "city", "state" for a region, "country" when Airbnb could place the name only at country level (the listings then cover the whole country), "building" for an address.

maxPage optional
totalCount optional

Listings the whole search matches, as Airbnb counts them.

Example output

Shape only: placeholder values generated from the output schema, not a real run.

{ "url": "https://example.com/item/123", "page": 1, "count": 3, "maxPage": 3, "listings": [ { "id": "abc123", "lat": "2026-01-15T09:30:00Z", "lng": 3.5, "url": "https://example.com/item/123", "name": "Example", "price": "…", "title": "Example", "badges": [ "…" ], "images": [ "…" ], "rating": 3.5, "details": [ "…" ], "hostType": "…", "imageUrl": "https://example.com/item/123", "subtitle": "…", "ratingLabel": "…", "reviewCount": 3, "availability": [ "…" ], "originalPrice": "…", "priceQualifier": "…" } ], "totalCount": 3, "resolvedLocation": { "name": "Example", "bounds": { "northeast": { "lat": "2026-01-15T09:30:00Z", "lng": 3.5 }, "southwest": { "lat": "2026-01-15T09:30:00Z", "lng": 3.5 } }, "center": { "lat": "2026-01-15T09:30:00Z", "lng": 3.5 }, "precision": "…", "canonicalLocation": "…" } }

FAQ

Search Airbnb stays in a location, with or without dates, with the filters Airbnb offers: guests, price range, room type, bedrooms, beds, bathrooms, Instant Book, guest favorites, amenities, property type, tags, host language and neighborhood (List Airbnb search filters gives their values). Returns one page of up to 18 listings (room id, name, price line, rating and review count, coordinates, badges, room details or next free dates, photos), the total count of matching listings, the number of pages (Airbnb stops at about 15) and the place Airbnb searched. A filter nothing matches returns an empty list. A location Airbnb cannot place fails with an error instead of returning its worldwide default list. Prices are in the currency you ask for (USD by default).
Ask an AI agent connected to Reduck to run reduck/airbnb.com/search_listings, or run it from a terminal with the Reduck CLI: npx @reduck-ai/cli@latest run --script reduck/airbnb.com/search_listings
You do not need one. "Search Airbnb listings" drives the real airbnb.com pages in a browser, so it works whether or not airbnb.com offers an API for this.
Required: location. Optional: ib, page, pets, adults, checkin, infants, checkout, children, currency, min_beds, tier_ids, amenities, price_max, price_min, room_types, kg_and_tags, min_bedrooms, min_bathrooms, guest_favorite, host_languages, bathroom_privacy, neighborhood_ids, l2_property_type_ids.
It returns url, page, count, maxPage, listings, totalCount, resolvedLocation.
No. It only uses pages of airbnb.com that are reachable without signing in.
It only reads. It looks things up on airbnb.com and changes nothing there.
Ask an AI agent connected to Reduck to run reduck/airbnb.com/search_listings, or run it from a terminal with the Reduck CLI: npx @reduck-ai/cli@latest run --script reduck/airbnb.com/search_listings
It is part of Reduck's official curated catalogue.
Airbnb keeps the street address hidden until a booking is confirmed, so no search result carries one, and the closest you can get is searching the neighborhood or city the address sits in, then comparing each result's photos and coordinates with the place you have in mind. Inside Airbnb reports that listing locations in Airbnb's data sit up to about 150 metres from the real address, so the lat and lng point to a block, not a door.
One Airbnb search tops out around 270 stays, 18 a page over roughly 15 pages, and the maxPage field (when Airbnb returns pagination) gives the page count for that particular search. Pages can be fetched in any order, so page 9 does not need pages 1 to 8 first. To cover a whole city, search it neighborhood by neighborhood, one search after another on the same browser rather than in parallel, and dedupe by listing id when you merge, since rankings shift between runs and neighboring areas overlap.
The number after /rooms/ in an Airbnb link is the room id, and Reduck's get_listing script for airbnb.com takes that id and returns the listing's day-by-day calendar with minimum nights, plus its house rules and per-category ratings. To follow prices across an area, rerun the same dated search on the same browser on a schedule and compare each id's price string between runs, which shows which listings entered or left the results and which prices moved.
Airbnb's filter panel shows only about two dozen amenities, but its search URLs accept several hundred numeric amenity codes through amenities[], according to the code list published by custombnb.app. The amenities input takes those same numbers and requires all of them at once, so [5, 51] keeps only stays with air conditioning and self check-in.

Start building not clicking