Airbnb Scraper avatar

Airbnb Scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Airbnb Scraper

Airbnb Scraper

Scrape public Airbnb room URLs for property details, ratings, amenities, house rules, photos, host details, and dated booking prices.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrape public Airbnb room pages from direct listing URLs and export Airbnb property data to CSV, JSON, or a spreadsheet. This Airbnb data extraction service is a practical API alternative for collecting accommodation details, ratings, amenities, photos, house rules, and dated booking prices from rooms you already know.

Each room produces one record. Provide a list of URLs, optionally add travel dates and guest counts, and set a maximum number of results. The output keeps stable top-level field names so you can compare repeated runs or join records by roomId.

What data can you extract from Airbnb?

The dataset contains one row per successfully read public room page. Arrays such as amenities and house rules retain their natural groups; the main identifiers, ratings, location, host summary, and booking fields remain at the top level.

FieldDescriptionExample
roomIdNumeric listing identifier, stored as text to preserve long IDs53997462
urlCanonical public room linkhttps://www.airbnb.com/rooms/53997462
titleListing headlineCozy apartment at historical center
descriptionPublic listing description with markup removedExperience the urban city life...
propertyTypeDisplayed accommodation typeEntire condo
roomTypeUnderlying room categoryENTIRE_HOME
personCapacityMaximum guest count reported for the room3
overviewShort property summaryEntire condo in Thessaloniki, Greece
overviewItemsGuest, bedroom, bed, and bath summary labels["3 guests", "1 bedroom"]
locationPublic city or area labelThessaloniki, Greece
latitudePublic listing latitude, when shown40.6298
longitudePublic listing longitude, when shown22.9497
isExactLocationWhether the listing marks its map position exacttrue
ratingOverall guest rating4.95
reviewsCountNumber of guest reviews75
ratingAccuracyAccuracy rating4.89
ratingCheckInCheck-in rating4.97
ratingCleanlinessCleanliness rating4.92
ratingCommunicationCommunication rating5.0
ratingLocationLocation rating4.99
ratingValueValue rating4.93
isGuestFavoriteWhether a guest favorite designation is showntrue
hostIdPublic host profile identifier437479978
hostNamePublic host display nameA name shown on the room page
hostProfileUrlPublic host profile linkA profile URL
hostPhotoUrlPublic host profile image linkAn image URL
hostIsSuperhostWhether the host is marked as a Superhosttrue
hostIsVerifiedWhether a verified marker is showntrue
hostYearsHostingCompleted years hosting, when available4
hostResponseRateDisplayed response-rate textResponse rate: 100%
hostResponseTimeDisplayed response-time textResponds within an hour
amenitiesGroups of amenities; each value has title, subtitle, icon, and availabilityBathroom → Hair dryer
highlightsListing highlights with title, subtitle, icon, and typeSelf check-in
houseRulesGroups of check-in, stay, and checkout rulesNo smoking
safetyAndPropertyGroups of public safety and property detailsSmoke alarm installed
sleepingArrangementsRooms and their bed descriptionsBedroom → 1 double bed
imagesListing image URLs with any available captionsImage URL and caption
imageUrlPrimary listing image linkAn image URL
checkInRequested arrival date2026-11-10
checkOutRequested departure date2026-11-13
localeRequested output languageen
currencyRequested booking currencyUSD
availableAvailability for supplied dates, when returnedtrue
priceDisplayBooking total with its qualifier$216 for 3 nights
priceTotalDisplayed booking total as text$216
priceDetailsDisplayed booking price line items3 nights x $71.76

priceTotal is a display string. It preserves the currency symbol and formatting visible for the requested currency rather than guessing a numeric value. priceDetails can contain nightly charges or other lines that the booking section exposes. A missing value means that the room page or booking response did not show that field; it does not mean zero.

How to scrape Airbnb

  1. Copy direct public room URLs. A room link has the form https://www.airbnb.com/rooms/53997462. You can paste several links into startUrls or supply numeric room IDs.
  2. Add both checkIn and checkOut if you need a price or availability for a specific stay. Set guest counts and currency to match your comparison.
  3. Set maxItems to cap the dataset. Leaving it at zero processes every distinct valid room in the input list.
  4. Run the actor, then open the dataset to preview records or download them in JSON, CSV, or spreadsheet form.

The actor deduplicates room IDs before making requests. A repeated URL, a URL containing tracking parameters, and the same numeric ID all refer to one room record. Invalid links are skipped. A room removed from public view is logged as a failed room while the remaining URLs continue.

