Airbnb Listings Scraper
Pricing
from $0.03 / 1,000 result extracteds
Airbnb Listings Scraper
Scrape public Airbnb listings from search pages and room URLs with prices, ratings, review counts, amenities, images, and listing metadata.
Pricing
from $0.03 / 1,000 result extracteds
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Security
Limited permissionsShare
Export public Airbnb listing data from search pages, room URLs, or a location search. Airbnb Listings Scraper returns listing IDs, titles, visible search prices, ratings, review counts, images and available location details for rental-market research—not review text or booking quotes.
Quick start
Start with a small location search and explicit direct access:
{"location": "New York, NY","maxItems": 10,"currency": "USD","proxyConfiguration": { "useApifyProxy": false }}
Run the Actor, then open its dataset to export JSON, CSV or Excel. Public fields vary by page. Login-only data is not supported. A run with no usable listings currently fails, and a start charge may still apply.
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
Ready-to-run examples
Choose a public example to see its settings before starting a run:
- Scrape Airbnb Search and Room URLs
- Compare Airbnb Supply in Austin
- Scrape Airbnb Listings in New York
What you get
One row per saved listing identity, with its room URL and available public fields. Search results can include visible prices, ratings and review counts. Room pages can supply amenity labels but no current price. Missing values remain empty rather than becoming booking or availability claims.
Who is it for?
- Rental-market researchers reviewing public listing supply by destination.
- Property analysts preparing comparable search-price observations for specified travel dates.
- Hospitality data teams organizing public listing identities, ratings and location signals for their own dashboards.
How you can use the data
- Build a New York rental supply sheet. Search
New York, NYwith a smallmaxItems, then exportlistingId,title,url,ratingandreviewsCount. Review source links before using the sheet as a market sample. - Compare dated search prices. Supply both stay dates with a generated location search and keep currency, guests and dates consistent across exports. Use
priceTextandscrapedAtto preserve the original observation. A search-card price is not a final booking total, and room pages return no price. - Compare listing identities over time. Join saved exports by
listingIdin your own workflow to review changed fields. Scheduling and change detection require separate setup. - Review location signals cautiously. Available coordinates are approximate and do not establish an exact property address.
Results follow source-page order, with duplicate listing IDs skipped within a run. There is no custom sort or guarantee of exhaustive supply, availability or an exact result count.
Input settings
Provide at least one source: location, startUrls, resumeUrls or resumeState. Sources are combined, not mutually exclusive. Trip filters apply to generated location searches. Explicit URLs keep their own filters.
| Setting | JSON key | Purpose |
|---|---|---|
| Airbnb start URLs | startUrls | Public HTTPS Airbnb search or room URLs, as strings or { "url": "..." } objects. |
| Location search | location | Generate a destination search, for example New York, NY. |
| Stay dates | checkIn, checkOut | Real YYYY-MM-DD dates, supplied together. Checkout must be later. |
| Adults | adults | Adult count for generated searches. Form default 1. |
| Currency | currency | Generated-search preference and output fallback, not currency conversion. |
| Maximum listings | maxItems | Overall cap. Form default 20, omitted API value 25. |
| Maximum run time | maxRunSeconds | Processing cutoff, default and maximum 270 seconds. |
| Resume source URLs | resumeUrls | Whole unstarted URLs from PENDING_URLS. |
| Resume state | resumeState | Checkpoint entries from PENDING_WORK, including already-saved IDs. |
| Proxy configuration | proxyConfiguration | Form prefill is direct. Omitted API settings use managed proxy. See field help for choices and charges. |
Example inputs
Use a search URL when you need specific Airbnb filters:
{"startUrls": [{ "url": "https://www.airbnb.com/s/New-York--NY/homes" }],"maxItems": 10,"proxyConfiguration": { "useApifyProxy": false }}
For generated searches, add dates together:
{"location": "Paris, France","checkIn": "2027-03-10","checkOut": "2027-03-15","adults": 2,"currency": "EUR","maxItems": 10,"proxyConfiguration": { "useApifyProxy": false }}
Output data
This abbreviated example shows the shape only, not a measured listing or booking quote:
{"url": "https://www.airbnb.com/rooms/123456789","listingId": "123456789","title": "Example listing","price": null,"priceText": null,"rating": null,"reviewsCount": null,"amenities": [],"imageUrls": [],"source": "listing"}
| Fields | Meaning |
|---|---|
url, listingId | Canonical room URL and stable listing ID. |
title, name | Public name. name repeats title for compatibility. |
roomType, category, location | Available public type/category/location labels. Category is search-only. |
price, priceText, currency | Parsed visible search-card price, original text and inferred/fallback currency. Room-page prices are always null. |
rating, reviewsCount | Available average rating and review count, not review text. |
badges, isSuperhost | Search badges and page-derived Superhost signal. false is not a verified absence. |
amenities | Available room-page amenity labels. Empty for search results. |
imageUrls | Available public listing image URLs. |
latitude, longitude | Available approximate coordinates, not guaranteed exact addresses. |
source, scrapedAt | search or listing, and extraction timestamp. |
Optional scalar values may be null. Arrays may be empty. Search and room pages provide different fields. Room pages do not return full descriptions, reviews, host profiles or current prices through this Actor.
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
This Actor uses pay-per-event pricing:
startis a one-time event after input and proxy setup, when extraction begins.resultis an event for each validated listing admitted for saving. Invalid records and source-error diagnostics are not result rows. If saving fails after the event, a charge can exist without a saved row.
Use maxItems and maxRunSeconds to bound work. Even a run with no usable output can incur the start event. Proxy service charges may apply separately.
See the live Pricing tab for current rates and discounts.
Tips for best results
- Start with a small destination search. Inspect 10 listings before increasing the result cap.
- Choose the right source for the fields you need. Search pages can provide visible prices, while room pages provide available amenity labels and no current price.
- Keep comparison conditions with your export. Save stay dates, guests, currency and collection time alongside the dataset.
- Inspect the summary before continuing interrupted work. Use the relevant saved pending-work record rather than repeating already saved listings.
Limits and caveats
Only public HTTPS Airbnb search (/s/...) and room (/rooms/...) pages are accepted. No login, private booking, guest, messaging or host-dashboard data is accessed. Airbnb can block requests or change its pages. Missing fields and fewer results than requested are possible.
A visible search price is not a final booking total. Dates, fees, taxes and availability can change it. Room-page output does not include a price.
Usable rows from other sources are retained when an isolated source fails. RUN_SUMMARY records source errors and unfinished work. A successful run with some rows is not proof every source worked. If no rows are extracted, the run fails.
When the time cutoff leaves unstarted work, use PENDING_WORK as resumeState. Its skipListingIds prevent replaying rows already saved from an interrupted page. PENDING_URLS can be passed as resumeUrls for whole unstarted pages. Failed or challenged pages are diagnostics, not automatic resume work. These checkpoint records are written only when relevant and do not guarantee a later run will reach the source.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~airbnb-listings-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data @- <<'JSON'{"location": "New York, NY","maxItems": 10,"currency": "USD","proxyConfiguration": {"useApifyProxy": false}}JSON
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": 10,"currency": "USD","proxyConfiguration": {"useApifyProxy": false}});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/airbnb-listings-scraper').call(run_input={'location': 'New York, NY', 'maxItems': 10, 'currency': 'USD', 'proxyConfiguration': {'useApifyProxy': False}})print(client.dataset(run['defaultDatasetId']).list_items().items)
API usage and integrations notes
This endpoint starts asynchronously. Use the returned run's defaultDatasetId to retrieve items after it finishes.
MCP and AI agents notes
Follow the official guide for your client's authentication. Ask an agent: “Collect up to 10 public New York Airbnb listings with explicit direct access, then summarize available ratings and review counts.” Check nullable fields and RUN_SUMMARY before interpreting missing data as a market fact.
MCP and AI agents
You can ask your AI assistant to collect data with Airbnb Listings Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Airbnb Listings Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/airbnb-listings-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Airbnb Listings Scraper by Fetch Cat, or give it the identifier fetch_cat/airbnb-listings-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s Airbnb Listings Scraper to collect up to 5 listings in New York, NY, with explicit direct access. Show listing IDs, titles, ratings and source links, marking unavailable fields.”
- “Search Paris with this scraper for 10–15 March 2027, 2 adults, EUR and at most 5 listings. Keep price text and collection time in a table, and label these as visible search prices rather than booking quotes.”
- “Collect up to 5 listings from the public Airbnb search URL I provide. Export listing IDs and source links so I can compare them with my earlier dataset, and explain any partial-source warnings in the summary.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Is this an Airbnb listings API alternative?
It produces structured public listing data through the Apify API. It is not an official Airbnb API, does not log in, and cannot guarantee complete inventory or access to unavailable pages.
Can I export Airbnb listings as CSV or JSON?
Yes. Open the dataset after the run and choose an export format, or retrieve items using the Apify API. It returns listing metadata and review counts, not review text.
Why are prices or amenities missing?
Room-page prices are not extracted. Search prices depend on the visible card and chosen dates. Amenities are extracted only from room pages when available. Supplying trip dates affects generated location searches, not explicit URLs.
What should I check when a run returns no data?
Confirm the public source URL and inspect the run error and RUN_SUMMARY when available. Try a small known destination. A block does not prove that a listing is private or deleted. No-output runs currently fail rather than guarantee an empty success.
Related Actors
- Rightmove Property Listings Scraper — research property listings alongside rental supply.
- Google Hotels Scraper — compare public hotel-search data.
- Tripadvisor Reviews Scraper — research traveler feedback in a separate workflow.
- Yandex Maps Scraper — add destination place research.
- Apple App Store Reviews Scraper — investigate travel-app feedback separately from property listings.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