# Despegar Hotels Scraper (`shahidirfan/despegar-hotels-scraper`) Actor

Extract hotel listings from Despegar with prices, ratings, reviews, locations, amenities, room types, availability, images, and booking URLs. Ideal for hotel price monitoring, travel market research, competitor analysis, tourism insights, and hospitality datasets.

- **URL**: https://apify.com/shahidirfan/despegar-hotels-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 Hotels Scraper do?

Despegar Hotels Scraper collects hotel listings from Despegar and Decolar destination pages across Latin America and the United States. Paste one or more destination URLs, or simply type a city name, and get every hotel the destination lists as structured JSON.

Each hotel record includes the name, star rating, guest rating, nightly price, currency, discount, amenities, images and a direct hotel link. No login or API key is required.

### Why use Despegar Hotels Scraper?

- **Destination price and rating data in minutes** - Turn public Despegar and Decolar destination pages into analytics-ready hotel data without manual copy-paste.
- **Automation-ready output** - Export to JSON, CSV, Excel or XML, or connect results to Google Sheets, Make, Zapier and webhooks.
- **Works across every market** - Collect hotels from the US, Argentina, Mexico, Colombia, Peru, Chile, Uruguay, Ecuador, Venezuela, Panama, Bolivia, Paraguay and Brazil in one Actor.
- **Flexible targeting** - Start from a destination URL, a city name, a destination ID, or a mix of several destinations in a single run.

### What data can you extract from Despegar?

| Field                | Description                                            |
| -------------------- | ------------------------------------------------------ |
| `hotelId`            | Despegar / Decolar hotel identifier                    |
| `name`               | Hotel name as listed                                   |
| `url`                | Direct hotel page URL on the same regional domain      |
| `stars`              | Hotel star rating                                      |
| `rating`             | Guest review score (0-10)                              |
| `distanceFromCenter` | Distance from the city center as displayed             |
| `price`              | Lowest nightly price shown for the offer               |
| `currency`           | Price currency code, for example `USD`, `ARS` or `BRL` |
| `priceFormatted`     | Price with currency symbol as displayed                |
| `originalPrice`      | Original price before the discount, as displayed       |
| `discountPercent`    | Discount percentage when a promotion is shown          |
| `priceMessage`       | Price context such as stay length and occupancy        |
| `destinationCharges` | Destination or local charges note when shown           |
| `referenceDate`      | Date the displayed price refers to                     |
| `amenities`          | Highlighted hotel amenities and services               |
| `amenityIds`         | Amenity identifiers for the highlighted amenities      |
| `image`              | Primary hotel image URL                                |
| `images`             | Hotel image gallery URLs                               |
| `product`            | Product type, such as `hotels`                         |
| `isNational`         | Whether the destination is domestic for the market     |
| `promoted`           | Whether the listing is promoted                        |
| `destination`        | Destination name for the listing                       |
| `destinationId`      | Destination identifier used by Despegar                |
| `moduleTitle`        | The page section the hotel was listed in               |
| `source`             | Regional domain the hotel was collected from           |
| `country`            | Market country code                                    |
| `language`           | Market language code                                   |
| `sourceUrl`          | Destination listing page URL used for the run          |
| `scrapedAt`          | ISO timestamp when the hotel was collected             |

### How to use Despegar Hotels Scraper

1. Open the Actor on Apify Store.
2. Either paste one or more destination URLs into Destination URLs, or type a city name into Location.
3. Optionally pick star ratings, a minimum guest rating and a sort order.
4. Set the maximum number of hotels to save.
5. Run the Actor.
6. Download the dataset or connect it to your workflow.

### Input Parameters

| Parameter            | Type    | Required | Default               | Description                                                                                                       |
| -------------------- | ------- | -------- | --------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | Array   | No       | -                     | Despegar / Decolar destination URLs from any regional domain. Takes priority over `location`                      |
| `location`           | String  | No       | `New York`            | Destination name, numeric destination ID, or a destination URL                                                    |
| `domain`             | String  | No       | `www.us.despegar.com` | Regional domain used to resolve `location`                                                                        |
| `stars`              | Array   | No       | -                     | Restrict results to the selected star ratings (1-5). Leave empty to collect every listed hotel                    |
| `minRating`          | Number  | No       | -                     | Keep only hotels with a guest rating of at least this value (0-10)                                                |
| `sortBy`             | String  | No       | `relevance`           | Order results: `relevance`, `rating_desc`, `stars_desc`, `price_asc`, `price_desc`                                |
| `results_wanted`     | Integer | No       | `20`                  | Maximum hotels to save across all destinations. Raise it to collect everything a destination lists                |
| `max_pages`          | Integer | No       | `10`                  | Safety cap on listing requests per destination. The standard page is used first and each star class adds one more |
| `proxyConfiguration` | Object  | No       | -                     | Optional proxy settings. A proxy is usually not required                                                          |

