# Priceline Hotels Scraper (`shahidirfan/priceline-hotels-scraper`) Actor

Scrape real-time hotel prices, availability, ratings & booking links from Priceline globally. Perfect for price monitoring, competitor analysis, travel analytics & hospitality research. Get structured, ETL-ready data for market intelligence & AI datasets.

- **URL**: https://apify.com/shahidirfan/priceline-hotels-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 96.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/platform/actors/running/actors-in-store#pay-per-usage

## 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

### What does Priceline Hotels Scraper do?

Priceline Hotels Scraper collects hotel listings and search results from Priceline into a structured dataset. Provide a Priceline listings URL, a destination ID, or a keyword, and the scraper returns hotel names, nightly and total pricing, star ratings, review scores, amenity lists, images, and cancellation policies. Built for travel research, rate monitoring, and hospitality market analysis at scale.

### Why use Priceline Hotels Scraper?

- **Reliable travel dataset creation** - Collect Priceline hotel data without manual copy-paste or browser sessions. The scraper handles pagination, duplicate removal, and session management automatically.
- **Automation-ready output** - Export results to JSON, CSV, Excel, or XML. Schedule the scraper on Apify to track pricing changes daily or weekly for any destination.
- **Flexible search input** - Start from a full Priceline listings URL, a destination ID with dates, or just a keyword. The scraper derives the request context from your input.
- **Production-grade reliability** - Automatic retries with fresh proxy sessions, residential proxy support, and challenge-page detection keep runs stable.

### What data can you extract from Priceline?

| Field | Description |
|-------|-------------|
| `hotel_name` | Hotel property name |
| `hotel_url` | Direct link to Priceline hotel detail page |
| `city` | Hotel city name |
| `star_level` | Star rating text such as "4-star hotel" |
| `brand_name` | Hotel brand name |
| `min_price_formatted` | Formatted minimum nightly rate |
| `grand_total_formatted` | Formatted total stay cost |
| `cancellation_policy` | Cancellation policy label |
| `review_score_cleanliness` | Cleanliness rating score |
| `review_score_location` | Location rating score |
| `amenities` | List of amenity names |
| `primary_image_url` | Primary hotel image URL |
| `total_available_hotels` | Total hotels available for the search |

### How to use Priceline Hotels Scraper

1. Open the Actor on Apify Store.
2. Provide a Priceline listings URL, a destination ID with check-in/check-out dates, or a keyword.
3. Set the result limit and optional page cap.
4. Run the Actor.
5. Download the dataset or connect it to your workflow through integrations.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | - | Full Priceline `/relax-ui/listings` URL with destination, dates, rooms, and adults |
| `destination` | String | No | - | Destination ID or keyword when no URL is provided |
| `checkIn` | String | No | - | Check-in date in `YYYY-MM-DD` or `YYYYMMDD` format |
| `checkOut` | String | No | - | Check-out date in `YYYY-MM-DD` or `YYYYMMDD` format |
| `rooms` | Integer | No | `1` | Number of rooms |
| `adults` | Integer | No | `2` | Number of adult guests |
| `results_wanted` | Integer | No | `20` | Maximum hotel listings to save |
| `max_pages` | Integer | No | `5` | Maximum listing pages to request |
| `proxyConfiguration` | Object | No | Apify Proxy | Proxy settings for reliable access |

### Output Data

