# Airbnb Scraper: Listings, Prices and Calendars

> Airbnb scraper: enter a city, a search link or room links. Get stay prices, discounts, ratings, open days and reviews as a table. No login.

URL: https://cliqtomedia.com/actors/airbnb-scraper/

Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/airbnb-scraper?fpr=cliqto

Enter a city or an Airbnb link and get listings in a table. Each row has the nightly price, the total price and the rating. You can also read calendars and reviews. No login is needed.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `search` in Mode. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Enter a city, an Airbnb search link or a room link, and get listings with nightly and total stay prices, discounts, ratings, calendars and reviews from [Airbnb](https://www.airbnb.com). You get a table for CSV, Excel or API use, plus an area price summary. You do not need a login or an API key. A run with 10 listings takes about 35 seconds and costs about $0.03.

- Search listings: find listings by city, area, map box or Airbnb search link.
- Listing details: get full data for room links you already have.
- Calendar: get open days and minimum stay, one row per day. Daily prices are optional.
- Reviews: get review text, rating, date and language, one row per review.
- Track changes: compare a search with your last run and mark each listing as new, changed, unchanged, missing or removed.

### Good for

- You compare stay prices for the same dates in a city or area.
- You check open days and minimum stay for a set of listings.
- You read reviews to learn what guests like or dislike.
- You track new listings and price changes on a schedule.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Listing | $0.0027 (from $0.00189 on paid Apify plans) | One delivered listing. |
| Search page | $0.0016 (from $0.00112 on paid Apify plans) | One public search page, including pages with no matches. |
| Additional listing URL | $0.0002 (from $0.00014 on paid Apify plans) | Each direct listing URL checked after the first URL in the same run. |
| Review page | $0.0005 (from $0.00035 on paid Apify plans) | One page of reviews, including pages excluded by a date filter. |
| Review | $0.0027 (from $0.00189 on paid Apify plans) | One delivered review without guest identity. |
| Calendar month | $0.0018 (from $0.00126 on paid Apify plans) | One requested month of calendar availability for a listing. |
| Calendar day | $0.0027 (from $0.00189 on paid Apify plans) | One delivered calendar date. |
| Daily price quote | $0.0027 (from $0.00189 on paid Apify plans) | One successful stay quote for an available calendar check-in date. |
| Listing check | $0.0012 (from $0.00084 on paid Apify plans) | One unchanged or missing listing check. |
| Input validation | $0.0016 (from $0.00112 on paid Apify plans) | One invalid input checked by the Actor. No data requests are made. |
| First listing URL | $0.0018 (from $0.00126 on paid Apify plans) | The first direct listing URL checked in a run, including its public detail and price sections. |

- One result: about $0.0027.
- 1,000 results: about $2.70.
- Every day 100 results, for 30 days: about $8.10 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 8 November 2026. Current price: https://apify.com/cliqtomedia/airbnb-scraper?fpr=cliqto

## Questions

### Do I need an Airbnb account?

No. You do not need a login, cookies or an API key.

### Can I get host emails or phone numbers?

No. The Actor has no contact or profile fields.

### Is the total price the final price?

It is the price Airbnb shows for your dates and guests. Airbnb can change it at checkout.

## Data fields

- `recordType` (string): listing, calendar, or review.
- `listingId` (string): Numeric Airbnb listing ID.
- `url` (string): Public listing link.
- `title` (string): Listing title.
- `roomType` (string): Airbnb room type.
- `propertyType` (string): Property type.
- `description` (string): Public listing description with direct contact strings removed.
- `personCapacity` (number): Maximum guests.
- `bedrooms` (number): Number of bedrooms.
- `beds` (number): Number of beds.
- `bathrooms` (number): Number of bathrooms.
- `pricePerNight` (number): Base accommodation price per night from the source nights breakdown. Excludes separately shown fees and discounts; null if not shown.
- `totalPrice` (number): Displayed total for the selected stay. May exclude taxes; see priceIncludesTaxes.
- `originalPrice` (number): Displayed total before a discount, when present.
- `priceLabel` (string): Original displayed price explanation.
- `priceIncludesTaxes` (boolean): True only when the source explicitly identifies a tax-inclusive total. Null means not stated.
- `fees` (object/array/string): Cleaning, service and tax amounts if separately shown; unknown amounts are null.
- `priceBreakdown` (object/array/string): Source price labels and numeric amounts, including discounts.
- `currency` (string): Requested currency code.
- `checkIn` (string): Check-in date for this quote.
- `checkOut` (string): Check-out date for this quote.
- `rating` (number): Overall rating.
- `reviewsCount` (number): Published review count.
- `lat` (number): Public listing latitude; may be approximate.
- `lng` (number): Public listing longitude; may be approximate.
- `hostIsSuperhost` (boolean): Public Superhost status.
- `photos` (object/array/string): Public listing photo URLs.
- `amenities` (object/array/string): Amenities with group, title, availability and description.
- `houseRules` (object/array/string): Public house rules with direct contact strings removed.
- `categoryRatings` (object/array/string): Ratings for cleanliness, accuracy, check-in, communication, location and value.
- `ratingDistribution` (object/array/string): Share of reviews at each star rating.
- `cancellationPolicy` (string): Displayed cancellation policy text.
- `calendar` (object/array/string): Calendar dates and availability when requested.
- `occupancy` (object/array/string): Unavailable-days estimate. Closed days do not prove bookings.
- `reviewSummary` (object/array/string): Collected review count and repeated words; not a sentiment score.
- `available` (boolean): Whether the selected stay is available.
- `changeStatus` (string): new, changed, unchanged, missing_from_search, reappeared or removed. Missing requires complete search coverage; removed requires a direct 404.
- `source` (string): Data source.
- `fetchedAt` (string): Collection time in UTC.
- `status` (string): not_found for a direct 404; partial when requested extra data could not finish.

## Input settings

- `mode` (string): Search places, read listing links, collect calendars or reviews, or compare listings with a saved snapshot.
- `location` (string): City or area to search. You can also use locationQueries or Airbnb search links.
- `maxItems` (integer): Maximum listings across all inputs and date ranges. Searches share it evenly. Review mode uses this as its default review limit per listing.
- `locationQueries` (array): Search each city or area in this list.
- `startUrls` (array): Paste Airbnb search or numeric room links. Country links are converted to www.airbnb.com. URL dates and filters are used with the guests, language and currency selected below.
- `listingUrls` (array): Public Airbnb room links with a numeric ID. Country links are converted to www.airbnb.com; the original host is never requested.
- `includeDetails` (boolean): Get the description, all photos, amenities, house rules and rating categories.
- `checkIn` (string): Optional travel date in YYYY-MM-DD format. Set both dates; check-out must be later. Without dates, the Actor uses 3 nights starting 30 days from today.
- `checkOut` (string): Optional travel date in YYYY-MM-DD format. Set both dates; check-out must be later. Without dates, the Actor uses 3 nights starting 30 days from today.
- `dateRanges` (array): Optional list of {"checkIn":"YYYY-MM-DD","checkOut":"YYYY-MM-DD"}. Each range gets an even share of maxItems, and listings can repeat across ranges.
- `adults` (integer): Number used for the search and price quote.
- `children` (integer): Number used for the search and price quote.
- `infants` (integer): Number used for the search and price quote.
- `pets` (integer): Number used for the search and price quote.
- `currency` (string): Three-letter currency code, such as USD, EUR or THB. Prices use this currency.
- `locale` (string): Language for detail labels, such as en or de. Some listing text and fast search stay in English. Price breakdowns use English; currency is set separately.
- `priceMin` (number): Optional Airbnb search filter.
- `priceMax` (number): Optional Airbnb search filter.
- `minBeds` (integer): Optional Airbnb search filter.
- `minBedrooms` (integer): Optional Airbnb search filter.
- `minBathrooms` (number): Optional Airbnb search filter.
- `roomTypes` (array): Optional room type filter.
- `amenities` (array): Optional numeric Airbnb amenity filters. The search URL can also contain filters.
- `instantBook` (boolean): Apply this Airbnb search filter.
- `superhost` (boolean): Apply this Airbnb search filter.

## Step by step on Apify

1. Open the Input tab and keep Mode on Search listings (box 1).
2. Keep Pattaya in Location, or type your city (box 2).
3. Keep Maximum listings at 10 (box 3).
4. Click Start.
5. When the run ends, open the Output tab (box 5).
6. Check `pricePerNight`, `totalPrice`, `currency`, `rating` and `reviewsCount` (box 6).

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Compare prices in an area | `search`, `location`, `checkIn`, `checkOut` | Listing rows, area summary | `pricePerNight`, `totalPrice`, `originalPrice`, `rating` | CSV or Excel for price analysis |
| Compare one area on several dates | `search`, `location`, `dateRanges` | One row per listing and date range, summary per period | `checkIn`, `checkOut`, `totalPrice` | Google Sheets through API |
| Check open days for a listing | `calendar`, `listingUrls`, `calendarMonths` | Day rows | `date`, `available`, `minNights`, `pricePerNight` | Your pricing sheet |
| Learn from guest reviews | `reviews`, `listingUrls`, `maxReviews` | Review rows | `text`, `rating`, `createdAt`, `language` | A text analysis tool |
| Track an area over time | `monitor`, `location`, `snapshotName`, `onlyChanges` | Changed listing rows | `changeStatus`, `pricePerNight`, `fetchedAt` | Apify Schedule with Slack or Notion summary |

## Tips

- Set check-in and check-out dates. Without dates, the Actor uses 3 nights, 30 days from today.
- Turn off full listing details for a fast search. It is much quicker for large lists.
- Use track changes mode on a schedule to see new and changed listings.

## Limits



- Prices: a price is a quote for your dates and guests at the time of the run. It is not a booking guarantee.
- Fees: cleaning, service and tax values stay empty when Airbnb does not show them. They were empty in all 341 listings we tested. Discounts appear in `priceBreakdown` and `originalPrice` when Airbnb shows them.
- Taxes: `priceIncludesTaxes` is often empty.
- Occupancy: `unavailableShare` is the share of closed days. A host can block days, so it does not prove bookings.
- Language: fast search and part of the listing text stay in English. Price breakdowns are in English.
- Time: speed changes from run to run. At the default timeout of 300 seconds, 100 full listings finished in about 4 minutes, and 1000-listing fast runs finished in 3.5 to 4.5 minutes. One run on an early build stopped at 931 rows after 286 seconds. With a timeout of 600 seconds, the same fast search finished 1000 rows in 3.5 to 4 minutes. A 240-listing run with full details took about 9 minutes, with a timeout of 900 seconds. Raise the timeout for runs above about 100 full listings or 900 fast listings.
- Size: 12 MiB per response, 512 MiB and 100000 requests per run. The Actor makes about 1 request per second and up to 3 attempts per request. A failed search page stops the run with the rows already saved. A listing that cannot be read is skipped without a charge for its row, and the run goes on; 3 failures in a row, or a block, stop the run.
- Tracking: run one monitor at a time per `snapshotName`. The saved history holds up to 512 KiB, and old entries are dropped first, so a listing can show as `new` again. A listing is `missing_from_search` only after a search with complete coverage, and `removed` only after its page returns 404 or 410.

## Sample result

```json
{
  "recordType": "listing",
  "listingId": "1770178382370231943",
  "url": "https://www.airbnb.com/rooms/1770178382370231943",
  "title": "Deluxe Room Edge Condo Pattaya Infinity Pool 31F",
  "roomType": "Entire home/apt",
  "propertyType": "Entire rental unit",
  "personCapacity": 2,
  "bedrooms": 1,
  "beds": 1,
  "bathrooms": 1,
  "pricePerNight": 59.24,
  "averageTotalPerNight": 59.24,
  "totalPrice": 177.73,
  "originalPrice": null,
  "priceLabel": "$178 for 3 nights",
  "priceIncludesTaxes": null,
  "fees": { "cleaning": null, "service": null, "taxes": null },
  "priceBreakdown": [{ "label": "3 nights x $59.24", "amount": 177.73 }],
  "currency": "USD",
  "checkIn": "2026-12-04",
  "checkOut": "2026-12-07",
  "rating": 5,
  "reviewsCount": 5,
  "lat": 12.9311,
  "lng": 100.8823,
  "hostIsSuperhost": false,
  "amenities": [
    {
      "group": "Bathroom",
      "title": "Hair dryer",
      "available": true,
      "description": null
    }
  ],
  "houseRules": [{ "title": "Up to 2 overnight guests", "description": null }],
  "categoryRatings": [{ "category": "cleanliness", "rating": 5 }],
  "cancellationPolicy": "Free cancellation for 24 hours. Cancel before November 27 for a partial refund. Review this host's full policy for details.",
  "calendar": null,
  "occupancy": null,
  "reviewSummary": null,
  "available": true,
  "changeStatus": null,
  "source": "Airbnb",
  "fetchedAt": "2026-11-04T03:19:56.515Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/airbnb-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/airbnb-scraper").call(run_input={
    "mode": "search",
    "location": "Pattaya"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~airbnb-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "location": "Pattaya"}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/airbnb-scraper")
result = tool.invoke({"run_input": {"mode": "search", "location": "Pattaya"}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/)
- [Booking.com Scraper: Hotels, Prices, Reviews, No Login](https://cliqtomedia.com/actors/booking-scraper/)
- [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/)
- [Google Flights Scraper - Prices & Times, No Login](https://cliqtomedia.com/actors/google-flights-scraper/)
- [Idealista Scraper - Spain, Italy, Portugal, France Listings](https://cliqtomedia.com/actors/idealista-scraper/)
- [ImmobilienScout24 Scraper - German Real Estate, No Login](https://cliqtomedia.com/actors/immobilienscout24-scraper/)
