# Travel & Hotel Price Scraper — Booking.com & Expedia (`oneary/travel-scraper`) Actor

Extract hotel prices, room rates, availability, reviews, and amenities from Booking.com, Expedia, and Kayak. Monitor travel pricing for competitive market research.

- **URL**: https://apify.com/oneary/travel-scraper.md
- **Developed by:** [Luan M.](https://apify.com/oneary) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.70 / 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.

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

## 🌍 Scrape hotel prices, room rates & reviews from Booking.com, Expedia, Kayak

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com/oneary/travel-scraper)
![Category](https://img.shields.io/badge/Category-TRAVEL-green)

> Scrape hotel prices, room rates, availability, and reviews from Booking.com, Expedia, Kayak, and other travel aggregators. Extract star ratings, amenities, location data, and customer reviews for travel market research.

***

### ✨ Features

- 🚀 **Multi-platform scraping** - Extract data from multiple sources in a single run
- 📊 **Structured output** - Clean JSON datasets ready for analysis
- ⚡ **High performance** - Parallel scraping with automatic rate limiting
- 🛡️ **Anti-blocking** - Built-in rotation and stealth techniques
- 💰 **Cost-effective** - Pay only for results ($4.0/1K results)
- 🔄 **Scheduled runs** - Automate recurring data collection via Apify scheduler
- 📤 **Multiple export formats** - JSON, CSV, Excel, and more

### 🌐 Supported Websites

- **Booking.com** - Hotels, resorts, vacation rentals
- **Expedia** - Hotel listings, packages, deals
- **Kayak** - Price comparison, hotel search
- **Hotels.com** - Property listings and reviews

### 📋 Data Output

| Field | Description |
|-------|-------------|
| hotelName | Name of the hotel or property |
| pricePerNight | Room rate per night in local currency |
| starRating | Hotel star rating (1-5) |
| guestRating | Guest review score |
| reviewCount | Number of reviews |
| amenities | List of hotel amenities |
| location | Address and coordinates |
| roomType | Room category description |
| availability | Room availability status |
| images | URLs of property photos |

### 💰 Pricing

This actor uses **PAY\_PER\_EVENT** pricing:

- **4¢ per result** ($4.00 per 1,000 results)
- Free trial available - test with sample data before committing

### 🚀 Quick Start

#### Using Apify Console

1. Open the [actor page](https://apify.com/oneary/travel-scraper)
2. Click "Try for free"
3. Configure your input parameters
4. Click "Run"

#### Using API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

## Prepare input
run_input = {}

## Run the actor
run = client.actor("oneary/travel-scraper").call(run_input=run_input)

## Fetch results
dataset = client.dataset(run["defaultDatasetId"]).list_items()
for item in dataset.items:
    print(item)
```

#### Using curl

```bash
## Run the actor
curl -X POST "https://api.apify.com/v2/acts/oneary/travel-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

## Fetch results
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN"
```

### 📚 Use Cases

- **🏨 Competitive Analysis** - Monitor competitor hotel pricing and availability
- **📊 Market Research** - Analyze travel industry trends and pricing patterns
- **🎯 Price Monitoring** - Track rate changes and identify best deals
- **📈 Revenue Management** - Optimize pricing strategies with competitor data
- **🏖️ Travel Planning** - Aggregate hotel data for travel apps and comparison tools

### ⚙️ Configuration

See the [input schema](.actor/input_schema.json) for full configuration options.

### 🔗 Integration

Connect with your favorite tools via Apify integrations:

- **Make (Integromat)** - Automate workflows
- **Zapier** - Connect with 5,000+ apps
- **Webhooks** - Real-time data delivery
- **API** - Full REST API access

### 📝 License

This actor is available under the MIT License.

***

**Built with ❤️ by [Luan (oneary)](https://apify.com/oneary)**

# Actor input Schema

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

List of Booking.com / Expedia / Kayak URLs to scrape. Leave empty to use search-based mode.

## `searchQuery` (type: `string`):

Search term, location, or query for Booking.com / Expedia / Kayak. Used when startUrls is empty.

## `maxPages` (type: `integer`):

Maximum number of pages to process.

## `maxResults` (type: `integer`):

Maximum number of results to return.

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

Proxy settings for avoiding IP blocks and anti-bot detection.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.booking.com/searchresults.html"
    }
  ],
  "searchQuery": "",
  "maxPages": 50,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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.booking.com/searchresults.html"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("oneary/travel-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.booking.com/searchresults.html" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("oneary/travel-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 '{
  "startUrls": [
    {
      "url": "https://www.booking.com/searchresults.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call oneary/travel-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/pmKJWeHtHJz51nJeq/builds/gl3GL95VcZYcC2Sqe/openapi.json