| Field | Type | Description |
|-------|------|-------------|
| `hotel_id` | String | Unique Priceline hotel identifier |
| `hotel_name` | String | Hotel property name |
| `hotel_url` | String | Direct link to hotel detail page |
| `source_url` | String | Listings URL used for the search |
| `city` | String | Hotel city |
| `state_code` | String | State or region code |
| `country_code` | String | Country code |
| `neighborhood` | String | Neighborhood or district name |
| `latitude` | Number | Property latitude coordinate |
| `longitude` | Number | Property longitude coordinate |
| `star_level` | String | Star rating text (e.g. "4-star hotel") |
| `brand_name` | String | Hotel brand name |
| `review_count_label` | String | Total review count label |
| `review_score_cleanliness` | Number | Cleanliness rating score |
| `review_score_location` | Number | Location rating score |
| `review_score_service` | Number | Service rating score |
| `review_score_value` | Number | Value rating score |
| `review_score_condition` | Number | Property condition score |
| `min_price` | Number | Minimum nightly price amount |
| `min_price_formatted` | String | Formatted minimum price |
| `min_price_currency` | String | Currency code |
| `grand_total` | Number | Total stay price amount |
| `grand_total_formatted` | String | Formatted total stay cost |
| `grand_total_excluding_tax` | Number | Total price before tax |
| `nightly_price_excluding_tax` | Number | Nightly rate before tax |
| `cancellation_policy` | String | Cancellation policy label |
| `payment_disclaimer` | String | Payment terms disclaimer |
| `amenities` | Array | List of amenity names |
| `trait_badges` | Array | Property trait badge objects |
| `image_urls` | Array | Hotel image URLs |
| `primary_image_url` | String | Primary hotel image |
| `total_available_hotels` | Number | Total hotels available for the search |

### Usage Examples

#### Search by Listings URL

Collect 20 hotels from a Priceline search page by providing the full listings URL:

```json
{
  "startUrl": "https://www.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
  "results_wanted": 20
}
```

#### Search by Destination with Dates

Use a destination ID with custom check-in and check-out dates:

```json
{
  "destination": "3000035825",
  "checkIn": "2026-07-16",
  "checkOut": "2026-08-01",
  "rooms": 1,
  "adults": 2,
  "results_wanted": 50,
  "max_pages": 3
}
```

#### Large Collection Run

Collect 200 hotels with residential proxies for maximum reliability:

