# Despegar Hotel Reviews Scraper - Pros, Cons & Scores (`haketa/despegar-reviews-scraper`) Actor

Scrape Despegar (Decolar) hotel reviews across Latin America. Extract guest ratings, structured pros and cons, six category scores, traveler type, verified-guest flags and review dates by hotel URL or ID. Export JSON, CSV, Excel.

- **URL**: https://apify.com/haketa/despegar-reviews-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Travel, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Despegar Hotel Reviews Scraper — Ratings, Structured Pros & Cons, and Category Scores across Latin America

> **The most complete Despegar hotel-review extractor on Apify.** Pull real guest reviews from **Latin America's #1 travel platform** (known as **Decolar** in Brazil) — with the positive and negative comment **split into separate fields**, a 0–10 rating, traveler type, verified-guest flag, review date, useful votes, and each hotel's overall score plus **six category scores** (location, cleanliness, staff, service, Wi‑Fi, value). Built for reputation monitoring, competitor benchmarking, sentiment analysis and travel market research.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com/haketa/despegar-reviews-scraper)
[![Live Data](https://img.shields.io/badge/Data-Live%20at%20Run%20Time-orange)]()
[![Pricing](https://img.shields.io/badge/Pricing-Pay%20Per%20Result-yellow)]()
[![Region](https://img.shields.io/badge/Region-Latin%20America%20%F0%9F%8C%8E-red)]()
[![Coverage](https://img.shields.io/badge/Coverage-Millions%20of%20Reviews-purple)]()
[![Pros & Cons](https://img.shields.io/badge/Reviews-Pros%20%2B%20Cons%20Split-success)]()
[![Category Scores](https://img.shields.io/badge/Scores-6%20Categories%20per%20Hotel-brightgreen)]()
[![No Auth](https://img.shields.io/badge/Auth-None%20Required-success)]()
[![Export](https://img.shields.io/badge/Export-JSON%20%C2%B7%20CSV%20%C2%B7%20Excel-lightgrey)]()

***

### 🎯 What this actor does

The **Despegar Hotel Reviews Scraper** extracts live guest reviews from **Despegar** — the leading online travel agency across Latin America, operating in Argentina, Mexico, Colombia, Chile, Peru, Uruguay, Ecuador and beyond (as **Decolar** in Brazil). Give it a hotel URL or a hotel ID and it returns **every guest review**, one clean row per review, enriched with the hotel's full rating breakdown.

Unlike a plain star rating, each Despegar review already **separates what the guest liked from what they disliked**. This actor preserves that structure, so you get sentiment-ready `pros` and `cons` out of the box — no NLP required to know what travelers love and hate about a property.

Each record can include:

- 💬 **Review core** — reviewer name, country, 0–10 rating, `pros` (liked) and `cons` (disliked) as **separate fields**, review month/year and language
- 🧭 **Traveler context** — trip type (couple, family, business, friends, solo) and localized label
- ✅ **Trust signals** — verified-guest flag and "useful" vote count
- 🏨 **Hotel summary** — overall score, rating label, total review count, star classification, city and address
- 📊 **Six category scores** — location, cleanliness, staff, service, Wi‑Fi and value for money, each 0–10
- 🤖 **AI review summary** — Despegar's own generated overview of guest opinions
- 🕒 **Metadata** — `scrapedAt` ISO timestamp on every row

Whether you manage a hotel, run a travel-analytics product, or research the Latin American hospitality market, this actor is the **fastest path from Despegar to a usable dataset** — no scraping code required.

***

### ✨ Why this actor

Despegar looks like a simple booking site, but turning its reviews into clean analytics data means handling a lot of structure correctly. This actor does it for you:

| ✅ This actor handles | ❌ What you'd fight doing it yourself |
|---|---|
| **Full pagination** — collects every review, not just page one | Reviews load in pages; large hotels have 1,000+ |
| **Split pros / cons** preserved as separate fields | Positive and negative comments must be pulled apart correctly |
| **Six category scores** parsed per hotel | Category ratings are nested and easy to miss |
| **Traveler type + verified flag** mapped | Trip type and verification are encoded, not plain text |
| **Multi-country** from one input | Each country site has its own format and language |
| **Clean deduplicated rows** | Reviews can repeat across pages and need de-duping |
| **JSON / CSV / Excel export** | Raw data needs reshaping for analysis |

***

### 🚀 Quick start

#### One-click run

1. Open the actor on the [Apify Store](https://apify.com/haketa/despegar-reviews-scraper) and click **Try for free**
2. Paste one or more Despegar hotel URLs into **Hotel URLs** — e.g. `https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba`
3. Set **Max reviews per hotel** (use `0` for everything) and pick your **Market**
4. Hit **Start** — reviews stream into your dataset, ready to export as JSON, CSV, Excel, HTML or RSS

#### Run via API (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run_input = {
    "startUrls": [
        "https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"
    ],
    "market": "AR",
    "maxReviewsPerHotel": 200,
    "includeHotelSummary": True,
    "reviewsLanguage": "es",
}

run = client.actor("haketa/despegar-reviews-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["authorName"], item["ratingPoints"], "|", item["pros"])
```

#### Run via API (JavaScript)

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('haketa/despegar-reviews-scraper').call({
    startUrls: ['https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba'],
    market: 'AR',
    maxReviewsPerHotel: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

***

### ⚙️ Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `startUrls` | array | – | Despegar hotel page URLs. All guest reviews are collected for each hotel. |
| `hotelIds` | array | – | *(Advanced)* Numeric hotel IDs — the number after `h-` in the URL. Use with **Market**. |
| `market` | enum | `AR` | Despegar country site: `AR`, `MX`, `CO`, `CL`, `PE`, `UY`, `EC`. Sets domain, language and region. |
| `maxReviewsPerHotel` | integer | `200` | Max reviews per hotel. `0` = all available. |
| `includeHotelSummary` | boolean | `true` | Attach overall score, six category scores, review count and AI summary to every review. |
| `reviewsLanguage` | enum | `es` | Language the review text is returned in (`es`, `pt`, `en`). All reviews are collected regardless. |
| `proxyConfiguration` | object | Residential | Proxy settings — residential is required and enabled by default. |

#### 📋 How to get a hotel URL

1. Open the Despegar site for your country (e.g. **despegar.com.ar**, **despegar.com.mx**)
2. Search a city and open any hotel
3. Copy the address-bar URL — it looks like `.../hoteles/h-1051991/amerian-cordoba-cordoba`
4. Paste it into **Hotel URLs**. Add as many as you like.

***

### 📤 Output

One clean record per guest review, enriched with hotel context:

```json
{
  "reviewId": "66aa9a6ee61ce8039df19c70",
  "hotelId": "1051991",
  "hotelName": "Amerian Córdoba",
  "authorName": "Javier",
  "authorCountry": "Argentina",
  "ratingPoints": "4.2",
  "pros": "Great location, close to everything downtown.",
  "cons": "The room was small and the bathroom needs renovation.",
  "travelerType": "couple",
  "travelerTypeLabel": "En pareja",
  "isVerified": "true",
  "reviewDate": "Julio 2024",
  "reviewLanguage": "es",
  "usefulVotes": "7",
  "hotelScore": "7.9",
  "hotelScoreText": "Comfortable",
  "totalReviews": "642",
  "scoreLocation": "9.3",
  "scoreCleanliness": "8.5",
  "scoreStaff": "8.2",
  "scoreService": "7.8",
  "scoreWifi": "7.8",
  "scoreValue": "7.7",
  "aiSummary": "Guests highlight the excellent location and friendly staff...",
  "city": "Córdoba",
  "address": "Córdoba, Argentina. 611 m from the center",
  "stars": "4",
  "hotelUrl": "https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba",
  "market": "AR",
  "scrapedAt": "2026-08-10T11:38:01.887Z"
}
```

#### 💬 Review fields

| Field | Description |
|-------|-------------|
| `reviewId` | Unique review identifier |
| `authorName` · `authorCountry` | Reviewer name and country |
| `ratingPoints` | Guest rating out of 10 |
| `pros` | 👍 What the guest **liked** (positive comment) |
| `cons` | 👎 What the guest **disliked** (negative comment) |
| `travelerType` · `travelerTypeLabel` | Trip type (`couple`, `family`, `businessTrip`, `friends`, `singles`) + label |
| `isVerified` | `true` if the reviewer is a verified guest |
| `reviewDate` | Month/year of the stay |
| `reviewLanguage` | Review language code |
| `usefulVotes` | How many users found the review useful |

#### 🏨 Hotel fields *(when `includeHotelSummary` is on)*

| Field | Description |
|-------|-------------|
| `hotelId` · `hotelName` | Hotel identifier and name |
| `hotelScore` · `hotelScoreText` | Overall guest score /10 and label |
| `totalReviews` | Total guest reviews for the hotel |
| `scoreLocation` | 📍 Location score |
| `scoreCleanliness` | 🧼 Cleanliness score |
| `scoreStaff` | 🧑‍💼 Staff score |
| `scoreService` | 🛎️ Service score |
| `scoreWifi` | 📶 Wi‑Fi score |
| `scoreValue` | 💲 Value-for-money score |
| `aiSummary` | 🤖 Generated summary of guest opinions |
| `city` · `address` · `stars` | Hotel location and star class |
| `hotelUrl` · `market` · `scrapedAt` | Source URL, market and timestamp |

Export everything to **JSON, CSV, Excel, HTML or RSS**, or pull it through the Apify API and integrations.

***

### 🌎 Supported markets

| Code | Country | Site |
|:---:|---------|------|
| 🇦🇷 `AR` | Argentina | despegar.com.ar |
| 🇲🇽 `MX` | Mexico | despegar.com.mx |
| 🇨🇴 `CO` | Colombia | despegar.com.co |
| 🇨🇱 `CL` | Chile | despegar.cl |
| 🇵🇪 `PE` | Peru | despegar.com.pe |
| 🇺🇾 `UY` | Uruguay | despegar.com.uy |
| 🇪🇨 `EC` | Ecuador | despegar.com.ec |

> **Tip:** Choose the market that matches the URL you copied. **Argentina** is the most reliable starting point.

***

### 💡 Use cases

| Use case | How this actor helps |
|----------|----------------------|
| 🏨 **Hotel reputation monitoring** | Track your property's reviews and category scores over time; catch recurring complaints early from split pros/cons. |
| 📊 **Competitor benchmarking** | Pull reviews and six category scores for every rival hotel in a city and compare cleanliness, staff and value side by side. |
| 💬 **Sentiment & voice-of-customer** | Feed pre-separated pros/cons into your NLP or LLM pipeline and skip the hardest part of review mining. |
| 📈 **Travel market research** | Study traveler preferences across Latin America — how families rate a resort vs. couples, which amenities drive praise. |
| 🤖 **ML / NLP training data** | Build large labeled review datasets (rating, trip type, language, verified flag) for classifiers and summarizers. |
| 🧳 **Aggregators & meta-search** | Enrich your own listings with Despegar guest ratings and category breakdowns. |

***

### ❓ FAQ

**How many reviews can I get per hotel?**
All of them. Set `maxReviewsPerHotel` to `0` and the actor paginates to the last page. Popular hotels routinely have 500–2,000+ reviews.

**Are pros and cons really separated?**
Yes. Despegar asks guests for what they liked and disliked as two fields, and the actor preserves that split in `pros` and `cons`.

**Can I get reviews in English?**
Set `reviewsLanguage` to `en`. Despegar translates the review text into the chosen language; the set of reviews is the same. Use `es` (or `pt`) to keep wording closest to the original.

**Do I need a proxy?**
Yes — a residential proxy is required and enabled by default with the correct country for your market.

**What if my hotel URL is from a different Despegar country?**
Set **Market** to match the URL's country (or pass the hotel ID with the right market). Domain, language and region follow it.

**Which export formats are supported?**
JSON, CSV, Excel, HTML and RSS, plus programmatic access via the Apify API and integrations (Google Sheets, Zapier, Make, Airbyte and more).

***

### 🔗 Integrations

Send results wherever you work: **Google Sheets / Excel**, **Zapier · Make · n8n**, **Airbyte / databases / webhooks**, and the **Apify API** for any language.

***

### ⚖️ Legal & responsible use

This actor collects **publicly available** hotel review information — the same content any visitor can read on a hotel page without logging in. It does not access private data and does not require any user account.

You are responsible for how you use the data. Please:

- Use the output for lawful purposes such as research, analytics, reputation monitoring and benchmarking.
- Respect the reviewed platform's Terms of Service and robots directives.
- Comply with applicable data-protection laws (e.g. GDPR, CCPA) when handling personal data such as reviewer names — aggregate or anonymize where appropriate.
- Do not republish scraped content in a way that infringes copyright or database rights.

*This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Despegar. All product names, logos and brands are property of their respective owners.*

***

### 🛟 Support

Need another Despegar market, an extra field, or hit a hotel that won't parse? Open an issue from the actor's **Issues** tab and we'll take a look.

# Actor input Schema

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

Paste Despegar hotel page URLs (e.g. https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba). The scraper collects all guest reviews for each hotel. Works with any Despegar country site (.com.ar, .com.mx, .com.co, .cl, .com.pe, .com.uy, .com.ec).

## `hotelIds` (type: `array`):

Optional. Provide Despegar numeric hotel IDs directly (the number after 'h-' in the URL, e.g. 1051991). Combine with the Market below to pick the country site.

## `market` (type: `string`):

Which Despegar country site to use. This sets the domain, language and the residential proxy country. Pick the market where the hotels are listed. Argentina is the most reliable.

## `maxReviewsPerHotel` (type: `integer`):

Maximum number of guest reviews to collect per hotel. Set to 0 for all available reviews.

## `includeHotelSummary` (type: `boolean`):

Attach the hotel's overall score, category scores (location, cleanliness, staff, Wi-Fi, service, value), total review count and Despegar's AI review summary to every review record.

## `reviewsLanguage` (type: `string`):

Every guest review is collected. This only controls the language the review text is returned in — Despegar translates comments into the chosen language. Spanish keeps most Latin American reviews in their original wording.

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

Proxy configuration. Residential proxy is required and is enabled by default with the correct country for the selected market.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"
  ],
  "hotelIds": [
    "1051991"
  ],
  "market": "AR",
  "maxReviewsPerHotel": 200,
  "includeHotelSummary": true,
  "reviewsLanguage": "es",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `reviewId` (type: `string`):

Unique Despegar review ID

## `hotelId` (type: `string`):

Despegar hotel ID

## `hotelName` (type: `string`):

Hotel name

## `authorName` (type: `string`):

Reviewer name

## `authorCountry` (type: `string`):

Reviewer country

## `ratingPoints` (type: `string`):

Guest rating out of 10

## `pros` (type: `string`):

What the guest liked (comment.good)

## `cons` (type: `string`):

What the guest disliked (comment.bad)

## `travelerType` (type: `string`):

Trip type (couple, family, business, friends, solo)

## `travelerTypeLabel` (type: `string`):

Localized trip type label

## `isVerified` (type: `string`):

Whether the reviewer is a verified guest

## `reviewDate` (type: `string`):

Month/year of the stay or review

## `reviewLanguage` (type: `string`):

Review language code

## `usefulVotes` (type: `string`):

How many users found the review useful

## `hotelScore` (type: `string`):

Hotel overall rating out of 10

## `hotelScoreText` (type: `string`):

Hotel rating label

## `totalReviews` (type: `string`):

Total guest reviews for the hotel

## `scoreLocation` (type: `string`):

Location category score

## `scoreCleanliness` (type: `string`):

Cleanliness category score

## `scoreStaff` (type: `string`):

Staff category score

## `scoreService` (type: `string`):

Service category score

## `scoreWifi` (type: `string`):

Wi-Fi category score

## `scoreValue` (type: `string`):

Price/quality category score

## `aiSummary` (type: `string`):

Despegar AI-generated review summary

## `city` (type: `string`):

Hotel city

## `address` (type: `string`):

Hotel address

## `stars` (type: `string`):

Hotel star rating

## `hotelUrl` (type: `string`):

Hotel page URL

## `market` (type: `string`):

Despegar country site used

## `scrapedAt` (type: `string`):

Extraction timestamp

# 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.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"
    ],
    "maxReviewsPerHotel": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/despegar-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.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"],
    "maxReviewsPerHotel": 200,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/despegar-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.despegar.com.ar/hoteles/h-1051991/amerian-cordoba-cordoba"
  ],
  "maxReviewsPerHotel": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call haketa/despegar-reviews-scraper --silent --output-dataset

```

## MCP server setup

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