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

Airbnb Listings Scraper

Scrape Airbnb search results by location, dates and guest count: listing ID, name, room type, price, rating, reviews and host. No account or API key.

28 runs on Apify
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

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. 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
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: hotel name, nightly price, currency, rating, review count, provider and direct link.

Ready to run — no setup

Luma Events Scraper iconTravel, Hotels & Events

Luma Events Scraper

Scrape lu.ma events by city, calendar or URL. Get event name, date with timezone, venue, host, ticket price, guest count and event link as JSON.

Ready to run — no setup

Booking.com Reviews Scraper iconReviews & Reputation Data

Booking.com Reviews Scraper

Extract public Booking.com guest reviews: rating, review title, positive and negative text, reviewer name and country.

Ready to run — no setup

Tripadvisor Reviews Scraper iconReviews & Reputation Data

Tripadvisor Reviews Scraper

Extract Tripadvisor reviews for hotels, restaurants and attractions: rating, full text, reviewer, hometown, trip type, owner response and review URL.

Ready to run — no setup

See all Travel, Hotels & Events →

Airbnb Listings Scraper

Collect a bounded set of publicly displayed Airbnb search listings without login. The actor requests the public search page directly, follows Airbnb's ordinary country-domain handoff when present, and extracts the structured listing data returned in that page.

Pricing

$0.40 per 1,000 listings ($0.0004 each), with no run-start fee. Flat rate — no volume tiers, no plan gates — and you are charged only for listings actually returned.

The listing event is charged once per genuine row, and only after that row has been written to the dataset. Samples, diagnostics, duplicates, empty results, and blocked responses are never charged, so a run that finds nothing costs nothing at all.

Behavior

  • Direct HTTP is always tried first. It does not silently use a proxy.
  • Direct HTTP is the only transport. A blocked page returns an uncharged diagnostic and never starts a residential proxy.
  • Each location is capped at 20 output rows; at most five locations may be supplied per run.
  • The overall wall-clock deadline is capped at 180 seconds.
  • A genuine listing is written before its listing result event is charged. Samples, diagnostics, duplicates, empty results, and blocked responses are not charged.
  • Empty input returns one explicit sample row and makes no network request or charge.

Input

FieldTypeDefaultNotes
locationsstring arraynoneCity, region, or destination strings, such as Toronto, Ontario, Canada. Up to five per run. Leave empty for an uncharged sample row.
checkInstringnoneOptional YYYY-MM-DD check-in date.
checkOutstringnoneOptional YYYY-MM-DD check-out date; must be after check-in when both are supplied.
adultsinteger2Adult guest count sent to the public search page, from 1 to 16.
maxItemsPerLocationinteger20Hard cap on genuine listing rows saved for each location, from 1 to 20.
deadlineSecsinteger90Hard wall-clock budget for all locations, from 15 to 180 seconds.

checkIn and checkOut must be supplied together — one without the other is rejected as BAD_INPUT rather than silently ignored. Supplying dates lets Airbnb return date-specific displayed prices instead of generic nightly rates.

Output

Each genuine row is ok: true, recordType: "listing", and carries:

listingId, listingUrl, name, propertyType, rating, reviewCount, price, priceAmount (the numeric value parsed out of the displayed string), currency, priceQualifier (for example total or night), priceAccessibilityLabel, badges[] (such as Guest favourite), spaceDetails[] (the short bed/guest/bath lines Airbnb prints under the title), latitude, longitude, photoUrls[] (up to five public image URLs), plus the search inputs that produced the row — searchLocation, checkIn, checkOut, adults — and source.

Prices are displayed search-page values, not a booking quote or availability guarantee. Fields Airbnb does not publish for a given listing come back as null or an empty array rather than being dropped.

Diagnostics

Problems exit successfully as an uncharged row with ok: false, recordType: "diagnostic", and a code:

CodeMeaning
BAD_INPUTDates supplied incorrectly — only one of check-in/check-out, or checkout on or before check-in.
NOT_FOUNDThe public search page returned 404 for that location.
BLOCKEDAirbnb returned 403/429, a captcha, or an access wall.
NETWORKThe request timed out or the connection failed.
TARGET_ERRORThe page loaded but the embedded listing payload was missing or in an unrecognised shape.
NO_RESULTSThe search resolved but contained no new genuine listings within the configured bounds.
DEADLINEThe wall-clock budget ran out before this location was reached.

One failing location does not stop the others; each is reported on its own row.

Limitations

Airbnb can vary, block, or remove public search data by locale and request context. This actor does not log in, bypass CAPTCHA, collect private data, or promise availability. It returns an uncharged diagnostic when public data is unavailable instead of inventing listings or billing empty output.

Example

{
  "locations": ["Toronto, Ontario, Canada"],
  "checkIn": "2026-08-10",
  "checkOut": "2026-08-12",
  "adults": 2,
  "maxItemsPerLocation": 20,
  "deadlineSecs": 90
}