Input

ParameterTypeDefaultDescription
startUrlsList of URLs or IDsRequiredPublic room links or numeric room IDs.
checkInDateEmptyArrival date in YYYY-MM-DD format. Requires checkOut.
checkOutDateEmptyDeparture date after checkIn. Requires checkIn.
adultsInteger2Adult guests for dated booking details.
childrenInteger0Child guests for dated booking details.
infantsInteger0Infant guests for dated booking details.
petsInteger0Pets for dated booking details.
localeTextenLanguage for listing text; examples include en, fr, de, es, and tr.
currencyTextUSDThree-letter booking currency code such as USD, EUR, GBP, or TRY.
maxItemsInteger0Maximum records to save; zero means no total cap.
proxyConfigurationObjectConfigured proxyConnection settings for public room requests.

Example input for a three-night stay:

{
"startUrls": [
{ "url": "https://www.airbnb.com/rooms/53997462" },
{ "url": "https://www.airbnb.com/rooms/668146487515150072" }
],
"checkIn": "2026-11-10",
"checkOut": "2026-11-13",
"adults": 2,
"locale": "en",
"currency": "USD",
"maxItems": 2
}

Use dates in the future for live booking comparisons. The same room may show a different total with a different stay length, guest mix, or currency. A price can change between runs as availability and booking terms change.

Output example

This is a shortened record from a successful dated run. Longer arrays and the full public description are omitted for readability; the shown values come from the collected item.

{
"roomId": "53997462",
"url": "https://www.airbnb.com/rooms/53997462",
"title": "Cozy apartment at historical center",
"propertyType": "Entire condo",
"roomType": "ENTIRE_HOME",
"personCapacity": 3,
"location": "Thessaloniki, Greece",
"latitude": 40.6298,
"longitude": 22.9497,
"rating": 4.95,
"reviewsCount": 75,
"hostIsSuperhost": true,
"checkIn": "2026-11-10",
"checkOut": "2026-11-13",
"currency": "USD",
"available": true,
"priceDisplay": "$216 for 3 nights",
"priceTotal": "$216",
"priceDetails": [
{ "description": "3 nights x $71.76", "price": "$215.28" }
]
}

The total displayed in the booking section may be rounded while individual line items keep cents. Treat the displayed total as the amount presented for that stay, and retain line items when auditing a quote. Price fields can be empty even when the listing details are complete.

Use cases

  • Accommodation comparison: Compare known rooms by capacity, property type, rating, amenity coverage, and a dated displayed total. The stable room ID makes repeated comparisons straightforward.
  • Hospitality research: Measure which amenities and house rules appear across a selected portfolio of public listings in a city or neighborhood. Supply the URLs from your own list.
  • Travel planning: Review sleeping arrangements, guest capacity, check-in rules, and safety details before building a shortlist for a group trip.
  • Listing monitoring: Run the same URL list on a schedule and compare titles, descriptions, ratings, review counts, and photos over time.
  • Pricing research: Hold dates, guest count, and currency constant across a group of rooms, then inspect displayed totals and missing quotes separately.
  • Quality checks: Confirm that a curated directory still points to public rooms and that core fields such as title, property type, and image are present.

This actor starts from direct room URLs. It does not discover rooms from a city name. If your workflow begins with a destination, gather the room URLs first, then pass that list as startUrls.

How much does it cost to scrape Airbnb?

The configured result price is $0.001 per saved room, or $1 per 1,000 saved rooms. A 35-room dataset corresponds to $0.035 in result charges. A 500-room dataset corresponds to $0.50, and a 5,000-room dataset corresponds to $5.00. Platform usage is included in the result price for a priced run; actual private test usage can appear separately in run details.

You are charged for saved results, not for invalid input URLs that produce no row. A room that fails to load is logged and skipped. Setting maxItems keeps large input lists within a chosen output count. Dated runs make an extra booking request for each room and can take longer, but the per-result price remains the same.

The price above is the current configuration. Check the run screen before a large production job because published pricing can be updated. The output count is the simplest way to estimate result charges: multiply saved rooms by $0.001.

Tips for best results

Provide direct room links, preferably from a recent list. Rooms can be removed, paused, or made private after a URL was collected. A current list reduces failed requests and makes any missing row easier to investigate.

