# Trivago Hotels Scraper (`shahidirfan/trivago-hotels-scraper`) Actor

Extract hotel prices, ratings, and availability data from Trivago. Scrape property listings across destinations for competitive pricing analysis, travel research, and market intelligence. Supports filtering by location, dates, and guest preferences.

- **URL**: https://apify.com/shahidirfan/trivago-hotels-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN 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/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Trivago Hotels Scraper

Extract comprehensive hotel listings from Trivago with ease. Collect hotel names, prices, ratings, reviews, amenities, and images at scale. Perfect for travel research, price monitoring, and competitive analysis.

### Features

- **Hotel Listings** — Extracts complete hotel data including name, price, and ratings
- **Pricing Data** — Captures price per night and total stay cost in multiple currencies
- **Guest Ratings** — Collects guest scores, review counts, and rating categories
- **Star Classification** — Extracts official hotel star ratings
- **Location Details** — Captures hotel address and distance from city center
- **Hotel Images** — Retrieves direct image URLs for each property
- **Amenity Lists** — Collects available hotel amenities
- **Flexible Input** — Supports direct Trivago search URLs or destination-based search
- **Date Filtering** — Filter results by check-in and check-out dates
- **Pagination** — Automatically fetches multiple pages to meet your result target

---

### Use Cases

#### Travel Research
Compare hotel prices and ratings across destinations before booking. Collect comprehensive data including pricing, amenities, and guest ratings to make informed travel decisions.

#### Price Monitoring
Track hotel price fluctuations over time for specific destinations and dates. Build automated pipelines to alert on price drops or availability changes at key properties.

#### Market Intelligence
Analyze the hotel market in any city or region. Understand pricing benchmarks, guest satisfaction trends, and competition across star ratings and property types.

#### Data Analytics
Build rich datasets for hospitality industry analysis. Combine Trivago data with other sources to power dashboards, models, or investment decisions.

#### Travel Platform Development
Populate travel comparison tools and hotel finder apps with live data. Automate data ingestion instead of manual searching.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | — | Full Trivago search URL (overrides Destination) |
| `destination` | String | No | `Tokyo, Japan` | Hotel destination to search (city, country) |
| `checkIn` | String | No | — | Check-in date in YYYY-MM-DD format |
| `checkOut` | String | No | — | Check-out date in YYYY-MM-DD format |
| `adults` | Integer | No | `2` | Number of adults for the search |
| `results_wanted` | Integer | No | `20` | Maximum number of hotels to collect |
| `proxyConfiguration` | Object | No | Residential | Proxy settings for reliable extraction |

---

### Output Data

Each hotel record in the dataset contains:

| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Hotel name |
| `guestRating` | Number | Guest rating score (e.g. 8.5 out of 10) |
| `ratingCategory` | String | Rating label (e.g. "Excellent", "Very Good") |
| `reviewsCount` | Number | Total number of guest reviews |
| `starRating` | Number | Official hotel star classification (1–5) |
| `pricePerNight` | Number | Nightly price in selected currency |
| `currency` | String | Currency code (e.g. USD, EUR) |
| `totalPrice` | Number | Total stay cost for selected dates |
| `distanceInfo` | String | Distance from city center or landmark |
| `address` | String | Hotel street address |
| `imageUrl` | String | Direct URL to the hotel's primary image |
| `trivago_url` | String | Direct link to hotel page on Trivago |
| `amenities` | Array | List of key hotel amenities |

---

### Usage Examples

#### Search by Destination

Search hotels in a city using destination-based input:

