Scrape public Airbnb listing data from search pages, room URLs, or a location search. Get listing URLs, titles, prices, ratings, review counts, images, coordinates, badges, amenities, and other public metadata in a clean dataset.
At a glance
- Airbnb search and room URLs: scrape public search result pages, individual room URLs, or a generated location search.
- Listing metadata: save URLs, listing IDs, titles, room types, locations, prices, ratings, reviews, badges, images, coordinates, and source type.
- Trip filters: add check-in, check-out, adult count, and currency for generated location searches.
- Market snapshots: schedule repeatable searches for rental supply, pricing, review count, and rating analysis.
- API-ready output: export public Airbnb rows to CSV, JSON, Excel, dashboards, BI tools, or AI agents.
What can it do?
Airbnb Listings Scraper helps you collect public Airbnb supply data for market research, pricing checks, competitive tracking, and hospitality analysis.
It can start from Airbnb search URLs, individual room URLs, or a simple location such as New York, NY.
The actor saves structured rows to an Apify dataset so you can export results as JSON, CSV, Excel, XML, or HTML.
Who is it for?
- Property managers: track competing short-term rentals and public listing changes.
- Revenue analysts: compare visible nightly price signals and review counts.
- Travel market researchers: map public supply by destination and listing type.
- Real estate teams: evaluate neighborhood rental density and public coordinates.
- Data teams: build hospitality dashboards from clean dataset rows.
- Journalists: research public accommodation trends and market snapshots.
Why use this Airbnb scraper?
- Simple inputs for both search pages and listing pages.
- Public listing fields in one flat dataset.
- Optional check-in, check-out, adults, and currency filters.
- Conservative defaults for inexpensive first runs.
- Works well for repeatable market snapshots.
- Exports directly through Apify datasets and API clients.
What Airbnb data can you extract?
| Field | Description |
|---|---|
url |
Public Airbnb listing URL |
listingId |
Airbnb listing identifier when available |
title |
Listing title or public name |
name |
Listing name duplicate for compatibility |
roomType |
Public room/property type text |
category |
Public category tag when available |
location |
Public location text |
price |
Numeric price parsed from visible price text |
priceText |
Original visible price string |
currency |
Currency code when known |
rating |
Public average rating |
reviewsCount |
Public review count |
badges |
Public badges shown on search results |
isSuperhost |
Superhost signal when visible |
amenities |
Public amenities from listing pages when available |
imageUrls |
Public listing images |
latitude |
Public approximate latitude when available |
longitude |
Public approximate longitude when available |
source |
search or listing |
scrapedAt |
ISO timestamp of extraction |
How to scrape Airbnb search results
- Open Airbnb in your browser.
- Search for a destination.
- Copy the Airbnb search results URL.
- Paste it into
startUrls. - Set
maxItemsto the number of listings you need. - Run the actor.
- Export the dataset.
How to scrape Airbnb room URLs
- Copy one or more public Airbnb room URLs.
- Paste them into
startUrls. - Keep
maxItemsequal to or above the number of URLs. - Run the actor.
- Review the dataset rows.
How to use the location input
Use location when you do not already have a search URL.
Example:
{
"location": "New York, NY",
"maxItems": 25,
"currency": "USD"
}
You can add optional trip filters:
{
"location": "Paris, France",
"checkIn": "2026-09-10",
"checkOut": "2026-09-15",
"adults": 2,
"maxItems": 50,
"currency": "EUR"
}
Example input
{
"startUrls": [
{ "url": "https://www.airbnb.com/s/New-York--NY/homes" },
{ "url": "https://www.airbnb.com/rooms/50633275" }
],
"location": "New York, NY",
"adults": 1,
"maxItems": 25,
"currency": "USD",
"proxyConfiguration": { "useApifyProxy": false }
}
Example output
{
"url": "https://www.airbnb.com/rooms/123456789",
"listingId": "123456789",
"title": "Sunny apartment near Central Park",
"name": "Sunny apartment near Central Park",
"roomType": "Entire rental unit",
"category": "Tag:8678",
"location": "New York, United States",
"price": 187,
"priceText": "$187 night",
"currency": "USD",
"rating": 4.91,
"reviewsCount": 122,
"badges": ["Guest favorite"],
"isSuperhost": false,
"amenities": [],
"imageUrls": ["https://a0.muscache.com/...jpg"],
"latitude": 40.76,
"longitude": -73.98,
"source": "search",
"scrapedAt": "2026-06-15T09:00:00.000Z"
}
Tips for better results
- Use real Airbnb search URLs when you need exact filters.
- Use a low
maxItemsfor your first test. - Add check-in and check-out dates for price comparisons.
- Use the same input repeatedly to build time-series snapshots.
- Use room URLs when you need richer page-level metadata.
- Export CSV for spreadsheets and JSON for pipelines.
Common workflows
Market snapshot
Run a location search weekly and compare prices, review counts, and ratings.
Competitor monitoring
Track a fixed list of room URLs and watch public metadata changes over time.
Supply mapping
Use coordinates and locations to map public short-term rental inventory.
Pricing research
Use date filters to compare visible nightly price signals across neighborhoods.
Integrations
Use the Apify dataset export links to connect results to:
- Google Sheets
- Airtable
- BigQuery
- Snowflake
- Tableau
- Looker Studio
- Zapier
- Make
- custom ETL jobs
API usage with Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/airbnb-listings-scraper').call({
location: 'New York, NY',
maxItems: 25,
currency: 'USD'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
API usage with Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/airbnb-listings-scraper').call(run_input={
'location': 'New York, NY',
'maxItems': 20,
'currency': 'USD',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~airbnb-listings-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"location":"New York, NY","maxItems":20,"currency":"USD"}'
MCP and AI agents
Connect this actor to MCP-compatible tools through Apify MCP Server:
claude mcp add apify-airbnb-listings "https://mcp.apify.com/?tools=fetch_cat/airbnb-listings-scraper"
Use this server URL when a client asks for an MCP endpoint:
https://mcp.apify.com/?tools=fetch_cat/airbnb-listings-scraper
MCP JSON configuration example:
{
"mcpServers": {
"apify-airbnb-listings": {
"url": "https://mcp.apify.com/?tools=fetch_cat/airbnb-listings-scraper"
}
}
}
Example prompts:
- "Scrape 20 Airbnb listings for New York and summarize price ranges."
- "Compare ratings and review counts for these Airbnb room URLs."
- "Create a CSV of public Airbnb listings for this destination."
Data quality notes
Airbnb decides which public fields are shown on each page.
Search pages usually include prices, ratings, review counts, images, and approximate coordinates.
Room pages may include richer descriptions, amenities, and public metadata, but price visibility depends on selected dates and current Airbnb page content.
Limitations
- Only public Airbnb pages are supported.
- The actor does not log in.
- The actor does not access private booking, guest, host dashboard, or messaging data.
- Some fields can be missing when Airbnb does not show them publicly.
- Airbnb can change page content and availability at any time.
Troubleshooting
The run returned no items
Check that the URL is a public Airbnb search page or public room URL. Try a smaller maxItems and a well-known destination first.
Prices are missing
Some listing pages do not show a current nightly price unless dates are selected. Add checkIn and checkOut or use a search URL that already includes dates.
Airbnb limits the request
Enable Apify Proxy in proxyConfiguration and retry with a small maxItems value.
Legality
This actor extracts public information visible on Airbnb pages. Use it responsibly, respect Airbnb terms, and avoid collecting personal or private information. You are responsible for making sure your use case complies with applicable laws and platform rules.
Support
If you have trouble with an input, share the run URL and the public Airbnb URL you tried so the issue can be reproduced.
Field reference
Use the field table above as the canonical output reference.
Export formats
Apify supports dataset export as JSON, CSV, Excel, XML, RSS, and HTML.
Scheduling
Use Apify schedules to run repeat market snapshots daily, weekly, or monthly.
Webhooks
Use Apify webhooks to send completed dataset URLs to your pipeline after every run.
Storage
Each run stores output in the default Apify dataset. You can keep, export, or delete datasets according to your retention needs.