Airbnb Scraper - Listings, Reviews, Prices, Calendar & Hosts avatar

Airbnb Scraper - Listings, Reviews, Prices, Calendar & Hosts

Pricing

from $1.00 / 1,000 listing scrapeds

Go to Apify Store
Airbnb Scraper - Listings, Reviews, Prices, Calendar & Hosts

Airbnb Scraper - Listings, Reviews, Prices, Calendar & Hosts

Scrape Airbnb at scale — listings by URL or map area, full room details with prices, reviews, calendar availability, host portfolios & Experiences. Search by URL, map bounds, room or host. Pay per delivered record — empty and failed runs are never charged. For STR analytics, pricing & research, MCP

Pricing

from $1.00 / 1,000 listing scrapeds

Rating

0.0

(0)

Developer

Pika Choo

Pika Choo

Maintained by Community

Actor stats

1

Bookmarked

37

Total users

10

Monthly active users

10 days ago

Last modified

Share

Airbnb Scraper — Listings, Prices, Reviews, Calendar & Hosts

Scrape Airbnb listings, nightly prices, reviews, calendar availability, host portfolios and Experiences for $0.001 per record. Search by Airbnb URL, map bounding box, room URL or host ID and get flat, structured JSON with no API key, no browser and no per-run minimum. Empty and failed runs cost nothing.

Built for short-term rental (STR) analytics, dynamic pricing engines, property underwriting and travel market research. Works from the Apify Console, the REST API, the Python and JavaScript clients, and as a tool for AI agents over MCP.


⚡ Why this Airbnb scraper

  • $0.001 per record, every mode. Listings, room details, reviews, calendar months, host portfolio items and Experiences all bill at the same flat rate. 1,000 listings cost about one dollar.
  • No charge for empty or failed runs. You pay only for rows that actually land in the dataset.
  • Five ways in. Search URL, map bounding box, room URL, host ID or Experience place ID. Mix and match across runs.
  • Seven modes, one actor. Listings, room details, reviews, calendar, host portfolios and Experiences without juggling separate tools.
  • Clean, flat output. One record per row with a record_type tag, ready for spreadsheets, BI dashboards, SQL or LLM and RAG pipelines.
  • Residential proxy on by default. Airbnb fingerprints datacenter IPs hard; the default residential proxy keeps results flowing, with automatic IP rotation and retries on room pages.

👥 Who uses this

  • STR analytics and revenue managers tracking supply, nightly rates and occupancy proxies in a market.
  • Dynamic pricing tools feeding live comparable listings into a pricing engine.
  • Property investors and underwriters comping a neighborhood before buying or converting a unit.
  • Travel agencies and relocation services surfacing options for clients in seconds.
  • Market researchers and journalists measuring shifts in supply, prices, Superhost share and host concentration.
  • AI agents that need live Airbnb data as a tool call rather than a browser session.

📦 What you get

Every record carries a record_type field: listing, room, review, calendar, host_listing, experience, plus info and error rows for diagnostics. The main fields per record type:

FieldTypePresent onMeaning
room_id, room_urlstringlisting, room, calendar, host_listingAirbnb room ID and canonical airbnb.com/rooms/<id> URL
title, namestringlisting, room, host_listingListing title and property name
room_type, categorystringlisting, room, host_listingEntire home / Private room / Shared room / Hotel room, plus Airbnb category
person_capacity, bedrooms, beds, bathroomsnumberlisting, room, host_listingCapacity and layout
rating, review_countnumberlisting, room, review, host_listingAverage rating and total reviews
is_superhost, is_guest_favorite, free_cancellationbooleanlisting, room, host_listingHost and listing badges
price_per_night, price_per_night_original, price_totalnumberlisting, room, host_listingDiscounted nightly price, original nightly price, total for the requested stay
price_currency, price_currency_symbolstringroom / listingISO currency code (room) or symbol (listing)
latitude, longitudenumberlisting, room, host_listingCoordinates for mapping and geofencing
host_id, host_name, host_urlstringroom, host_listingHost ID, display name and profile URL
amenities, images, descriptionarray / stringroomFull amenity list, photo URLs and listing description
reviews, calendararrayroom, calendarEmbedded reviews and month-by-month availability
review_id, comment, language, created_at, reviewer_name, reviewer_locationmixedreviewOne review per row
place_id, experiencestring / objectexperienceExperience place ID and the raw experience payload
scraped_atstringallISO 8601 UTC timestamp

