---
title: "Airbnb Scraping: Listings, Prices, Reviews | Scrape.ly"
description: "Airbnb scraping step by step: listings, prices for your dates, ratings and every guest review. Two real runs, their cost, and API and MCP code."
url: https://scrape.ly/blog/scrape-airbnb
markdown: https://scrape.ly/blog/scrape-airbnb.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# Airbnb Scraping: How to Get Listings, Prices and Reviews

Airbnb scraping, step by step: pull listings by city with prices for your dates, ratings, hosts and amenities, then every guest review. Two real runs, their exact cost, and code for curl, Python, Node.js and AI agents.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 23, 2026

- Reading time

  10 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a stay listing card with a house icon and a star off a house at night, beside a yard sign with the pink Airbnb logo, and drops it into a crate](https://scrape.ly/media/scrape-airbnb.png?w=1080)

Airbnb scraping means collecting the public data Airbnb shows for a search or a listing (title, price for your dates, rating, host, amenities, photos) and, separately, the guest reviews of each listing, as structured rows you can analyze. The fastest way to do it is with two ready-made Actors on Scrape.ly: the Airbnb Scraper returns listings at $2.20 per 1,000, and the Airbnb Reviews Scraper returns reviews at $3.00 per 1,000, with no Airbnb account, API approval or proxy of your own.

This guide covers the no-code steps, the API (curl, Python, Node.js and AI agents over MCP), the cost and the pitfalls. Everything below comes from two real runs on 23 October 2026: ten 2-bedroom stays in Lisbon and ten reviews of one New York listing, with the exact inputs, outputs, logs and charges.

## What data you can get from Airbnb

The [Airbnb Scraper](https://scrape.ly/store/roamandroof/airbnb-scraper.md) writes one row per listing, from a city search, an Airbnb search URL or a listing URL:

| Field                                        | What it holds                                                                                                             |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `id`, `title`, `url`                         | Listing ID, name and link (with your dates and currency)                                                                  |
| `propertyType`, `roomType`, `personCapacity` | "Entire rental unit", "Entire home/apt", maximum guests                                                                   |
| `subDescription`                             | Guests, bedrooms, beds and baths as Airbnb lists them                                                                     |
| `price`                                      | Total for your dates, the original price when discounted, and a breakdown when Airbnb returns one                         |
| `rating`                                     | Overall score, review count and the six category scores (accuracy, check-in, cleanliness, communication, location, value) |
| `host`, `coHosts`                            | Public host name, Superhost and verified flags                                                                            |
| `amenities`, `highlights`, `houseRules`      | Amenity groups, badges such as "Top 1% of homes", and rules                                                               |
| `coordinates`, `location`, `breadcrumbs`     | Approximate position and the place hierarchy                                                                              |
| `images`, `thumbnail`, `description`         | Photos with captions, the cover image and the listing text                                                                |

The [Airbnb Reviews Scraper](https://scrape.ly/store/roamandroof/airbnb-reviews-scraper.md) writes one row per guest review: `rating` (1 to 5), `createdAt`, `text` as written, `localizedText` in your locale, `language`, `reviewHighlight` (for example "Stayed a few nights"), the host's `response`, `reviewPhotoUrls`, and the reviewer and host as Airbnb shows them publicly.

Fields come back empty when Airbnb has nothing to show: a new listing has no rating yet, and most reviews have no host reply.

## Airbnb scraping without code

1. Open the [Airbnb Scraper](https://scrape.ly/store/roamandroof/airbnb-scraper.md) in the Scrape.ly Store.
2. Pick a ready-made input. We used the preset [2+ bedroom stays in Lisbon, 10 results](https://scrape.ly/store/roamandroof/airbnb-scraper/presets/search-filters.md). "Try this input" opens it in the console.
3. Change the city and filters to yours. This is the exact input of our run:

```json
{
  "locationQueries": ["Lisbon"],
  "maxResults": 10,
  "priceMin": 40,
  "priceMax": 400,
  "minBedrooms": 2,
  "adults": 2,
  "currency": "USD"
}
```

4. Click **Start**. Ten listings take a few seconds.
5. Export the rows as JSON, CSV or Excel.

The fields that matter most:

- `locationQueries`: cities or areas as you'd type them into Airbnb. Several at once is fine.
- `startUrls`: an Airbnb search URL keeps its own filters; a listing URL such as `https://www.airbnb.com/rooms/15152603` returns that one stay, as in the preset [One listing by URL, 1 result](https://scrape.ly/store/roamandroof/airbnb-scraper/presets/listing-url.md).
- `maxResults`: listings for the whole run, across all locations and URLs. Default 10.
- `checkIn`, `checkOut`: dates in `YYYY-MM-DD`. Prices are for this stay; without dates, Airbnb picks one.
- `priceMin`, `priceMax`, `minBedrooms`, `minBeds`, `minBathrooms`, `adults`, `children`, `pets`: the same filters as Airbnb's search bar. Prices are per night in your `currency`.
- `locale`: the language of the text that comes back, such as `fr-FR`.

To get the reviews of any listing, paste its URL into the reviews Actor. We used the preset [Highest-rated reviews of a listing, 10 reviews](https://scrape.ly/store/roamandroof/airbnb-reviews-scraper/presets/url-2.md):

```json
{
  "startUrls": [{ "url": "https://www.airbnb.com/rooms/12937" }],
  "sortBy": "highest-rated",
  "sinceDate": "2026-06-01",
  "maxReviewsPerListing": 10,
  "locale": "en-US"
}
```

`maxReviewsPerListing: 0` returns every review; `sortBy` takes `most-recent`, `most-relevant`, `highest-rated` or `lowest-rated`; `sinceDate` and `untilDate` set a window.

Scrape.ly Store Airbnb Scraper Airbnb listings by city, search URL or listing URL: price for your dates, rating, host, amenities and photos. $2.20 per 1,000 listings.

[Try it free](https://scrape.ly/store/roamandroof/airbnb-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Airbnb with the API

Create an API token under **Settings → API & Integrations** and export it as `SCRAPELY_TOKEN`.

Our listing run finished in 8 seconds, so the synchronous endpoint fits: it starts the run, waits up to 45 seconds and returns the listings as a JSON array. Add `?format=csv` for CSV.

```shell
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~airbnb-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"locationQueries": ["Lisbon"], "maxResults": 10, "checkIn": "2026-12-01", "checkOut": "2026-12-06", "adults": 2, "minBedrooms": 2, "currency": "USD"}'
```

If you ask for hundreds of listings and a run takes longer than 45 seconds, the call answers `408` while the run keeps going. Don't call it again (that starts a second run); use a client instead, which waits as long as the run takes.

Python (`pip install scrapely-client-python`). This example works out a nightly price for each listing, keeps Superhosts, and then pulls the five newest reviews of each:

```python
import os
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

run = client.actor("roamandroof/airbnb-scraper").call(
    run_input={"locationQueries": ["Lisbon"], "maxResults": 20, "checkIn": "2026-12-01",
               "checkOut": "2026-12-06", "adults": 2, "minBedrooms": 2, "currency": "USD"}
)
print(run.status)  # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
listings = list(client.dataset(run.default_dataset_id).iterate_items())
superhosts = [l for l in listings if (l.get("host") or {}).get("isSuperHost")]
for l in superhosts:
    total = float(l["price"]["price"].replace("$", "").replace(",", ""))
    print(f'{total / 5:7.2f}/night  {(l.get("rating") or {}).get("guestSatisfaction")}  {l["title"][:50]}')

reviews = client.actor("roamandroof/airbnb-reviews-scraper").call(
    run_input={"startUrls": [{"url": l["url"]} for l in superhosts], "maxReviewsPerListing": 5, "sortBy": "most-recent"}
)
for r in client.dataset(reviews.default_dataset_id).iterate_items():
    print(r["listingId"], r["rating"], r["createdAt"][:10], (r.get("text") or "")[:80])
```

Node.js (`npm install scrapely-client`):

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('roamandroof/airbnb-scraper').call({
  locationQueries: ['Lisbon'],
  maxResults: 10,
  priceMin: 40,
  priceMax: 400,
  minBedrooms: 2,
  adults: 2,
  currency: 'USD',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((l) => [l.title, l.price.label, l.rating?.guestSatisfaction, l.url]));
```

For AI agents, add the Scrape.ly MCP server. In Cursor, put this in `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://api.scrape.ly/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://api.scrape.ly/mcp` and sign in with `/mcp`. Then ask: "Use scrapely to run roamandroof/airbnb-scraper for 2-bedroom stays in Lisbon from 1 to 6 December, 20 listings, and give me a table of nightly price, rating and review count." See the [MCP docs](https://scrape.ly/docs/mcp.md) for other clients. If you'd rather call a ready endpoint, the [Airbnb API](https://scrape.ly/api/airbnb-api.md) page shows the same data as an API product.

## A real run: 2-bedroom stays in Lisbon

We ran the "2+ bedroom stays in Lisbon, 10 results" preset on 23 October 2026. It returned 10 listings in 8 seconds and was charged $0.0236. The input set no dates, so Airbnb priced its default stay, 30 November to 5 December (five nights). The first five rows:

| Listing                                           | Type               | Guests | Price for 5 nights        | Rating | Reviews | Host      |
| ------------------------------------------------- | ------------------ | ------ | ------------------------- | ------ | ------- | --------- |
| LUXURIOUS, BRIGHT & LARGE TERRACE WITH GREAT VIEW | Entire rental unit | 4      | $1,856, originally $2,538 | 5.0    | 131     | \[host 1] |
| Chic Principe Real Penthouse on the park          | Entire rental unit | 4      | $1,404                    | 5.0    | 59      | \[host 2] |

|                          |                            |              |   |        |      |     |           |
| ------------------------ | -------------------------- | ------------ | - | ------ | ---- | --- | --------- |
| Spacious Central Flat \\ | AC, Free Parking & Balcony | Entire condo | 4 | $1,317 | 4.99 | 137 | \[host 3] |

|                                          |                    |   |                           |      |     |           |
| ---------------------------------------- | ------------------ | - | ------------------------- | ---- | --- | --------- |
| Elegant River View Corpo Santo Apartment | Entire rental unit | 6 | $1,283, originally $1,426 | 4.98 | 64  | \[host 4] |
| MY LX FLAT Luxury Design Gem in Rossio   | Entire rental unit | 4 | $1,706, originally $2,747 | 4.93 | 246 | \[host 5] |

Hosts on Airbnb are often private people, so we show them as `[host 1]` to `[host 5]`. What the full ten show:

- **The filters held.** Every listing was a whole home with 2 or 3 bedrooms for 4 to 6 guests, priced $1,229 to $1,964 for five nights, about $246 to $393 a night, inside the $40 to $400 nightly range.
- **Discounts are visible.** Five of the ten showed a lower price with the original next to it; the largest cut was from $2,747 to $1,706.
- **Quality is high in this slice.** Ratings ran from 4.92 to 5.0 on 18 to 349 reviews, nine hosts were Superhosts, and nine listings carried a "Top 1% of homes" or "Top 5% of homes" badge.
- **Rich detail per row.** Each listing came with 34 to 57 amenities, house rules, the neighborhood ("In the heart of Alfama", "Steps from Cais do Sodré") and up to 104 photos.

Then we ran the reviews preset on listing 12937 in New York. It returned 10 reviews in 7 seconds and was charged $0.0301:

| Written    | Stars | Review (start)                                                                                       | Host reply |
| ---------- | ----- | ---------------------------------------------------------------------------------------------------- | ---------- |
| 2026-10-15 | 5     | "\[host] was a kind and responsive host -- his home was warm and inviting, super clean…"             | yes        |
| 2026-10-09 | 5     | "Best location for seeing lots of Broadway shows! This is super easy place to access manhattan…"     | yes        |
| 2026-10-04 | 5     | "We had a great stay with \[host]! It was fun, a beautiful space, and we felt very safe…"            | yes        |
| 2026-09-30 | 5     | "The architecture and the property itself are steeped in history and cultural heritage…"             | no         |
| 2026-09-27 | 5     | "We loved staying at \[host]'s place. Beautiful house close to Manhattan with everything we needed…" | yes        |

Guests and the host are private people, so reviewer names are left out and the host's name in review text appears as `[host]`. All ten reviews were five stars (the preset sorts highest-rated first), written between 10 September and 15 October 2026, all in English, and the host replied to five of them.

The two logs, without the platform's start-up lines:

```plaintext
20261023T03:03:01.355Z [Scrapely] Container started (setup 2.1 s)
20261023T03:03:02.729Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
20261023T03:03:07.393Z [scrapely.actor] INFO  [Status message]: Saved 10 listings.
20261023T03:03:07.905Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
20261023T03:04:21.481Z [scrapely.proxy_configuration] INFO  Platform proxy access check succeeded.
20261023T03:04:22.881Z [scrapely.actor] INFO  [Status message]: Saved 10 reviews from 1 listings.
20261023T03:04:23.390Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

Under five seconds for ten full listings, and 1.4 seconds for ten reviews: both Actors read Airbnb's own data feeds through the default datacenter proxy, with no browser to start.

## What it costs

The Airbnb Scraper charges $0.0022 per listing saved ($2.20 per 1,000); the Airbnb Reviews Scraper charges $0.003 per review saved ($3.00 per 1,000). Platform usage is billed on top.

- **Listings:** 10 × $0.0022 = $0.022 in listing fees. The run was charged $0.0236: $0.0011 of compute, $0.0004 of datacenter proxy traffic and $0.0001 of storage writes on top.
- **Reviews:** 10 × $0.003 = $0.03 in review fees. The run was charged $0.0301, with about $0.0001 of compute and proxy.

A 1,000-listing market snapshot costs $2.20 in listing fees, and 1,000 reviews $3.00. The Free plan's $5 of monthly credit covers about 2,200 listings or 1,600 reviews in event fees. Set **Max cost per run** in the run options and the run stops cleanly when it reaches the cap.

## What to watch out for

- **One search shows a few hundred listings.** The README notes that a single Airbnb search tops out at about 200 to 270 listings, and the run says so in its status when that happens. Cover a whole city with several `locationQueries` (neighborhoods) or narrower price bands.
- **Prices belong to dates.** A listing has no single price; it has a price for a stay. Always set `checkIn` and `checkOut` when you compare listings or track prices over time, or you compare Airbnb's default stays.
- **Totals, not nightly rates.** `price.label` is the figure from the search result, such as "$1,856 for 5 nights". Divide by the nights yourself, and expect tax and fee lines only where Airbnb returns them.
- **Relative dates drift.** Review `localizedDate` values like "2 weeks ago" follow the day you scrape. Store `createdAt` instead.
- **Fewer reviews than the counter.** Airbnb's count can include hidden or removed reviews; the run message tells you when it returned fewer.
- **Personal data.** Host first names, guest names, photos and hometowns identify private people. Keep only the fields you need.

## Is it legal to scrape Airbnb?

Both Actors read public listing and review data that anyone can see without logging in, and they never sign in or book. That doesn't settle every question. [Airbnb's Terms of Service](https://www.airbnb.com/help/article/2908) (last updated February 5, 2026) say: "Do not use bots, crawlers, scrapers, or other automated means to access or collect data or other content from or otherwise interact with the Airbnb Platform." How those terms bind you depends on where you are and how you use the data.

Privacy law applies to hosts and guests. Many hosts are individuals renting out their own home, and reviews carry guests' first names and hometowns, so treat both as personal data under the GDPR and the CCPA. Collect only what you need, keep it secure, have a lawful basis for processing it, and don't publish exact addresses of private homes. This is not legal advice: if Airbnb data drives a product, ask a lawyer about your case.

## Why Scrape.ly for Airbnb data

- **There is no public API for market data.** Airbnb's [API Terms of Service](https://www.airbnb.com/help/article/3418) describe API programs for "property management, channel management, operations management" and similar host tools, with requirements that include a mutual nondisclosure agreement and Airbnb's "data security review." The Actors return public listing and review data for any city, today.
- **No browser to maintain.** Both Actors read Airbnb's data feeds directly, which is why ten listings took under five seconds of work and ten reviews 1.4 seconds.
- **Listings and reviews in one pipeline.** Pass each listing's `url` from the first Actor into the second, as in the Python example, and you have prices, ratings and guest sentiment for a whole neighborhood.
- **Built for price tracking.** Schedule the same search with fixed future dates every day, send the rows to Google Sheets or a webhook with [automations](https://scrape.ly/docs/automations.md), and watch prices and discounts move toward the stay.

## FAQ

### Can you scrape Airbnb for free?

The Scrape.ly Free plan includes $5 of usage credit every month with no credit card, which covers about 2,200 listings at $2.20 per 1,000 in listing fees. Our 10-listing run cost $0.0236 in total.

### Does Airbnb have a public API?

Not for market data. Airbnb's API Terms describe partner programs for host software such as property and channel management, with an NDA and a security review. To collect public listings and reviews, scrape them with the Actors above.

### How do I scrape Airbnb prices for specific dates?

Set `checkIn` and `checkOut` in `YYYY-MM-DD` format, plus `adults` and any filters. Each row's `price` then holds the total for that stay, the original price when discounted, and a breakdown when Airbnb returns one.

### How do I scrape all reviews of an Airbnb listing?

Paste the listing URL into the Airbnb Reviews Scraper and set `maxReviewsPerListing` to `0`. Reviews come in pages of 50; the README measured about 3,200 reviews from one listing in under a minute.

### How many Airbnb listings can I scrape per city?

One search shows about 200 to 270 listings. For a whole city, add several neighborhoods to `locationQueries` or split by price band, and set `maxResults` to the total you want.

### Can I compare Airbnb with hotels?

Yes. Scrape the same city with the Tripadvisor Actors from our guide on [how to scrape Tripadvisor](https://scrape.ly/blog/scrape-tripadvisor.md), or long-term rentals with our [Zillow guide](https://scrape.ly/blog/scrape-zillow-data.md), and compare prices per night or per month.

Scrape.ly Store Scrape Airbnb reviews Paste any listing URL and get every guest review with stars, date, text, translation and the host's reply. $3.00 per 1,000 reviews.

[Try it free](https://scrape.ly/store/roamandroof/airbnb-reviews-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head lifts a job card with a briefcase icon off a search results page headed by the Google G logo, where more job cards are listed, and drops it into a crate](https://scrape.ly/media/scrape-google-jobs.png?w=750)](https://scrape.ly/blog/scrape-google-jobs.md)
  ### [How to Scrape Google Jobs Listings: Titles, Pay and Apply Links](https://scrape.ly/blog/scrape-google-jobs.md)
  [Google Jobs pulls openings from LinkedIn, Indeed, ZipRecruiter and company career sites into one panel. Here is how to scrape Google Jobs by role and city and get each job as a row with company, source board, highlights and apply link, with a real run, its cost and code.](https://scrape.ly/blog/scrape-google-jobs.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five red rating squares out of a shop front with a striped awning and the red Yelp burst logo on its sign, and drops it into a crate](https://scrape.ly/media/scrape-yelp-reviews.png?w=750)](https://scrape.ly/blog/scrape-yelp-reviews.md)
  ### [How to Scrape Yelp Reviews and Business Data](https://scrape.ly/blog/scrape-yelp-reviews.md)
  [Scrape Yelp reviews for any business URL: full text, stars, dates, photos, reactions and the owner's reply, with keyword, star and date filters. Plus business details from the same page. A real run, its cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-yelp-reviews.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a product card with a photo and a green price out of a shop front with a green-striped awning and the green Shopify bag logo on its sign, and drops it into a crate](https://scrape.ly/media/scrape-shopify-stores.png?w=750)](https://scrape.ly/blog/scrape-shopify-stores.md)
  ### [How to Scrape Any Shopify Store: Products, Prices and Variants](https://scrape.ly/blog/scrape-shopify-stores.md)
  [Scrape any public Shopify store from a store, collection or product URL and get one row per product with every variant, price, sale price, stock status, SKU, weight and image. A real run on Allbirds, its cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-shopify-stores.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:support@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