### Output Data

| Field                | Type    | Description                    |
| -------------------- | ------- | ------------------------------ |
| `hotelId`            | String  | Hotel identifier               |
| `name`               | String  | Hotel name                     |
| `url`                | String  | Direct hotel page URL          |
| `image`              | String  | Primary image URL              |
| `images`             | Array   | Gallery image URLs             |
| `stars`              | Number  | Star rating                    |
| `rating`             | Number  | Guest rating (0-10)            |
| `distanceFromCenter` | String  | Distance from the city center  |
| `price`              | Number  | Nightly price                  |
| `currency`           | String  | Price currency code            |
| `priceFormatted`     | String  | Formatted price                |
| `originalPrice`      | String  | Original price before discount |
| `discountPercent`    | Number  | Discount percentage            |
| `priceMessage`       | String  | Price context                  |
| `destinationCharges` | String  | Destination charges note       |
| `referenceDate`      | String  | Price reference date           |
| `amenities`          | Array   | Highlighted amenities          |
| `amenityIds`         | Array   | Amenity identifiers            |
| `product`            | String  | Product type                   |
| `isNational`         | Boolean | Domestic destination flag      |
| `promoted`           | Boolean | Promoted listing flag          |
| `destination`        | String  | Destination name               |
| `destinationId`      | String  | Destination identifier         |
| `moduleTitle`        | String  | Listing section on the page    |
| `source`             | String  | Regional domain                |
| `country`            | String  | Market country code            |
| `language`           | String  | Market language code           |
| `sourceUrl`          | String  | Destination listing page URL   |
| `scrapedAt`          | String  | Collection timestamp           |

### Usage Examples

#### Collect a destination by name

Type a city and collect the first hotels listed for it:

```json
{
    "location": "New York",
    "results_wanted": 50
}
```

#### Collect a destination by URL

Paste a Despegar destination URL from any regional domain:

```json
{
    "startUrls": ["https://www.us.despegar.com/accommodations/accommodations-in-new+york/5227"],
    "results_wanted": 100
}
```

#### Collect the full destination list

Raise the limit so every listing page and star class is included:

```json
{
    "startUrls": ["https://www.us.despegar.com/accommodations/accommodations-in-new+york/5227"],
    "results_wanted": 500
}
```

#### Filter and sort

Keep only 4 and 5 star hotels with a strong guest rating, cheapest first:

```json
{
    "location": "Cancun",
    "domain": "www.despegar.com.mx",
    "stars": [4, 5],
    "minRating": 8,
    "sortBy": "price_asc",
    "results_wanted": 100
}
```

#### Multiple markets in one run

Collect hotels from several countries at the same time:

```json
{
    "startUrls": [
        "https://www.despegar.com.ar/alojamientos/alojamientos-en-buenos+aires/982",
        "https://www.decolar.com/hospedagens/hospedagens-em-rio+de+janeiro/6381",
        "https://www.despegar.com.mx/alojamientos/alojamientos-en-cancun/1569"
    ],
    "results_wanted": 300
}
```

### Sample Output

```json
{
    "hotelId": "2192993",
    "name": "Hotel Riu Plaza Manhattan Times Square",
    "url": "https://www.us.despegar.com/hotels/h-2192993/hotel-riu-plaza-manhattan-times-square-new+york",
    "image": "https://media.staticontent.com/media/pictures/28ff3ad4-dfe2-418b-a1de-d5962caddb3f",
    "images": ["https://media.staticontent.com/media/pictures/28ff3ad4-dfe2-418b-a1de-d5962caddb3f"],
    "stars": 4,
    "rating": 9.2,
    "distanceFromCenter": "0.06 mi from downtown",
    "price": 185,
    "currency": "USD",
    "priceFormatted": "$185",
    "originalPrice": "290",
    "discountPercent": 36,
    "priceMessage": "1 night, 2 people from",
    "destinationCharges": "+ $ 33 in destination charges",
    "referenceDate": "21 January 2027",
    "amenities": ["Free Wi-Fi in common areas", "Gym / Fitness center"],
    "amenityIds": ["INGRAH", "GIM"],
    "product": "hotels",
    "isNational": true,
    "promoted": false,
    "destination": "New York",
    "destinationId": "5227",
    "moduleTitle": "Popular Hotel Deals in New York",
    "source": "www.us.despegar.com",
    "country": "US",
    "language": "en",
    "sourceUrl": "https://www.us.despegar.com/accommodations/accommodations-in-new+york/5227",
    "scrapedAt": "2026-10-18T15:58:00.938Z"
}
```

