How to use it: 3 steps
- Make a free Apify accountApify 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.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
searchin Mode. Each start is one run. - Download the resultsWhen 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.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
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. 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.
Who uses it
Travel and rental analysts
Compare stay prices for the same dates in a city or area.
Property owners
Check open days and minimum stay of nearby listings.
Guest feedback researchers
Read review text to see what guests like or dislike.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| 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. |
Examples
- 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. That is enough for about 1,800 results.
Prices checked on 8 November 2026. See the current price on Apify.
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.
Details
Step by step on Apify
- Open the Input tab and keep Mode on Search listings (box 1).
- Keep Pattaya in Location, or type your city (box 2).
- Keep Maximum listings at 10 (box 3).
- Click Start.
- When the run ends, open the Output tab (box 5).
- Check
pricePerNight,totalPrice,currency,ratingandreviewsCount(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 for better results
- 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 and good to know
- 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
priceBreakdownandoriginalPricewhen Airbnb shows them - Taxes:
priceIncludesTaxesis often empty - Occupancy:
unavailableShareis 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 asnewagain. A listing ismissing_from_searchonly after a search with complete coverage, andremovedonly after its page returns 404 or 410
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"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. You need your Apify API token from Apify Console → Settings → API & Integrations.
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)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"}'# 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)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
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 (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "search" |
| Location | location | string | "Pattaya" |
| Maximum listings | maxItems | integer | 10 |
| More locations | locationQueries | array | |
| Airbnb search or room links | startUrls | array | |
| Listing links | listingUrls | array | |
| Include full listing details | includeDetails | boolean | true |
| Check-in date | checkIn | string | |
| Check-out date | checkOut | string | |
| Multiple date ranges | dateRanges | array | |
| Adults | adults | integer | 2 |
| Children | children | integer | 0 |
| Infants | infants | integer | 0 |
| Pets | pets | integer | 0 |
| Currency | currency | string | "USD" |
| Language | locale | string | "en" |
| Minimum nightly price | priceMin | number | |
| Maximum nightly price | priceMax | number | |
| Minimum beds | minBeds | integer | |
| Minimum bedrooms | minBedrooms | integer | |
| Minimum bathrooms | minBathrooms | number | |
| Room types | roomTypes | array | |
| Amenity IDs | amenities | array | |
| Instant Book only | instantBook | boolean | |
| Superhosts only | superhost | boolean |




