# Despegar & Decolar Reviews Scraper — AI Summary & Filters (`korado_labs/despegar-reviews-scraper`) Actor

Scrape Despegar & Decolar hotel reviews: comments, ratings, traveler types, useful votes, Expedia-syndicated reviews, category breakdowns and an AI review digest. Date & traveler-type filters. Export data, run via API, schedule runs, or integrate with other tools.

- **URL**: https://apify.com/korado\_labs/despegar-reviews-scraper.md
- **Developed by:** [Korado Labs](https://apify.com/korado_labs) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 & Decolar Reviews Scraper

Scrape structured **hotel reviews and rating data from Despegar and Decolar** — Latin America's largest online travel platform, covering Argentina, Mexico, Brazil, Colombia, Chile and more.

Each run returns clean, analytics-ready JSON:

- guest reviews with reviewer name, country, traveler type, language and month
- positive and negative comments in their original language
- per-review overall rating and **useful-votes count**
- reviews collected by Despegar **and reviews syndicated from Expedia**
- hotel-level summary: average rating + category ratings (service, staff, location, cleanliness, value, internet)
- **Despegar's AI-generated review digest** per hotel — a ready-made sentiment summary, included free

### Why this scraper

| | This Actor | Typical alternatives |
|---|---|---|
| Reviewer metadata (name, country, type, language) | ✅ | ✅ |
| Useful-votes per review | ✅ | ❌ |
| AI review digest per hotel | ✅ | ❌ |
| Traveler-type filter (family / couple / friends / solo) | ✅ | ❌ |
| Sort control (newest / highest / lowest / relevance) | ✅ | ❌ |
| Hotel IDs as direct input (no URL needed) | ✅ | ❌ |
| Date filtering for incremental runs | ✅ | ✅ |
| Actor start fee | **$0** | $0.002 |

No browser, no login, no API key. Fast HTTP scraping with automatic retry and proxy fallback baked in.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | – | Despegar / Decolar hotel page URLs. All regional domains supported. |
| `hotelIds` | array | – | Alternative to URLs: numeric hotel IDs (the number after `h-` in the URL). Mixable with `startUrls`. |
| `maxReviewsPerHotel` | integer | `100` | Max review records per hotel. |
| `cutoffDate` | string | – | `YYYY-MM` or `YYYY-MM-DD`. Only reviews from this month onwards — ideal for scheduled incremental monitoring. |
| `enabledProviders` | array | `["DESPEGAR", "EXPEDIA"]` | Review sources to include. |
| `travelerTypes` | array | all | Only reviews by these traveler types: `family`, `couple`, `friends`, `singles`. |
| `sortBy` | string | `relevance_desc` | `reviewed_date_desc`, `overall_rating_desc`, `overall_rating_asc` or `relevance_desc`. |
| `includeAiSummary` | boolean | `true` | Include the AI review digest in the summary record. |
| `alwaysReturnSummary` | boolean | `true` | Push a summary record even when no review matches. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya" }
  ],
  "maxReviewsPerHotel": 100,
  "cutoffDate": "2026-01",
  "travelerTypes": ["family", "couple"],
  "sortBy": "reviewed_date_desc"
}
```

Supported URL shapes:

```text
https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya
https://www.despegar.com.ar/hoteles/h-788634/some-hotel-name
https://www.decolar.com/accommodations/detail/252075
```

### Output

Each dataset item is a `review` or a `summary` record (`recordType` field).

#### Review record

```json
{
  "recordType": "review",
  "reviewId": "64d67797fec9ce528367501c",
  "reviewDate": "2023-08",
  "reviewDateText": "August 2023",
  "reviewerName": "Raquel",
  "reviewerCountry": "Mexico",
  "reviewerCountryCode": "MX",
  "reviewerType": "Couple",
  "reviewerTypeId": "couple",
  "language": "es",
  "reviewerCommentPositive": "Es un hotel grande, todo incluido",
  "reviewerCommentNegative": "Está demasiado descuidado...",
  "usefulVotes": 41,
  "provider": "DESPEGAR",
  "providerLabel": "Host verified",
  "ratings": { "overall": 6.0 },
  "hotelSummary": {
    "hotelId": "352691",
    "startUrl": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya",
    "numberOfReviews": 100,
    "totalReviewsOnSite": 198,
    "ratings": {
      "average": 6.8, "service": 6.9, "staff": 7.7, "location": 7.7,
      "cleanliness": 7.3, "value": 7.9, "internet": 6.8
    },
    "aiSummary": "The hotel is beautiful, and the staff is incredibly friendly...",
    "travelerProfiles": [
      { "id": "general", "label": "All" },
      { "id": "family", "label": "Family" }
    ]
  }
}
```

#### Summary record

Pushed once per hotel (`alwaysReturnSummary`), even when no review matches your filters — so monitoring runs always confirm the hotel's current aggregate ratings.

```json
{
  "recordType": "summary",
  "hotelSummary": { "hotelId": "352691", "...": "..." }
}
```

### Pricing

Pay per delivered record — **no actor start fee, failed lookups are free**:

- **Review** — $0.005 per review record
- **Hotel summary** — $0.002 per summary record

Example: 3 hotels × 100 reviews + 3 summaries = **$1.51**. A daily incremental check that finds 5 new reviews across 3 hotels costs **$0.031**.

### Use cases

- **Sentiment analysis** — Spanish and Portuguese review text for NLP pipelines in LatAm travel markets, with the AI digest as a free baseline.
- **Competitive intelligence** — benchmark hotels by category ratings across Despegar, Decolar and Expedia inventory.
- **Review monitoring** — schedule runs with `cutoffDate` to capture only new reviews; summary records confirm aggregate movement.
- **Hospitality analytics** — segment feedback by traveler type (family vs couple vs solo) and by reviewer country.
- **Cross-platform aggregation** — combine with other OTA review scrapers for full market coverage.

### FAQ

**Do I need a proxy?** No — the Actor works without one and falls back to Apify proxy automatically if a request is blocked. You can force a specific proxy via `proxyConfiguration`.

**Why are dates month-only?** Despegar stores review dates at month granularity; `reviewDate` is normalized to `YYYY-MM`.

**Why do some reviews have `reviewerComment` instead of positive/negative comments?** Expedia-syndicated reviews use a single free-text comment; Despegar-collected reviews split it into positive and negative. Expedia reviews also carry no reviewer country or traveler type — that metadata isn't published for them.

**Is scraping reviews legal?** This Actor collects only publicly visible review content. You are responsible for how you use the data.

***

If this Actor helps your workflow, a rating on Apify is appreciated. Found an issue or missing a field? Open an issue — response time is usually under a day.

# Actor input Schema

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

Hotel detail page URLs on Despegar or Decolar. All regional domains work (us.despegar.com, despegar.com.ar, despegar.com.mx, decolar.com, ...).

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

Alternative to URLs: numeric Despegar hotel IDs (the number after `h-` in the hotel page URL, e.g. `352691`). You can mix this with Hotel URLs.

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

Maximum number of review records to return per hotel.

## `cutoffDate` (type: `string`):

Only return reviews from this month onwards — ideal for incremental monitoring runs. Accepts YYYY-MM or YYYY-MM-DD (day ignored: Despegar stores review dates at month granularity). Leave empty for all reviews.

## `enabledProviders` (type: `array`):

Which review sources to include. Despegar hotel pages mix reviews collected by Despegar itself and reviews syndicated from Expedia.

## `travelerTypes` (type: `array`):

Only return reviews written by these traveler types. Leave empty for all.

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

Order in which reviews are collected. When a cutoff date is set, date order is used automatically so the run can stop early.

## `includeAiSummary` (type: `boolean`):

Include Despegar's AI-generated digest of all guest reviews in the hotel summary (free — no extra charge).

## `alwaysReturnSummary` (type: `boolean`):

Push one hotel summary record per hotel even when no review matches the filters.

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

Optional. The scraper works without a proxy by default and falls back to Apify proxy automatically on blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya"
    }
  ],
  "maxReviewsPerHotel": 100,
  "cutoffDate": "2026-01",
  "enabledProviders": [
    "DESPEGAR",
    "EXPEDIA"
  ],
  "sortBy": "relevance_desc",
  "includeAiSummary": true,
  "alwaysReturnSummary": true
}
```

# Actor output Schema

## `reviews` (type: `string`):

All scraped review and hotel summary records as JSON. Each item has recordType 'review' or 'summary'.

# 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": [
        {
            "url": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya"
        }
    ],
    "maxReviewsPerHotel": 100,
    "enabledProviders": [
        "DESPEGAR",
        "EXPEDIA"
    ],
    "includeAiSummary": true,
    "alwaysReturnSummary": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("korado_labs/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": [{ "url": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya" }],
    "maxReviewsPerHotel": 100,
    "enabledProviders": [
        "DESPEGAR",
        "EXPEDIA",
    ],
    "includeAiSummary": True,
    "alwaysReturnSummary": True,
}

# Run the Actor and wait for it to finish
run = client.actor("korado_labs/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": [
    {
      "url": "https://www.us.despegar.com/hotels/h-352691/bluebay-grand-esmeralda-all-inclusive-riviera+maya"
    }
  ],
  "maxReviewsPerHotel": 100,
  "enabledProviders": [
    "DESPEGAR",
    "EXPEDIA"
  ],
  "includeAiSummary": true,
  "alwaysReturnSummary": true
}' |
apify call korado_labs/despegar-reviews-scraper --silent --output-dataset

```

## MCP server setup

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