Airbnb Listings Scraper avatar

Airbnb Listings Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
Airbnb Listings Scraper

Airbnb Listings Scraper

Scrape public Airbnb search results and listing detail pages — titles, full descriptions, prices, ratings, amenities, hosts, and photo galleries. Honest completeness and pagination flags; incomplete rows are never billed.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

rainminer

rainminer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Share

Airbnb

What does Airbnb Listings Scraper do?

Airbnb Listings Scraper extracts public vacation-rental data from Airbnb search and listing detail pages. Paste a homes search URL, a city/location query, and/or direct /rooms/ links, and get structured rows with full descriptions, prices, ratings, amenities, host signals, coordinates, and photo galleries.

Input and output field names align with the popular Store Actor tri_angle/airbnb-scraper so existing workflows can switch with minimal friction — while this Actor keeps complete descriptions and honest completeness flags.

Use it for short-term rental market research, competitive pricing, inventory monitoring, or feeding listing datasets into spreadsheets, BI tools, and internal apps. Export JSON, CSV, Excel, HTML, or pull results through the Apify API.

Why this scraper?

Popular Airbnb Actors often return search cards without descriptions, break after layout/API churn, or bill for empty/partial rows. This Actor is built around a clear wedge:

  • Opens each listing detail page to capture the complete public description (not just the search subtitle).
  • Sets honest flags: hasDescription, descriptionFetchFailed, isComplete, hasMoreSearchPages, paginationComplete.
  • Never bills incomplete rows — only listings with a non-empty description are charged when pay-per-event is enabled.
  • Uses Airbnb’s public embedded page data (no login, no user cookies).
  • Accepts the same core inputs as tri_angle/airbnb-scraper (locationQueries, maxResults, dates, guests, price filters, locale, currency).

What Airbnb data can you extract?

FieldDescription
id / listingId / urlPublic listing id and canonical /rooms/ URL
androidLink / iosLinkDeep links
title, seoTitle, sharingConfigTitle, metaDescriptionTitles and SEO snippets when exposed
description / htmlDescription / descriptionHtmlFull public description (plain + HTML)
roomType / propertyType / homeTier / personCapacityStay type and capacity
location / city / coordinates / latitude / longitudeLocation strings and map coordinates
subDescriptionOverview chips (guests / beds / baths)
amenitiesStructured amenity groups (title + values[])
amenityTitlesFlat list of available amenity titles
host / hostName / hostIsSuperhost / hostIsVerifiedPublic host signals
rating / ratingAverage / reviewsCountGuest rating summary (+ category scores when present)
price / priceLabel / checkIn / checkOutPrice/date context
thumbnail / imageUrl / imageUrls / imagesPrimary photo + gallery (absolute https URLs)
highlights, houseRules, cancellationPoliciesExtra listing context when publicly present
hasDescription, isComplete, descriptionFetchFailedCompleteness flags
searchPage, hasMoreSearchPages, paginationCompleteHonest pagination context
timestamp / scrapedAtScrape time

How to scrape Airbnb listings

  1. Open the Actor input tab.
  2. Add location queries (e.g. Paris) and/or Airbnb homes search / /rooms/{id} URLs.
  3. Optionally set check-in/out, guests, price range, locale, and currency — same names as tri_angle/airbnb-scraper.
  4. Set maxItems (or maxResults) to control dataset rows per start URL / location query. Incomplete rows count toward this limit but are never billed.
  5. Run the Actor and download the dataset.

The Actor only extracts public listing data. It does not require Airbnb account credentials or session cookies.

How much does scraping Airbnb cost?

When pay-per-event monetization is enabled, you pay once per complete listing saved with a real description. Incomplete rows (blocked/missing description) may appear with flags for debugging but are not billed.

Apify adds scheduling, API access, dataset storage, webhooks, and integrations so Airbnb monitoring can run automatically.

Input example

{
"locationQueries": ["Paris"],
"startUrls": [{ "url": "https://www.airbnb.com/s/Paris--France/homes" }],
"maxItems": 5,
"checkIn": "2026-09-01",
"checkOut": "2026-09-05",
"adults": 2,
"currency": "USD",
"locale": "en-US",
"proxyConfiguration": { "useApifyProxy": false }
}

maxResults is accepted as an alias of maxItems. enrichUserProfiles is accepted for compatibility; host fields are taken from the public listing page (no separate profile crawl).

Output example

{
"id": "1729686443151285482",
"listingId": "1729686443151285482",
"url": "https://www.airbnb.com/rooms/1729686443151285482",
"androidLink": "airbnb://rooms/1729686443151285482",
"iosLink": "airbnb://rooms/1729686443151285482",
"title": "Secret terrace in the heart of historic Marais",
"description": "Located in charming Le Marais, inside an authentic medieval building...",
"htmlDescription": "Located in charming Le Marais...",
"roomType": "Entire home/apt",
"propertyType": "Entire rental unit in Paris, France",
"location": "Paris, Île-de-France, France",
"city": "Paris",
"coordinates": { "latitude": 48.8559, "longitude": 2.3569 },
"latitude": 48.8559,
"longitude": 2.3569,
"personCapacity": 2,
"bedrooms": 1,
"beds": 1,
"baths": 1,
"subDescription": {
"title": "Entire rental unit in Paris, France",
"items": ["2 guests", "1 bedroom", "1 bed", "1 bath"]
},
"amenities": [
{
"title": null,
"values": [
{
"title": "Kitchen",
"subtitle": null,
"icon": null,
"available": true
}
]
}
],
"amenityTitles": ["Kitchen", "Wifi", "Washer"],
"host": { "name": "Noa", "isSuperhost": false, "isVerified": true },
"rating": { "guestSatisfaction": 5, "reviewsCount": 1 },
"price": {
"label": "$482 for 5 nights",
"qualifier": "for 5 nights",
"price": "$482"
},
"priceLabel": "$482 for 5 nights",
"thumbnail": "https://a0.muscache.com/im/pictures/...",
"imageUrl": "https://a0.muscache.com/im/pictures/...",
"imageUrls": ["https://a0.muscache.com/im/pictures/..."],
"images": [
{
"imageUrl": "https://a0.muscache.com/im/pictures/...",
"caption": null,
"orientation": null
}
],
"hasDescription": true,
"descriptionFetchFailed": false,
"isComplete": true,
"searchPage": 1,
"hasMoreSearchPages": true,
"paginationComplete": false,
"timestamp": "2026-08-08T10:00:00.000Z",
"scrapedAt": "2026-08-08T10:00:00.000Z"
}

FAQ

This Actor extracts publicly visible listing pages only. Make sure your use case has a lawful basis and respects Airbnb’s terms and applicable regulations.

Does this Actor need login cookies?

No. It scrapes public search and listing pages without account credentials.

Why are some rows marked incomplete?

If a detail page is blocked or missing embedded description data, the Actor may still export the search-card fields with descriptionFetchFailed: true and isComplete: false. Those rows are not billed.

Can I scrape cities outside the US site?

Yes. Use the Airbnb domain and search URL for your market (for example airbnb.co.uk, airbnb.fr). Filters and dates in the URL are kept. Location queries default to airbnb.com with your chosen locale / currency.

How does this compare to tri_angle/airbnb-scraper?

Core inputs (locationQueries, maxResults, dates, guests, price filters, locale, currency) and the main output keys (id, url, title, description, htmlDescription, coordinates, images, amenities, price, rating, host, …) are aligned. This Actor additionally returns full descriptions more reliably, flat amenityTitles, imageUrl/imageUrls, and explicit completeness/pagination flags — and never bills hollow rows.

Image Credit

Image credit: Airbnb