Fields that Airbnb does not return for a given listing are omitted rather than filled with placeholders, so downstream schemas stay honest.


📥 Input and modes

Pick a mode, then fill in the inputs for that mode. Every field on the form has inline help.

ModeRequiredOptional
search_by_urlsearchUrlcurrency, language, maxResults
search_by_bboxneLat, neLng, swLat, swLngcheckIn, checkOut, priceMin, priceMax, placeType, amenities, freeCancellation, zoom, currency, language, maxResults
room_detailsroomUrlscheckIn, checkOut, adults, currency, language
room_reviewsroomUrlslanguage, maxResults
room_calendarroomUrlsnone
host_listingshostIdcurrency, language
experience_searchexperiencePlaceIdlanguage

Search by URL is the fastest way to reproduce exactly what you see on airbnb.com: apply dates, price, amenity and map filters in your browser, copy the URL and paste it in. Location segments such as airbnb.com/s/Paris--France/homes or New-York--NY--United-States are honored.

Search by bounding box takes north-east and south-west coordinates plus optional dates, price range, place type, amenity IDs and a free-cancellation flag. Set both checkIn and checkOut if you want nightly prices back.

Room details accepts up to 100 room URLs per run, fetches them in parallel and returns the full listing page: price quote for your dates and guest count, amenities, photos, host, description, embedded reviews and calendar. When Airbnb reports "those dates are not available" the listing still ships with price set to null and a price_unavailable_reason, so you keep host, rating, amenities and images.

Room reviews and room calendar target the same URLs and return one row per review, or one row per room with a month-by-month calendar array.

Host listings takes the numeric host ID from airbnb.com/users/show/<id> and returns every active listing in that host's portfolio.

Experiences searches Airbnb Experiences for a place ID.

Example input for a map search:

{
"mode": "search_by_bbox",
"neLat": 38.78,
"neLng": -9.10,
"swLat": 38.69,
"swLng": -9.23,
"checkIn": "2026-06-10",
"checkOut": "2026-06-15",
"placeType": "Entire home/apt",
"currency": "EUR",
"maxResults": 500
}

📤 Sample output

A listing row from a search:

{
"record_type": "listing",
"room_id": "12345678",
"room_url": "https://www.airbnb.com/rooms/12345678",
"title": "Bright 2BR apartment near Alfama",
"name": "Apartment in Lisbon",
"room_type": "Entire home/apt",
"person_capacity": 4,
"bedrooms": 2,
"beds": 2,
"bathrooms": 1,
"rating": 4.89,
"review_count": 212,
"is_superhost": true,
"is_guest_favorite": true,
"free_cancellation": false,
"price_per_night": 138,
"price_per_night_original": 155,
"price_total": 690,
"price_currency_symbol": "€",
"latitude": 38.7139,
"longitude": -9.1334,
"images": ["https://a0.muscache.com/im/pictures/....jpg"],
"scraped_at": "2026-08-29T05:02:22+00:00"
}

A review row:

{
"record_type": "review",
"room_url": "https://www.airbnb.com/rooms/12345678",
"review_id": "987654321",
"rating": 5,
"comment": "Great location and a very responsive host.",
"language": "en",
"created_at": "2026-05-02T10:14:00Z",
"reviewer_name": "Anna",
"reviewer_location": "Berlin, Germany",
"scraped_at": "2026-08-29T05:02:22+00:00"
}

Use the dataset tabs (Overview, Hosts, Full Data) in the Console to browse, or export as JSON, CSV, Excel, XML or RSS from the dataset.


💵 Pricing — pay only for delivered records

EventPriceWhen
listing-scraped$0.001per search result (URL or map search)
room-details-scraped$0.001per full room detail page
review-scraped$0.001per review row
calendar-month-scraped$0.001per calendar month returned
host-listing-scraped$0.001per host portfolio item
experience-scraped$0.001per Experience result

Worked example. Scraping 1,000 listings from a Lisbon search URL bills 1,000 × $0.001 = $1.00. Pulling full room details for 200 of them adds 200 × $0.001 = $0.20. A run that returns zero rows bills zero record events. The only fixed platform cost is the Apify actor start fee of $0.00005 per GB of memory, about $0.0002 per run at the default 4 GB, plus $0.00001 per stored dataset item, so the 1,000-listing run lands at roughly $1.01 all in.