Use a consistent date pair for comparisons. Without dates, the actor focuses on stable listing details and leaves price and availability fields empty. With dates, it asks the booking section for that stay. A three-night stay and a seven-night stay may use different rates or discounts. Guest counts can also change eligibility or price.

Choose one currency across a run. A visible amount such as $216 is a formatted string, and the same symbol can be used by several currencies. Keep the currency field alongside priceTotal when combining datasets. Do not compare price strings until you have separated currency and stay length.

Review available together with priceTotal. In a 35-room dated validation run, 9 rooms returned displayed totals. The other rooms still produced complete listing records, but did not yield a booking total for those dates. A blank total must not be interpreted as a free stay.

Use maxItems when testing a large URL list. Start with a few known rooms to confirm dates and currency, then expand the list. If you run the same IDs repeatedly, join snapshots on roomId and retain your collection timestamp outside the row or in your downstream store.

Limits

Only publicly accessible room pages are supported. The actor does not sign in, bypass a private listing, or collect private account information. It does not return individual review text, a full availability calendar, or host profile enrichment. Host fields are the public summary shown on the room page.

A room page can omit an amenity, category rating, exact map position, host response statistic, photo caption, or booking total. The output uses an empty value where the public page does not provide one. Ratings and review counts are snapshots, so they may differ on a later run.

Price and availability depend on a separate booking section. A requested room may be unavailable for the dates, may not offer a quote to an anonymous visitor, or may be awaiting a site-side update. The price query is made only when both dates are set. No historical rate is inferred from a current quote.

The site can redirect a visitor to a regional domain and can change the shape of its embedded listing data or booking query. The actor follows a regional handoff when it can read the same public room there. If the page layout changes, extraction may need an update. The actor logs per-room failures and continues with other URLs rather than substituting incomplete placeholder rows.

The dataset is capped by your maxItems setting and the URLs you supply. There is no search pagination or destination slicing because the input is a known set of rooms. A single URL yields at most one row. Long numeric IDs are kept as text to prevent loss of digits in spreadsheet software.

Use with automated workflows

The input and output fields are descriptive enough to be used from a scheduler, script, or connected workflow. Two example requests are:

  1. “Collect these 40 room URLs, use November 10–13 with two adults in USD, and give me a table of title, capacity, rating, amenities, and displayed total.”
  2. “Run my saved room list every week and flag rooms whose review count, title, house rules, or main image changed.”

For a comparison, keep both the room ID and the requested dates with each result. For monitoring, save each run separately before comparing snapshots. Missing prices should be tracked as missing values; they may reflect availability or a booking response that omitted a quote.

FAQ

The actor reads public room information. Whether your use is permitted depends on applicable law, the site's terms, and how you handle the resulting data. Respect privacy and data-protection rules, especially when working with public host profile details. Do not use this actor to collect private or login-only information.

Do I need to configure a proxy?

The default input uses the configured proxy settings. Most users can leave them as provided. If a room fails because the site redirects or blocks a connection, inspect the run log and retry with an appropriate proxy configuration.

How fast is a run?

Speed varies with room count, page response time, regional redirects, and whether you requested booking prices. A validation run of 35 rooms with dates completed in about two minutes. Smaller lists are usually quicker, while blocked or slow pages can take longer.

Can I schedule or monitor repeated runs?

Yes. Save a stable input list and schedule it at your preferred interval. Compare successive datasets by roomId. Watch the run status and the number of saved rooms; a sudden drop can indicate removed listings, connection issues, or a site change.

Can I export to a spreadsheet?

Yes. Download the dataset in CSV or spreadsheet format, or send records to a connected spreadsheet workflow. Arrays such as amenities and images may be serialized in a single cell, so JSON is preferable when you need every nested value.

Why is a field empty?

The public page or booking response did not provide it for that room and request. Category ratings are absent on some listings. Prices can be unavailable without dates or for a stay that cannot be quoted. Inspect the room directly if a particular value is critical.

Can I search a city with this actor?

No. Supply direct room URLs or room IDs. This keeps one input room mapped to at most one output row and avoids unexpected search ranking, pagination, or geographic filtering.

Integrations

Use the dataset through its API, a webhook, a scheduler, or a connected automation service. You can send room records to a database, dashboard, spreadsheet, or monitoring process. Keep dates and currency alongside booking totals, and use roomId as the stable key for joins and updates.

Support

Open an issue on the Issues tab; we reply within 24h and add fields on request. Include a public room URL, the relevant input options, and the field you expected so the issue can be reproduced.