Airbnb Scraper
Airbnb listings for any city and dates: prices, discounts, ratings, rooms and coordinates. From $0.003 / listing, pay per result, no browser, no login.
▶ Run it on Apify · Python example · All scrapers
Get Airbnb search results as clean JSON, CSV or Excel: total price for your dates, original price and discounts, nightly rate, rating and number of reviews, bedrooms and beds, Guest favorite badge, GPS coordinates and photos — for any city, neighborhood or Airbnb search URL. No headless browser, so 100 listings take about 10 seconds.
✅ Real prices for your dates: total, original price, nightly rate, full breakdown (discounts, taxes) ✅ Discount detection: early-booking, weekly, special offers — as negative lines ✅ Rating and review count, Guest favorite badge, new listings flagged ✅ Bedrooms, beds and baths ✅ Latitude / longitude for maps and distance analysis ✅ Several cities per run, or paste your own airbnb.com/s/… search URLs with filters ✅ Filters: dates, guests, type of place, price range, bedrooms, currency ✅ No host personal data collected — listings only
🚀 Why this Airbnb scraper is different
| This Actor | Typical Airbnb scrapers | |
|---|---|---|
| Speed | ~100 listings in 10 s, no browser | Minutes with headless Chrome |
| Price | $0.003 per listing | $0.004+ per listing |
| Price breakdown and discounts | Yes | Total only |
| Your own search URLs | Yes | Rarely |
| Past dates in saved tasks | Moved automatically, never fails | Run fails |
| Host personal data | Never collected | Often collected |
💡 Use cases
- Short-term rental investors: compare nightly rates, occupancy signals (reviews) and discounts by neighborhood before buying.
- Hosts & property managers: price your listing against competitors for the same dates; track their discounts.
- Market research: average price per night, share of Guest favorites, supply per city.
- Travel & deal sites: find the best-rated stays under a budget.
- Data science: map listings with coordinates, analyse seasonality by scheduling runs.
🛠️ How to use it (3 steps)
- Enter cities (“Lisbon, Portugal”) or paste Airbnb search URLs.
- Set dates, guests and optional filters (type, price, bedrooms).
- Click Start and download listings as CSV, Excel or JSON, or use the API.
📥 Input example
{
"locations": ["Lisbon, Portugal", "Barcelona, Spain", "https://www.airbnb.com/s/Porto--Portugal/homes"],
"checkIn": "2026-12-10",
"checkOut": "2026-12-14",
"adults": 2,
"roomType": "entire",
"currency": "EUR",
"maxListingsPerLocation": 100
}
📤 Output example (real listing)
{
"listingId": "41867634",
"url": "https://www.airbnb.com/rooms/41867634?check_in=2026-12-10&check_out=2026-12-14",
"location": "Lisbon, Portugal",
"name": "Perfect 1 bedroom with Terrace and AC",
"title": "Apartment in Lisbon",
"latitude": 38.7129,
"longitude": -9.1426,
"rating": 4.84,
"reviewsCount": 315,
"nights": 4,
"currency": "EUR",
"totalPrice": 420,
"originalTotalPrice": 508,
"pricePerNight": 126.95,
"priceLabel": "€420 for 4 nights, originally €508",
"priceDetails": [
{ "label": "4 nights x €126.95", "amount": 507.8 },
{ "label": "Early booking discount", "amount": -88.56 },
{ "label": "Price after discount", "amount": 419.24 }
],
"rooms": ["1 bedroom", "1 king bed", "1 bath"],
"badges": ["Guest favorite"],
"isGuestFavorite": true,
"photos": ["https://a0.muscache.com/im/pictures/cfc0b3ad-0700-464f-8d08-17166a112daf.jpg"]
}
pricePerNight is Airbnb’s nightly rate before discounts and taxes; totalPrice is what the guest pays for the stay.
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
locations |
array | ["Lisbon, Portugal"] |
Cities, neighborhoods or regions (“Lisbon, Portugal”) or full airbnb.com/s/… search URLs with your filters. |
checkIn |
string | — | YYYY-MM-DD. Empty or past = 30 days from today. |
checkOut |
string | — | YYYY-MM-DD. Empty = check-in + nights. |
nights |
integer | 3 |
Length of the stay when check-out is empty. |
adults |
integer | 2 |
Guests aged 13+. |
children |
integer | 0 |
Guests aged 2-12. |
roomType |
string | "any" |
Filter by type. Values: any, entire, private, hotel, shared. |
minPrice |
integer | — | In the chosen currency. |
maxPrice |
integer | — | In the chosen currency. |
minBedrooms |
integer | — | Bedrooms at least. |
currency |
string | "EUR" |
EUR, USD, GBP, BRL… |
maxListingsPerLocation |
integer | 50 |
Airbnb shows up to 270 listings per search (15 pages). Use narrower areas or price ranges for more. |
proxyConfiguration, maxRetries |
object, integer | Apify Proxy, auto | Proxy and retries; the defaults work for most runs. |
📋 Output fields
| Field | Type | Description |
|---|---|---|
listingId |
string | Airbnb listing ID |
url |
string | Listing page (with dates) |
location |
string | Location or search URL that found it |
name |
string | Listing name |
title |
string | Type and neighborhood |
latitude |
number | Approximate latitude |
longitude |
number | Approximate longitude |
rating |
number | Average rating |
reviewsCount |
integer | Number of reviews |
isNew |
boolean | New listing without rating |
checkIn |
string | Check-in date |
checkOut |
string | Check-out date |
nights |
integer | Nights |
currency |
string | Currency |
totalPrice |
number | Total price for the stay |
originalTotalPrice |
number | Total before discount |
pricePerNight |
number | Nightly rate before discounts and taxes |
priceLabel |
string | Price as displayed |
priceDetails |
array | Price breakdown lines |
rooms |
array | Bedrooms, beds, baths |
badges |
array | Badges |
isGuestFavorite |
boolean | Guest favorite badge |
photos |
array | Photo URLs |
Export as JSON, CSV, Excel, XML or HTML, or read it through the API.
💰 Pricing — pay per listing
| What you run | Listings | Cost (free plan) |
|---|---|---|
| 1 city, top 50 | 50 | $0.15 |
| 3 cities × 100 | 300 | $0.90 |
| Weekly price tracking, 5 neighborhoods × 50 | 1,000/month | $3.00/month |
Higher Apify plans pay less: $0.0025 (Bronze), $0.002 (Silver), $0.0015 (Gold and above). Platform usage and proxies are included. Locations without results are never charged.
🔌 API & integrations
Python
from apify_client import ApifyClient # pip install "apify-client>=3"
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("victorrodi/airbnb-scraper-api").call(
run_input={"locations": ["Lisbon, Portugal"], "checkIn": "2026-12-10", "checkOut": "2026-12-14"}
)
for home in client.dataset(run.default_dataset_id).iterate_items():
print(home["totalPrice"], home["rating"], home["name"])
cURL
curl -X POST "https://api.apify.com/v2/acts/victorrodi~airbnb-scraper-api/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"locations": ["Porto, Portugal"], "maxListingsPerLocation": 20}'
Works with Google Sheets, Make, Zapier, n8n and MCP / AI agents: “Find the 10 best-rated entire apartments in Lisbon under €120 a night for December 10–14.”
🤖 Use it from AI agents (Claude, ChatGPT, Cursor…)
This Actor is available to AI assistants through the Apify MCP server. Add the server to Claude Desktop, Claude Code, Cursor or any MCP client, then simply ask:
“Find the 10 best-rated entire apartments in Lisbon under €120 a night for December 10-14.”
“Compare the average Airbnb price per night in Barcelona, Rome and Paris for the same dates.”
The clean, flat output is designed to be read directly by LLMs.
🛡️ Reliability
- Requests are paced and retried with a new IP and exponential backoff.
- If the site keeps blocking, the Actor switches to residential IPs automatically.
- One failing item never stops the run, and you are never charged for it.
- Every run writes a
RUN_SUMMARYrecord (results, failures, retries, blocks). - Measured on a real run: 300 listings from 3 cities with 0 blocks, about $0.001 of platform cost.
- Past dates in saved tasks move forward automatically, so schedules never break.
More examples and docs for all our Actors: Vicshock/trendpulse-scrapers.
📌 Tips
- Airbnb shows at most 270 listings per search: split big cities into neighborhoods or price ranges to cover the whole market.
- Use your own search URL from airbnb.com to apply any filter (amenities, superhost…), then add it to
locations. - Schedule a weekly run on the same dates to track price changes and discounts.
❓ FAQ
Do I need an Airbnb account? No.
Are hosts’ names collected? No. The Actor only keeps listing data (prices, ratings, rooms, location, photos).
Why is the location approximate? Airbnb shows approximate coordinates in search results for privacy; they are fine for neighborhood analysis.
Is it legal? The Actor reads public search results without personal data. Respect Airbnb’s terms and the laws that apply to you.
💬 Support
Missing a field? Open an issue in the Issues tab — it is answered fast.