### Supported markets

| Market        | Example domain        |
| ------------- | --------------------- |
| United States | `www.us.despegar.com` |
| Argentina     | `www.despegar.com.ar` |
| Mexico        | `www.despegar.com.mx` |
| Colombia      | `www.despegar.com.co` |
| Peru          | `www.despegar.com.pe` |
| Chile         | `www.despegar.com.cl` |
| Uruguay       | `www.despegar.com.uy` |
| Ecuador       | `www.despegar.com.ec` |
| Venezuela     | `www.despegar.com.ve` |
| Panama        | `www.despegar.com.pa` |
| Bolivia       | `www.despegar.com.bo` |
| Paraguay      | `www.despegar.com.py` |
| Brazil        | `www.decolar.com`     |

### Tips for Best Results

- Leave Destination URLs empty to use the Location field, or fill Destination URLs to target specific pages.
- Raise `results_wanted` above the default to collect the full destination list. A large value collects every listing page and star class.
- Select star ratings to focus on a specific segment. Leaving them empty collects every hotel the destination lists.
- Use `sortBy` with `price_asc` or `rating_desc` to surface the best options first.
- Some hotels list without a price or rating. Empty fields are omitted from each record, so a record may not contain every field.
- Prices reflect the lowest nightly rate shown for one night and two guests. Treat them as indicative, not final.
- Public pages change over time. Report any gaps through the Issues tab.

### Integrations

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

### Frequently Asked Questions

#### Can I export Despegar hotel data 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 hotels from more than one country in one run?

Yes. Add destination URLs from several regional domains to Destination URLs. `results_wanted` caps the total number of hotels across the run.

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

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

#### Why are there fewer hotels than the city has in total?

Despegar publishes a curated selection on each destination page, grouped into sections such as popular deals, top rated hotels and hotels by star rating. The Actor collects every hotel those sections list and unions the star classes to maximize coverage.

#### Can I collect only 5-star hotels?

Yes. Select `5 stars` in the Star ratings input. The Actor then returns only the 5-star hotels the destination lists.

#### Why is a price missing for some hotels?

Some properties are listed without a nightly price on the destination page. Those records still include the name, rating, stars, images and link.

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

Yes. Schedule the Actor in Apify Console to refresh hotel prices daily, weekly or at any interval.

#### Is it legal to scrape Despegar hotel data?

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 listing 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 destination listing URLs from any regional domain. Example: https://www.us.despegar.com/accommodations/accommodations-in-new+york/5227. When provided, these take priority over the Location field.

## `location` (type: `string`):

A destination name such as "New York" or "Buenos Aires", a numeric destination ID, or a destination URL. Used when no Destination URLs are supplied.

## `domain` (type: `string`):

Regional Despegar / Decolar domain used to resolve the Location, for example www.us.despegar.com, www.despegar.com.ar, www.despegar.com.mx or www.decolar.com.

## `stars` (type: `array`):

Optional. Restrict hotels to the selected star ratings. Leave empty to collect every hotel the destination lists.

## `minRating` (type: `number`):

Optional. Only keep hotels whose guest rating (0-10) is at least this value.

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

Order in which hotels are saved.

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

Maximum number of hotels to save across all destinations. Raise it to collect everything a destination lists.

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

Safety cap on how many listing pages are requested per destination. The standard page is used first and each star class adds one more page.

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

Optional. Destination pages are public, so a proxy is usually not required. Use Apify Proxy if you scrape many destinations.

## Actor input object example

```json
{
  "location": "New York",
  "domain": "www.us.despegar.com",
  "sortBy": "relevance",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {}
}
```

# Actor output Schema

## `hotels` (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 = {
    "location": "New York"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/despegar-hotels-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 = { "location": "New York" }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/despegar-hotels-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 '{
  "location": "New York"
}' |
apify call shahidirfan/despegar-hotels-scraper --silent --output-dataset

```

## MCP server setup

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