```json
{
  "destination": "3000035825",
  "checkIn": "2026-07-16",
  "checkOut": "2026-08-01",
  "rooms": 1,
  "adults": 2,
  "results_wanted": 200,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Sample Output

```json
{
  "hotel_id": "326303",
  "hotel_name": "Example Central London Hotel",
  "hotel_url": "https://www.priceline.com/relax/at/326303",
  "source_url": "https://www.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
  "city": "London",
  "country_code": "GB",
  "neighborhood": "Westminster",
  "latitude": 51.5072,
  "longitude": -0.1276,
  "star_level": "4-star hotel",
  "brand_name": "Marriott",
  "review_count_label": "5,108 Reviews",
  "review_score_cleanliness": 8.1,
  "review_score_location": 9.2,
  "min_price": 214,
  "min_price_formatted": "$214",
  "min_price_currency": "USD",
  "grand_total": 3424,
  "grand_total_formatted": "$3,424",
  "grand_total_excluding_tax": 3100,
  "cancellation_policy": "Free cancellation",
  "amenities": ["Free Internet", "Restaurant", "Fitness Center"],
  "primary_image_url": "https://images.example.com/hotel.jpg",
  "total_available_hotels": 842
}
```

### Tips for Best Results

- Start with `results_wanted: 20` for initial testing. Check if your destination returns enough hotels before scaling up.
- Always include `checkIn` and `checkOut` dates when using a destination ID. Set realistic `rooms` and `adults` values.
- Enable residential proxies for large runs or repeated searches. The scraper retries with fresh proxy sessions if needed.
- The total available hotel count reflects Priceline's search results, not the number of records saved.
- Destination IDs are numeric codes tied to Priceline's location system. Use the full listings URL if you are unsure about the correct destination ID.
- Some fields are omitted when Priceline does not provide them for a specific property. This is normal and not a scraper issue.

### Integrations

- **Google Sheets** - Import hotel pricing and ratings for analysis.
- **Airtable** - Build searchable hotel databases.
- **Make** - Create automated travel reports and notifications.
- **Zapier** - Trigger exports to other business tools.
- **Webhooks** - Send results to custom downstream systems.
- **API** - Access datasets programmatically from your own applications.

#### Export Formats

- **JSON** - For data pipelines and API consumption.
- **CSV** - For spreadsheet analysis.
- **Excel** - For business reporting.
- **XML** - For system integrations.

### Frequently Asked Questions

#### What input options are supported?

You can provide a full Priceline listings URL, a destination ID with dates, or a keyword. The scraper accepts `startUrl`, `destination`, `checkIn`, `checkOut`, `rooms`, and `adults`.

#### Can I collect more than 200 results?

Yes. Adjust `results_wanted` and `max_pages` to your needs. The scraper fetches pages until your target count is reached or Priceline has no more results.

#### Does this scraper handle multiple destinations in one run?

No. Each run handles one search. Schedule separate runs for different destinations to compare pricing across cities.

#### What pricing data is available?

The scraper collects minimum nightly rates, total stay prices, tax-excluded pricing, savings amounts, savings percentages, and currency information.

#### Does the output include hotel review text?

No. It collects listing-level data including review scores and counts, not individual guest comments. For review text, see the Priceline Hotel Reviews Scraper.

#### Why does the output have fewer results than requested?

Priceline may return fewer hotels than your limit if the destination has limited inventory or if the search filters narrow results.

#### What proxy configuration works best?

Residential proxies produce the most reliable results. The scraper retries with fresh proxy sessions when needed.

#### Are duplicates removed?

Yes. Duplicate hotel entries are detected and removed automatically.

#### Does the output include hotel images?

Yes. Each record includes `primary_image_url` and an `image_urls` array with up to five images.

### Related Actors

- [Priceline Hotel Reviews Scraper](https://apify.com/shahidirfan/priceline-hotel-reviews-scraper) - Collect guest reviews and ratings from Priceline hotel pages.
- [Trip.com Hotels Scraper](https://apify.com/shahidirfan/trip-com-hotels-scraper) - Extract hotel listings, prices, and reviews from Trip.com.
- [Tripadvisor Hotels Scraper](https://apify.com/shahidirfan/tripadvisor-hotels-scraper) - Collect hotel names, ratings, review counts, and pricing from Tripadvisor.
- [Hostelworld Hotels Scraper](https://apify.com/shahidirfan/hostelworld-hotels-scraper) - Extract hostel and hotel listings from Hostelworld globally.

### 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 data collection from publicly available Priceline hotel listings. Users are responsible for complying with applicable laws, website terms of service, and privacy rules. Use data responsibly and respect rate limits.

# Actor input Schema

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

Priceline hotel listings URL, for example a /relax-ui/listings URL with destination, dates, rooms, and adults.

## `destination` (type: `string`):

Destination ID or search keyword. Used when Start URL is empty.

## `checkIn` (type: `string`):

Check-in date in YYYY-MM-DD or YYYYMMDD format.

## `checkOut` (type: `string`):

Check-out date in YYYY-MM-DD or YYYYMMDD format.

## `rooms` (type: `integer`):

Number of rooms.

## `adults` (type: `integer`):

Number of adult guests.

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

Maximum number of hotel listings to save.

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

Maximum listing pages to request.

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

Optional proxy settings for Priceline requests.

## Actor input object example

```json
{
  "startUrl": "https://www.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
  "destination": "3000035825",
  "checkIn": "2026-07-16",
  "checkOut": "2026-08-01",
  "rooms": 1,
  "adults": 2,
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
    "destination": "3000035825",
    "checkIn": "2026-07-16",
    "checkOut": "2026-08-01",
    "rooms": 1,
    "adults": 2,
    "results_wanted": 20,
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/priceline-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.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
    "destination": "3000035825",
    "checkIn": "2026-07-16",
    "checkOut": "2026-08-01",
    "rooms": 1,
    "adults": 2,
    "results_wanted": 20,
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/priceline-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.priceline.com/relax-ui/listings?destination=3000035825&checkIn=20260716&checkOut=20260801&rooms=1&adults=2",
  "destination": "3000035825",
  "checkIn": "2026-07-16",
  "checkOut": "2026-08-01",
  "rooms": 1,
  "adults": 2,
  "results_wanted": 20,
  "max_pages": 5
}' |
apify call shahidirfan/priceline-hotels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bXPHudMLGgVwEAi7V/builds/3NWks2CICWhmRbtRJ/openapi.json
