# Airbnb Scraper: Listings, Prices, Calendar and Reviews

> Airbnb Scraper is an Apify actor (API) by CheapAPI Labs. Listings inside a city boundary with prices for your dates, amenities, host details, a 12 month calendar and reviews. It costs $2.79 per 1,000 listings on the Apify Free plan and $0.275 on Gold, billed through your Apify account with no API key. Compared with the most used Airbnb actor on Apify Store (about 17,500 users): 1,000 listings with details costs $2.80 on Free and $0.35 on Gold, all in here and $4.00 and $1.00, also all in there (Apify Store listing prices, checked October 2026). Both prices include Apify platform usage and proxies.

- Page: https://cheapapilabs.com/actors/airbnb-scraper/
- Run on Apify: https://apify.com/cheapapi/airbnb-scraper
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $2.79 per 1,000 listings on Free, $0.275 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Listing | $0.00279 | $0.00139 | $0.00104 | $0.000275 |
| Listing details (add on) | $0.00001 | $0.00001 | $0.00001 | $0.000075 |
| Availability calendar (add on) | $0.0021 | $0.0018 | $0.0015 | $0.0012 |
| Host profile | $0.0014 | $0.000945 | $0.00084 | $0.000175 |
| Price with taxes | $0.00029 | $0.00029 | $0.00029 | $0.00029 |
| Review | $0.0035 | $0.00287 | $0.00224 | $0.0007 |