```json
{
    "destination": "Paris, France",
    "checkIn": "2026-07-15",
    "checkOut": "2026-07-18",
    "adults": 2,
    "results_wanted": 50
}
````

#### Search by Direct URL

Use a Trivago search URL directly for precise results:

```json
{
    "startUrl": "https://www.trivago.com/en-US/lm/hotels-tokyo-japan?search=200-71462;dr-20260609-20260610;drs-20",
    "results_wanted": 100
}
```

#### Large Dataset Collection

Collect a large batch of hotels for market analysis:

```json
{
    "destination": "New York, USA",
    "checkIn": "2026-08-01",
    "checkOut": "2026-08-03",
    "adults": 2,
    "results_wanted": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### Sample Output

```json
{
    "name": "Park Hyatt Tokyo",
    "guestRating": 9.1,
    "ratingCategory": "Exceptional",
    "reviewsCount": 3248,
    "starRating": 5,
    "pricePerNight": 412.00,
    "currency": "USD",
    "totalPrice": 412.00,
    "distanceInfo": "1.2 km from city center",
    "address": "3-7-1-2 Nishi Shinjuku, Shinjuku, Tokyo",
    "imageUrl": "https://imgcy.trivago.com/c_limit,d_dummy.jpeg,f_auto,h_520,q_auto,w_520/itemimages/82/43/82434_v5.jpeg",
    "trivago_url": "https://www.trivago.com/en-US/lm/hotel-rooms/tokyo-japan/park-hyatt-tokyo-82434",
    "amenities": ["Free WiFi", "Swimming Pool", "Fitness Center", "Restaurant", "Spa", "Bar"]
}
```

***

### Tips for Best Results

#### Use a Direct Trivago URL

- Copy the URL from a Trivago search for the most precise results
- Include date parameters in the URL for accurate pricing data
- The scraper reads all search parameters from the URL automatically

#### Set Realistic Result Counts

- Start with 20–50 results for quick testing
- Use 100–200 for production data collection
- Large datasets may require more time to collect

#### Proxy Configuration

- Residential proxies are recommended for reliable results
- Enable proxy via the `proxyConfiguration` input field
- Datacenter proxies may be blocked by Trivago

#### Date Ranges

- Always provide check-in and check-out dates for accurate pricing
- Without dates, prices may not be available in results
- Use future dates to get current availability and pricing

***

### Integrations

Connect your hotel data with:

- **Google Sheets** — Export for price tracking spreadsheets
- **Airtable** — Build searchable hotel databases
- **Slack** — Get price drop notifications
- **Webhooks** — Send to custom endpoints and systems
- **Make** — Create automated travel monitoring workflows
- **Zapier** — Trigger booking alerts and notifications

#### Export Formats

Download data in multiple formats:

- **JSON** — For developers and APIs
- **CSV** — For spreadsheet analysis
- **Excel** — For business reporting
- **XML** — For system integrations

***

### Frequently Asked Questions

#### How many hotels can I collect?

You can collect all available hotels for a given search. The practical limit depends on the destination and how many Trivago lists for that city.

#### Do I need a Trivago account?

No, the scraper works without any Trivago credentials or subscription.

#### Can I collect data for multiple cities?

Yes, run the actor multiple times with different destination inputs, or use the Apify API to schedule runs across multiple cities.

#### Are prices accurate?

Prices reflect what Trivago shows at the time of the run. For the most current prices, always include check-in and check-out dates.

#### What if some fields are empty?

Some fields like amenities or total price may be empty if Trivago doesn't provide that information for the specific hotel or search dates.

#### Can I filter by star rating?

Use a Trivago URL that already has star rating filters applied, then pass it as `startUrl`.

#### How long does a run take?

For 20 hotels, the run typically completes in 1–2 minutes. Larger datasets take proportionally longer.

#### What proxies should I use?

Residential proxies are strongly recommended. Trivago may block datacenter IPs. Apify's residential proxy pool works reliably.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring compliance with Trivago's terms of service and applicable data protection laws. Use data responsibly, respect rate limits, and do not use collected data for unauthorized commercial purposes.

# Actor input Schema

## `startUrl` (type: `string`):

Full Trivago hotel listing or search URL to scrape, such as a dated search URL or a city listing page.

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

Maximum number of hotel listings to collect.

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

Use Apify Proxy for reliable scraping. Residential proxies recommended.

## Actor input object example

```json
{
  "startUrl": "https://www.trivago.com/en-US/lm/hotels-tokyo-japan?search=200-71462;dr-20260609-20260610;drs-20",
  "results_wanted": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrl": "https://www.trivago.com/en-US/lm/hotels-tokyo-japan?search=200-71462;dr-20260609-20260610;drs-20",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/trivago-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 = {
    "startUrl": "https://www.trivago.com/en-US/lm/hotels-tokyo-japan?search=200-71462;dr-20260609-20260610;drs-20",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/trivago-hotels-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrl": "https://www.trivago.com/en-US/lm/hotels-tokyo-japan?search=200-71462;dr-20260609-20260610;drs-20",
  "results_wanted": 20
}' |
apify call shahidirfan/trivago-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/trivago-hotels-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trivago Hotels Scraper",
        "description": "Extract hotel prices, ratings, and availability data from Trivago. Scrape property listings across destinations for competitive pricing analysis, travel research, and market intelligence. Supports filtering by location, dates, and guest preferences.",
        "version": "0.0",
        "x-build-id": "y3TX7WSrz3kvWfXtm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~trivago-hotels-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-trivago-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/shahidirfan~trivago-hotels-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-trivago-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/shahidirfan~trivago-hotels-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-trivago-hotels-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Full Trivago hotel listing or search URL to scrape, such as a dated search URL or a city listing page."
                    },
                    "results_wanted": {
                        "title": "Maximum number of hotels",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of hotel listings to collect.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliable scraping. Residential proxies recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