Use maxResults to cap large searches and avoid surprises. Apify's free plan credit is enough for several thousand records per month.


❓ FAQ

Does Airbnb have an official API?

Airbnb has no public data API. The partner API is restricted to approved property management software. This actor reads the same public listing, search, review and calendar pages a visitor sees and turns them into structured JSON, so you get Airbnb data without an API key or a partner agreement.

How much does it cost to scrape 1,000 Airbnb listings?

$1.00 in record events plus about a cent of platform overhead. 10,000 listings cost about $10. Room details, reviews, calendar months and host listings bill at the same $0.001 per record.

Can I get Airbnb prices for specific dates?

Yes. In search_by_bbox set checkIn and checkOut to receive nightly and total prices in your chosen currency. In room_details set the dates and adults to get a live quote for that exact stay. search_by_url picks dates up from the URL you paste.

How fast is it and what are the limits?

Searches paginate until the platform stops returning results or maxResults is reached (cap 5,000). Room details accept up to 100 URLs per run and fetch 8 pages in parallel with up to 5 retries and a fresh residential IP per retry. A 100-listing search typically finishes in well under a minute.

Scraping publicly available data is generally lawful in most jurisdictions, but you are responsible for how you use it. Do not collect personal data beyond what you need, respect Airbnb's terms and local privacy law (GDPR, CCPA), and consult a lawyer for commercial use at scale.

Which output formats can I export?

JSON, CSV, Excel, XML, HTML table and RSS, straight from the dataset in the Console or through the API. Every row is flat, so CSV opens cleanly in Excel or Google Sheets.

How does this compare to other Airbnb scrapers?

Most alternatives charge per result with different prices per mode, or bill by compute time so a blocked run still costs money. This actor bills $0.001 for every record type, bills nothing for empty or failed runs, and handles listings, room details, reviews, calendar, host portfolios and Experiences in one tool.

Why did some room URLs come back as error rows?

Airbnb applies aggressive anti-bot checks to room pages. When a page is blocked after all retries the actor returns the successful rows, an info row summarizing how many succeeded, and one error row per failed URL. Retry the failed URLs a few minutes later; failed rows are not billed.


🤖 Use with AI agents and MCP

Add the actor as a tool in Claude, Cursor, VS Code, or any MCP-compatible agent through the Apify MCP server:

https://mcp.apify.com/?tools=fetch-actor-details,openclawai/airbnb-scraper

Your agent can then call openclawai/airbnb-scraper with the same input JSON shown above and read the dataset back as tool output. A step-by-step guide with prompts and agent recipes is at datapika.com/actors/airbnb-scraper.


🔌 Integrations

  • REST API: POST https://api.apify.com/v2/acts/openclawai~airbnb-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN with the input JSON as the body.
  • Python: apify-client package, client.actor("openclawai/airbnb-scraper").call(run_input={...}).
  • JavaScript / TypeScript: apify-client package, client.actor("openclawai/airbnb-scraper").call({...}).
  • No-code: Apify integrations for Zapier, Make, n8n, Google Sheets, Slack and webhooks work out of the box.
  • Scheduling: run on a cron schedule from the Console to track prices and availability over time.

⚠️ Notes

  • For bounding-box search to return prices, set both checkIn and checkOut.
  • Airbnb rate-limits datacenter IPs aggressively. Leave the default residential proxy on.
  • Amenity IDs for search_by_bbox are the numeric values in Airbnb search URLs (amenities%5B%5D=4). Apply the amenity filter on airbnb.com and read the IDs from the URL.
  • Use maxResults to cap large queries and avoid billing surprises.

This actor collects only publicly visible information and is intended for market research, analytics and personal use. It does not bypass logins or access private data. You are responsible for complying with Airbnb's terms of service and with applicable data protection laws when storing or redistributing scraped data, especially reviewer names and host details.


📝 Changelog

Recent fixes: search by URL honors the location in the URL path, room details retry up to 5 times with a fresh IP and detect challenge pages, batch runs return partial results plus an info summary instead of failing, and unavailable dates return the listing with price_unavailable_reason instead of an error. Full version history ships with the actor as CHANGELOG.md.