Platinum and Diamond pay the Gold price. Apify platform usage: included in these prices (proxies too).

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~airbnb-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"locations":["Lisbon, Portugal"],"maxResults":20}'
```

## Example output row

```json
{
  "type": "listing",
  "id": "7743405",
  "url": "https://www.airbnb.com/rooms/7743405",
  "name": "Chiado Luxury Apartment",
  "propertyType": "Entire rental unit",
  "area": "Lisbon",
  "bedrooms": 3,
  "beds": 4,
  "bathrooms": 2,
  "rating": 4.99,
  "reviewsCount": 502,
  "isGuestFavorite": true,
  "latitude": 38.7107,
  "longitude": -9.1442,
  "priceTotal": 2040,
  "nights": 5,
  "pricePerNight": 408,
  "priceLines": [
    {
      "label": "5 nights x $407.95",
      "amount": 2039.74
    }
  ],
  "currency": "USD",
  "checkIn": "2026-12-07",
  "checkOut": "2026-12-12",
  "datesChosenByAirbnb": true,
  "roomType": "Entire home/apt",
  "personCapacity": 6,
  "ratingCleanliness": 5,
  "ratingValue": 4.9,
  "amenities": [
    "Bathtub",
    "Hair dryer",
    "Shampoo"
  ],
  "houseRules": [
  …
}
```

## Fields

Every row has `type` (`listing` or `review`). Listing rows:

| Field | Example | Notes |
|---|---|---|
| `id`, `url`, `name` | `7743405`, `https://www.airbnb.com/rooms/7743405`, `Chiado Luxury Apartment` | stable Airbnb listing id |
| `propertyType`, `area` | `Entire rental unit`, `Lisbon` | |
| `bedrooms`, `beds`, `bathrooms` | `3`, `4`, `2` | |
| `rating`, `reviewsCount`, `isGuestFavorite`, `isNewListing`, `badges` | `4.99`, `502`, `true` | |
| `latitude`, `longitude` | `38.7107`, `-9.1442` | |
| `priceTotal`, `pricePerNight`, `nights`, `priceOriginalTotal`, `priceLines`, `priceLabel`, `currency` | `2040`, `408`, `5` | for `checkIn`–`checkOut`, as Airbnb's search shows it (usually before taxes; the details add on with dates gives the full breakdown) |
| `checkIn`, `checkOut`, `datesChosenByAirbnb` | `2026-12-07`, `2026-12-12`, `true` | without your dates Airbnb prices each home's next available nights |
| `thumbnailUrl`, `photos`, `searchQuery`, `position`, `scrapedAt` | | |
| **Details add on:** `roomType`, `personCapacity`, `description`, `amenities`, `amenitiesNotIncluded`, `houseRules`, `checkInTime`, `checkOutTime`, `petsAllowed`, `sleepingArrangements`, `ratingCleanliness`, `ratingAccuracy`, `ratingCheckIn`, `ratingCommunication`, `ratingLocation`, `ratingValue`, `locationDescription`, `locationIsExact`, `locationDetails`, `city`, `neighborhood`, `neighborhoodSummary`, `country`, `locationPath`, `descriptionHtml`, `descriptionLanguage`, `highlights`, `amenityGroups`, `hostId`, `hostIsSuperhost`, `hostIsVerified`, `hostRating`, `hostReviewsCount`, `hostYearsHosting`, `hostLanguages`, `hostResponseRate`, `hostResponseTime`, `coHostsCount`, `photosCount`, `photoCaptions`, `photoOrientations`, `coHosts`, `homeTier`, `isLuxe`, `cancellationPolicy`, `pageTitle`, `metaDescription`, `appLink`, `iosLink`, `androidLink` (+ `hostName`, `hostPhotoUrl`, `hostAbout`, `hostLivesIn` only with *Include names and photos*) | `Entire home/apt`, `6`, `Check-in after 4:00 PM`, `["English", "Portuguese"]`, `100` | all photos in `photos` |
| **Prices with taxes add on:** the `quote…` fields above as Airbnb shows them to visitors from Europe, `quoteTaxes`, `quoteTaxesShown` | `13.46`, `true` | total with taxes and the tax amount |
| **Host profile add on:** `hostProfileUrl`, `hostListingsCount`, `hostListings` (id, url, name, type, rating, reviews, rooms), `hostReviewsFromGuestsCount`, `hostReviewsFromHostsCount`, `hostProfileRating`, `hostIdentityVerified`, `hostVerifications`, `hostVerifiedSince`, `hostMonthsHosting`, `hostMonthsOnAirbnb`, `hostTripsCount`, `hostIsBusiness`, `hostReviewsFromGuestsPreview`, `hostReviewsFromHostsPreview` (newest reviews on the profile) (+ `hostName`, `hostPhotoUrl`, `hostAbout`, `hostLivesIn`, `hostProfileFacts`, `hostInterests` only with *Include names and photos*) | `7`, `3465`, `125` | one request per host, shared by all of the host's listings |
| **Calendar add on:** `availableDays30`, `availableDays90`, `availableDaysInCalendar`, `unavailablePercent30`, `unavailablePercent90`, `unavailablePercentInCalendar`, `nextAvailableDate`, `minNightsTypical`, `calendarFrom`, `calendarTo`, `calendarDaysCount` (+ `calendar` day list on request) | `5`, `83.3`, `2026-10-27`, `4` | occupancy estimate; "InCalendar" = today to the end of the loaded months (Airbnb gives at most 12 months = 336 to 365 days) |
| **Details with your dates (same request, no extra fee):** `isAvailable`, `instantBook`, `cancellationTerms`, `priceQuoteAvailable`, `priceQuoteNote`, `quoteCheckIn`, `quoteCheckOut`, `quoteNights`, `quoteGuests`, `quoteTotal`, `quoteOriginalTotal`, `quoteNightlyRate`, `quoteAveragePerNight`, `quoteCleaningFee`, `quoteServiceFee`, `quoteOtherFees`, `quoteTaxes`, `quoteDiscounts`, `quoteLines`, `quoteNote` | `true`, `Free cancellation before November 11`, `386.86`, `13.46` | for your dates and guests |
| `notes` | `Not available this time (not charged): calendar.` | only when an add on could not be loaded |

Review rows: `listingId`, `listingUrl`, `id`, `rating`, `date`, `language`, `text`, `textTranslated` and `translatedFrom` (Airbnb's translation into the chosen language), `hostResponse`, `hostResponseTranslated`, `highlight`, `tripDetails`, `photos` (+ `reviewerName`, `reviewerPhotoUrl`, `reviewerLocation` only with *Include names and photos*).

The dataset has four views, **Listings, Listing details, Availability & occupancy, Reviews**, and every run saves a `RUN_SUMMARY` record (listings found and delivered, homes outside the boundary, map areas and pages searched, add ons delivered, add ons and prices for your dates not available, failed listings and places with reasons, requests and retries, whether the spending limit was reached).

## Compared with alternatives

Actor fees of public Apify Store listings (Free plan / Gold plan), checked October 2026:

| Option | 1,000 listings, search data | 1,000 listings with details | 1,000 reviews | Results per search | Calendar / occupancy |
|---|---|---|---|---|---|
| **This Actor** | **$2.79 / $0.275** | **$2.80 / $0.35** | **$3.50 / $0.70** | up to 10,000 per location | yes (add on) |
| Most used Airbnb Actor (~17,500 users) |, (always loads details) | $4.00 / $1.00 ($0.50 Diamond) | separate Actor: $5.00 / $2.30 ($1.00 Diamond) | ~240 | no |
| Most used Airbnb calendar Actor (~280 users) |, |, |, |, | $3.00 per 1,000 results, $10 per 1,000 priced dates |

**All in prices on both sides:** like the most used Actor, this Actor's prices include Apify platform usage and proxies, the fees above are the whole cost. Details cost just $0.01 per 1,000 listings on the Free, Bronze and Silver plans, so listings with details cost 30% less than that Actor's listings on every plan (Gold+: $0.35 vs its Diamond $0.50); search only listings cost less again. With the host profile add on, listings with details and host profile cost 30% less than that Actor's listings with host profiles on every plan (Gold+: $0.525 vs its Diamond $0.75).

## Not included

- **Experiences, Airbnb Luxe and long term "monthly stays" search pages**, homes (stays) search only.
- **Booked vs host blocked days**, Airbnb shows both as "unavailable"; the occupancy figure is an estimate (upper bound).
- **Revenue or ADR history** like paid analytics tools, this Actor gives today's live data you can build history from (schedule it).
- **Taxes Airbnb does not list**, with *Prices with taxes* you get what Airbnb shows visitors from Europe (taxes itemised); a stay without listed taxes has `quoteTaxesShown: false`.
- **Cancellation policy name**, Airbnb's current listing page gives the terms for your dates (`cancellationTerms`), and the policy name (`cancellationPolicy`) only sometimes.
- **Host contact details** (phone, email), Airbnb does not publish them.

## Limits

- Homes (stays) only; experiences are not included.
- Occupancy is an estimate (booked and host blocked days look the same).
- Locations are geocoded with OpenStreetMap; ambiguous names use the best match, add the country (e.g. `Paris, France`) or paste an Airbnb search URL with its map. Places it does not know are skipped (not searched worldwide).
- Up to 10,000 listings per location or search URL per run.
- Airbnb changes its website from time to time; the Actor finds the current search query automatically, other changes may need an update.
- Reviews come newest first; review text is in the original language.

## FAQ

**Is it legal?**
The Actor reads public listing pages the same way a browser does, without logging in. Airbnb's terms restrict automated access, so use the data responsibly and in line with the laws that apply to you. Host and reviewer names, photos and locations are personal data, they are off by default; turn them on only with a lawful basis (e.g. under the GDPR).

**How fresh is the data?**
Live: every run reads Airbnb at that moment.

**How do I export the results?**
Open the run's **Output** or **Storage → Dataset** tab and download JSON, CSV, Excel, HTML or XML, or use the views (Listings, Listing details, Availability & occupancy, Reviews) to export only those columns. Through the API: `GET https://api.apify.com/v2/datasets/<datasetId>/items?format=csv&view=listings&token=<YOUR_TOKEN>`.

**How does it get more than 240 results?**
Airbnb shows at most about 280 homes per search. The Actor checks how many homes each map area has and splits dense areas into four smaller ones until each area shows all of its homes.

**Why are prices for different dates in each row?**
Without Check in/Check out, Airbnb prices every home for its own next available nights (`datesChosenByAirbnb: true`). Give dates to compare prices for the same stay.

**Is `unavailablePercent` the occupancy rate?**
It is an estimate: Airbnb marks a day unavailable when it is booked *or* blocked by the host, so the real occupancy is equal or lower.

**Why did I get fewer listings than I asked for?**
The area or your filters have fewer homes, listings are not available for your dates, or homes were outside the place's boundary (`outsideBoundarySkipped` in `RUN_SUMMARY`; turn off *Only homes inside the place's boundary* to keep them). A place the map does not know is skipped and reported.

**Why was I charged for a listing without some fields?**
You are charged for the listing row; add ons that were not available are free and named in `notes`.

**Do I need proxies?**
No. Apify's proxies are used automatically and included in the price. If Airbnb ever refuses requests, the run stops with a clear message and nothing more is charged.

**Do I need an Airbnb account?**
No.
