# Airbnb Reviews Scraper: Host Replies, Only New, $3.50/1,000 (`trueline-data/airbnb-reviews-scraper`) Actor

Get every review of any Airbnb listing: stars, text, date, reviewer, the host's reply and translations. Sort by newest, most relevant, highest or lowest rating. Turn on "only new reviews" to get just the reviews posted since your last run. No login.

- **URL**: https://apify.com/trueline-data/airbnb-reviews-scraper.md
- **Developed by:** [Trueline Data](https://apify.com/trueline-data) (community)
- **Categories:** Travel, Marketing, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.50 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Airbnb Reviews Scraper: Host Replies, Only New, $3.50/1,000

Get the reviews of any Airbnb listing as clean rows:

- **Stars, review text and date** (ISO time), and the review's language.
- **The host's reply**, when there is one.
- **Airbnb's translation** of reviews written in another language.
- **Reviewer** first name, picture, profile link, and their home town or how long they have been on Airbnb.
- **One free row per listing**: name, location, rating, review count, room type, property type,
  guests, superhost, photo, and the topics guests mention most ("Hot tub: 165").

### Why this one

- **$3.50 per 1,000 reviews**, against $5.00 for the most used Airbnb review scraper on the Free plan.
- **Only new reviews.** Turn on "Only new reviews" and run it on a schedule: each run returns only the
  reviews your earlier runs have not returned. Reviews it skips are not charged.
- **Sort like Airbnb**: newest, most relevant, highest rating or lowest rating. Add "Only reviews
  since" a date to stop early.
- **No login, no browser.** It reads Airbnb's own review data, 50 reviews per request, the same data a
  listing page shows anyone.
- **It never hands you a short list by mistake.** When Airbnb answers too fast with a cut-down page, the
  tool notices, slows down or switches to residential IPs, and asks again.
- **You pay only for reviews.** Listing rows, listings with no reviews and errors are free.

### Input

| Field | What it does |
| --- | --- |
| `listings` | Listing URLs (`airbnb.com/rooms/…`, any country's Airbnb site) or listing numbers. |
| `maxReviews` | Max reviews per listing. |
| `sortBy` | `newest`, `relevant`, `highest` or `lowest`. |
| `newerThan` | Optional date such as `2026-01-31`: only reviews posted on or after it. |
| `includeListingDetails` | One free listing row per listing. |
| `language` | Such as `en`: reviews in other languages also come translated into it. |
| `onlyNew` + `historyName` | Skip reviews your earlier runs already returned. |

```json
{
  "listings": ["https://www.airbnb.com/rooms/1131975140789813862"],
  "maxReviews": 500,
  "sortBy": "newest",
  "onlyNew": true
}
```

### Output

One `listing` row per listing, then one `review` row per review.

Real rows from a test run on 20 October 2026 (picture links and some tags left out to keep it short):

```json
[
  {
    "type": "listing",
    "listingId": "1131975140789813862",
    "listingUrl": "https://www.airbnb.com/rooms/1131975140789813862",
    "listingName": "Log Cabin Retreat, Great Location, Pets Allowed",
    "summary": "Cabin in Fairview · ★4.95 · 3 bedrooms · 5 beds · 2 baths",
    "location": "Fairview, North Carolina, United States",
    "rating": 4.95,
    "roomType": "Entire home/apt",
    "propertyType": "Entire cabin",
    "guests": 9,
    "isSuperhost": true,
    "reviewCount": 79,
    "reviewTags": [{ "tag": "Location", "count": 28 }, { "tag": "Hospitality", "count": 28 }]
  },
  {
    "type": "review",
    "listingId": "1131975140789813862",
    "listingName": "Log Cabin Retreat, Great Location, Pets Allowed",
    "reviewId": "1779838976718318389",
    "rating": 5,
    "text": "Lovely, cozy little cabin in the woods! Loved the fire pit and privacy! Host is lovely and great with communication, definitely recommend!",
    "language": "en",
    "translatedText": null,
    "date": "2026-09-21T17:02:19Z",
    "dateText": "4 weeks ago",
    "reviewerName": "Sam",
    "reviewerProfileUrl": "https://www.airbnb.com/users/profile/1478484843959719259",
    "reviewerInfo": "Fairfax, Virginia",
    "hostName": "Tammy",
    "hostResponse": null
  }
]
```

In a test run on Apify, 2 listings gave all 534 of their reviews in 22 seconds (70 with a host reply, 29
translated). A second run with "Only new reviews" on returned none and charged nothing.

### Pricing

- **Review: $3.50 per 1,000.**
- Listing rows, listings with no reviews, errors and reviews skipped by "Only new reviews" are free.

### Notes

- Reviews are Airbnb's public reviews, the ones anyone can read on a listing page. Use the data in line
  with Airbnb's terms and the laws that apply to you.

# Actor input Schema

## `listings` (type: `array`):

Airbnb listing URLs (airbnb.com/rooms/…, any country's Airbnb site) or listing numbers.

## `maxReviews` (type: `integer`):

Stop after this many reviews for each listing.

## `sortBy` (type: `string`):

The order Airbnb gives the reviews in.

## `newerThan` (type: `string`):

Optional. Keep only reviews posted on or after this date, such as 2026-01-31.

## `includeListingDetails` (type: `boolean`):

One free row per listing: name, location, rating, review count, room type, guests, superhost and the review topics guests mention most.

## `language` (type: `string`):

Language code such as en, es, de, fr. Reviews written in another language also come with Airbnb's translation into this one.

## `onlyNew` (type: `boolean`):

Skip every review an earlier run of yours already returned (not charged). Use it with a schedule to get only fresh reviews.

## `historyName` (type: `string`):

Where "Only new reviews" keeps the reviews it has seen (a key-value store in your account). Use a different name for each separate feed.

## `maxConcurrency` (type: `integer`):

How many listings to work on in parallel.

## `queryId` (type: `string`):

Leave empty. Only if the run says Airbnb changed its review feed: paste the new 64-character StaysPdpReviewsQuery id here.

## `proxyConfiguration` (type: `object`):

Leave as it is: the tool uses residential IPs for the review pages on its own, at no extra cost to you. Set a proxy here only to use your own.

## Actor input object example

```json
{
  "listings": [
    "https://www.airbnb.com/rooms/1131975140789813862"
  ],
  "maxReviews": 100,
  "sortBy": "newest",
  "includeListingDetails": true,
  "language": "en",
  "onlyNew": false,
  "historyName": "airbnb-reviews-seen",
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "listings": [
        "https://www.airbnb.com/rooms/1131975140789813862"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("trueline-data/airbnb-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "listings": ["https://www.airbnb.com/rooms/1131975140789813862"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("trueline-data/airbnb-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "listings": [
    "https://www.airbnb.com/rooms/1131975140789813862"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call trueline-data/airbnb-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,trueline-data/airbnb-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9F8bKFaPCygI7i4uX/builds/i2HnnUvkVC1Axl7kM/openapi.json
