# Despegar Hotel Reviews Scraper (`shahidirfan/despegar-hotel-reviews-scraper`) Actor

Scrape Despegar hotel reviews, guest ratings, customer feedback, review titles, travel dates, and hotel details. Extract structured hotel review data for sentiment analysis, reputation monitoring, competitor research, hospitality analytics, and AI datasets.

- **URL**: https://apify.com/shahidirfan/despegar-hotel-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

### What does Despegar Hotel Reviews Scraper do?

Despegar Hotel Reviews Scraper collects guest reviews and hotel rating summaries from Despegar and Decolar hotel pages across Latin America. Paste one or more hotel URLs (or numeric hotel IDs) and get every available review as structured JSON, ready for export.

Each run returns reviewer details, positive and negative comments, per-review scores, the hotel's overall score, six category scores, and the traveler type. No login or API key is required.

### Why use Despegar Hotel Reviews Scraper?

- **Reputation datasets in minutes** - Turn public Despegar and Decolar hotel pages into analytics-ready review data without manual copy-paste.
- **Ready for automation** - Export to JSON, CSV, or Excel, or connect results to Google Sheets, Make, Zapier, and webhooks.
- **Multi-market support** - Works with every regional Despegar domain and with Decolar (Brazil).
- **Hotel-level context** - Every review row includes the hotel score, category scores, and the guest's traveler type, so you can compare hotels without extra joins.

### What data can you extract from Despegar?

| Field | Description |
|-------|-------------|
| `reviewId` | Unique identifier of the review |
| `hotelId` | Despegar / Decolar hotel identifier |
| `hotelName` | Hotel name derived from the page URL |
| `rating` | Guest score for the review (0-10) |
| `ratingText` | Guest score as displayed |
| `reviewDate` | Month and year of the review |
| `authorName` | Reviewer name |
| `authorCountry` | Reviewer country |
| `authorCountryCode` | Reviewer country ISO code |
| `travelerType` | Couple, family, friends, solo, or business trip |
| `travelerTypeId` | Traveler type identifier |
| `provider` | Review provider (DESPEGAR or EXPEDIA) |
| `providerLabel` | Provider label such as "Host verified" |
| `language` | Language of the review |
| `positiveComment` | What the guest liked |
| `negativeComment` | What the guest disliked |
| `usefulVotes` | Number of guests who found the review useful |
| `hotelScore` | Hotel overall guest score (0-10) |
| `hotelRatingLabel` | Hotel rating label such as "Excellent" |
| `hotelReviewCount` | Total reviews the hotel has received |
| `hotelCategoryScores` | Scores for location, service, staff, cleanliness, internet, and price/quality |
| `hotelSummary` | Short generated overview of guest opinions |
| `sourceUrl` | The hotel page URL |
| `scrapedAt` | ISO timestamp for when the review was collected |

### How to use Despegar Hotel Reviews Scraper

1. Open the Actor on Apify Store.
2. Paste one or more Despegar or Decolar hotel URLs into Hotel URLs or IDs. You can also paste numeric hotel IDs.
3. Choose a sort order and set the maximum number of reviews.
4. Run the Actor.
5. Download the dataset or connect it to your workflow.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrls` | Array | Yes | - | Despegar / Decolar hotel page URLs or numeric hotel IDs |
| `sortBy` | String | No | `relevance_desc` | Review order: `relevance_desc`, `reviewed_date_desc`, `overall_rating_desc`, `overall_rating_asc` |
| `results_wanted` | Integer | No | `20` | Maximum reviews to collect in total across all hotels |
| `max_pages` | Integer | No | `10` | Safety cap on review pages per hotel (each page holds up to 100 reviews) |
| `proxyConfiguration` | Object | No | - | Optional proxy settings. A proxy is usually not required |

### Output Data

| Field | Type | Description |
|-------|------|-------------|
| `reviewId` | String | Unique review identifier |
| `hotelId` | String | Hotel identifier |
| `hotelName` | String | Hotel name |
| `rating` | Number | Review score (0-10) |
| `authorName` | String | Reviewer name |
| `authorCountry` | String | Reviewer country |
| `travelerType` | String | Trip type |
| `provider` | String | Review provider |
| `positiveComment` | String | What the guest liked |
| `negativeComment` | String | What the guest disliked |
| `usefulVotes` | Integer | Useful-vote count |
| `hotelScore` | Number | Hotel overall score |
| `hotelReviewCount` | Integer | Hotel total review count |
| `sourceUrl` | String | Hotel page URL |
| `scrapedAt` | String | Collection timestamp |

### Usage Examples

#### Single hotel

Collect the first reviews for one hotel:

```json
{
  "startUrls": [
    "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york"
  ],
  "results_wanted": 20
}
```

#### Multiple hotels across markets

Collect reviews from a US hotel and an Argentine hotel in one run:

```json
{
  "startUrls": [
    "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york",
    "https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"
  ],
  "sortBy": "reviewed_date_desc",
  "results_wanted": 100,
  "max_pages": 5
}
```

#### Hotel IDs and lowest scores first

Use numeric hotel IDs and surface the lowest scores first for quality monitoring:

```json
{
  "startUrls": [
    "2192993",
    "352691"
  ],
  "sortBy": "overall_rating_asc",
  "results_wanted": 50
}
```

### Sample Output

```json
{
  "reviewId": "6accf9eab25d9f3de258bf10",
  "hotelId": "2192993",
  "hotelName": "Riu Plaza Manhattan Times Square New York",
  "rating": 9.7,
  "ratingText": "9.7",
  "reviewDate": "October 2026",
  "authorName": "Jimena",
  "authorCountry": "United States of America",
  "authorCountryCode": "US",
  "travelerType": "Couple",
  "travelerTypeId": "couple",
  "provider": "DESPEGAR",
  "providerLabel": "Host verified",
  "language": "es",
  "positiveComment": "Nos encanto la ubicacion, la atencion del personal fue espectacular...",
  "negativeComment": "La limpieza podria mejorar en algunos detalles...",
  "usefulVotes": 0,
  "hotelScore": 9.2,
  "hotelRatingLabel": "Excellent",
  "hotelReviewCount": 4125,
  "hotelCategoryScores": {
    "location": 10,
    "cleaning": 9.6,
    "internetAccessAndQuality": 9.4,
    "service": 9.3,
    "qualityprice": 9.1
  },
  "hotelSummary": "Great location close to Times Square with excellent staff and service.",
  "sourceUrl": "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york",
  "scrapedAt": "2026-10-18T14:30:00.000Z"
}
```

### Supported domains

- `us.despegar.com` (United States)
- `despegar.com.ar`, `despegar.com.mx`, `despegar.com.co`, `despegar.com.pe`, `despegar.com.cl`, `despegar.com.uy`, `despegar.com.ec`, and other Latin American domains
- `decolar.com` (Brazil)

### Tips for Best Results

- Use complete, public hotel page URLs. The hotel ID is the number after `h-` in the URL.
- Start with a small `results_wanted` value to confirm the output shape before scheduling larger runs.
- Increase `max_pages` (up to 10) when you need deeper review history; each page returns up to 100 reviews.
- A hotel may publish fewer reviews than its total review count. The Actor saves every review that is publicly available for the property.
- Some fields, such as a negative comment, are absent when a guest only left a positive comment. Empty fields are omitted from each record.

### Integrations

- **Google Sheets** - Send reviews to a spreadsheet for analysis.
- **Webhooks** - Trigger downstream workflows after each run.
- **Make or Zapier** - Connect review data to no-code automations.
- **API** - Access datasets programmatically from your own systems.

### Frequently Asked Questions

#### Can I export Despegar reviews to CSV or Excel?

Yes. Apify datasets can be downloaded as JSON, CSV, Excel, XML, and other supported formats directly from the run page.

#### Can I scrape reviews from multiple hotels in one run?

Yes. Add as many URLs or hotel IDs as you need to `startUrls`. `results_wanted` caps the total number of reviews across the run.

#### Can I run this Actor on a schedule?

Yes. Schedule the Actor in Apify Console to collect the newest reviews daily, weekly, or at any interval, and use `sortBy: "reviewed_date_desc"` for incremental runs.

#### Do I need a Despegar account or API key?

No. The Actor collects publicly available guest reviews, so no account, login, or API key is required.

#### Why are there fewer reviews than the hotel's total review count?

Despegar publishes a curated subset of reviews on each hotel page. The Actor collects every review that is publicly available, which can be lower than the total count shown on the page.

#### Is it legal to scrape Despegar reviews?

Collecting publicly available data can be legal, but you are responsible for complying with applicable laws, Despegar's terms, and privacy rules. Use the data responsibly.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate collection of publicly available hotel review data. Users are responsible for using the data responsibly and complying with applicable laws and website terms.

# Actor input Schema

## `startUrls` (type: `array`):

Despegar / Decolar hotel page URLs (any regional domain) or numeric hotel IDs. Example URL: https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york

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

Order in which reviews are returned.

## `results_wanted` (type: `integer`):

Maximum number of reviews to collect in total across all hotels.

## `max_pages` (type: `integer`):

Safety cap on the number of review pages fetched per hotel (each page holds up to 100 reviews).

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

Optional. Reviews come from an unprotected JSON endpoint, so a proxy is usually not required.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york"
  ],
  "sortBy": "relevance_desc",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "startUrls": [
        "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/despegar-hotel-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 = { "startUrls": ["https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york"] }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/despegar-hotel-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 '{
  "startUrls": [
    "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york"
  ]
}' |
apify call shahidirfan/despegar-hotel-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/despegar-hotel-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/8xYxGrlIdkuQb2T9y/builds/IOH09qGxChndb8i89/openapi.json
