# Skiplagged Hotels Scraper (`shahidirfan/skiplagged-hotels-scraper`) Actor

Scrape Skiplagged hotel listings, prices, ratings, locations, property details, amenities, availability, and booking data at scale. Extract structured hotel and accommodation data for travel research, price comparison, market analysis, lead generation, and datasets.

- **URL**: https://apify.com/shahidirfan/skiplagged-hotels-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 50.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?

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 Skiplagged Hotels Scraper API do?

Skiplagged Hotels Scraper API collects structured hotel search results from Skiplagged. Provide a Skiplagged hotel URL with a city, check-in date, and check-out date, then receive one dataset item per hotel with pricing, location, ratings, amenities, availability signals, policies, photos, and booking links.

Use the Actor for hotel price monitoring, travel market research, accommodation comparison, hospitality analysis, destination research, and travel application data. Run it with one Skiplagged hotel URL or a numeric location ID.

### Why use Skiplagged Hotels Scraper API?

- **Compare accommodation prices** - Collect nightly and total prices together with currency, stay dates, guest counts, and room counts.

- **Build destination datasets** - Gather hotel names, addresses, coordinates, chains, stars, review ratings, and review counts for a city.

- **Monitor hotel changes** - Schedule repeat runs for price, availability, ranking, and policy tracking.

- **Keep exports clean** - Empty values are omitted from each dataset item, so records do not contain repeated `null` or empty fields.

- **Connect to your workflow** - Use Apify datasets, exports, API access, schedules, webhooks, Google Sheets, Make, or Zapier.

### What data can you extract from Skiplagged hotels?

| Field                         | Type    | Description                                                    |
| ----------------------------- | ------- | -------------------------------------------------------------- |
| `rank`                        | Integer | Position after sorting.                                        |
| `hotel_id`                    | Integer | Skiplagged hotel identifier.                                   |
| `name`                        | String  | Hotel or accommodation name.                                   |
| `chain_name`                  | String  | Hotel chain when available.                                    |
| `address`                     | String  | Published property address.                                    |
| `city`, `state`, `country`    | String  | Destination information.                                       |
| `latitude`, `longitude`       | Number  | Property coordinates when available.                           |
| `checkin`, `checkout`         | String  | Search stay dates in `YYYY-MM-DD` format.                      |
| `nights`                      | Integer | Number of nights in the search.                                |
| `rooms`, `adults`, `children` | Integer | Guest and room counts used for the search.                     |
| `price_per_night`             | Number  | Lowest published nightly price.                                |
| `price_total`                 | Number  | Lowest published total price for the stay.                     |
| `currency`                    | String  | Price currency code.                                           |
| `star_rating`                 | Number  | Hotel star rating.                                             |
| `review_rating`               | Number  | Published guest review rating.                                 |
| `review_count`                | Integer | Number of published reviews.                                   |
| `free_cancellation`           | Boolean | Whether free cancellation is shown.                            |
| `amenities`                   | Array   | Named amenities such as Pool, Free parking, or Fitness center. |
| `photos`                      | Array   | Up to ten property photo URLs.                                 |
| `hotel_url`                   | String  | Direct Skiplagged hotel URL.                                   |
| `search_url`                  | String  | Hotel search URL used for the record.                          |

### How to use Skiplagged Hotels Scraper API

1. Open the Actor in Apify Console.
2. Paste a complete Skiplagged hotel search URL, or enter a `location` value with dates.
3. Choose guest counts, sorting, and the result limit.
4. Run the Actor and open the dataset preview.
5. Download JSON, CSV, Excel, or another Apify-supported format, or connect the dataset to your application.

A complete hotel URL is the easiest option. URLs without dates are also accepted, and the Actor uses tomorrow and the following day when dates are not supplied. Explicit `checkin` and `checkout` values take priority over matching URL values.

### Input Parameters

| Parameter  | Type   | Required | Default    | Description                      |
| ---------- | ------ | -------- | ---------- | -------------------------------- |
| `startUrl` | String | No       | Sample URL | One Skiplagged hotel search URL. |

| `location` | String | No | - | A complete hotel URL or numeric location ID. Plain city-name lookup is not available from Skiplagged. |
| `checkin` | String | No | Tomorrow | Check-in date in `YYYY-MM-DD` format. |
| `checkout` | String | No | Following day | Check-out date in `YYYY-MM-DD` format. |
| `rooms` | Integer | No | `1` | Number of rooms. |
| `adults` | Integer | No | `2` | Number of adult guests. |
| `children` | Integer | No | `0` | Number of child guests. |
| `sortBy` | String | No | `price_asc` | `price_asc`, `price_desc`, `rating_desc`, `stars_desc`, `reviews_desc`, or `name_asc`. |

| `results_wanted` | Integer | No | `20` | Maximum records to save. |
| `max_pages` | Integer | No | `1` | Maximum local 50-record output batches. |
| `proxyConfiguration` | Object | No | Apify Proxy on cloud | Optional Apify Proxy or custom proxy settings. Local runs skip Apify Proxy. |

When no input is supplied during a local run, the project uses the values in `INPUT.json`. Real Actor input always takes priority over that local fallback.

### Output Data

Each dataset item represents one hotel. Fields that are not published for a hotel are omitted from that item.

| Field                                      | Type    | Description                               |
| ------------------------------------------ | ------- | ----------------------------------------- |
| `source`                                   | String  | Source website, `skiplagged.com`.         |
| `hotel_id`                                 | Integer | Stable source hotel ID for deduplication. |
| `name`                                     | String  | Hotel name.                               |
| `price_per_night`                          | Number  | Lowest available nightly price.           |
| `price_total`                              | Number  | Lowest available total price.             |
| `rates`                                    | Object  | Source rate values when published.        |
| `available_rooms`                          | Integer | Published available room count.           |
| `ranking`, `value_rating`, `custom_rating` | Number  | Additional source ranking signals.        |
| `is_cancellable`, `free_cancellation`      | Boolean | Cancellation policy signals.              |
| `amenity_codes`                            | Array   | Source amenity IDs.                       |
| `amenities`                                | Array   | Human-readable amenity names.             |
| `photos`                                   | Array   | Property photo URLs.                      |
| `hotel_url`                                | String  | Direct property link.                     |

### Usage Examples

#### Basic hotel URL collection

Collect the first 20 hotels for a Las Vegas stay:

```json
{
    "startUrl": "https://skiplagged.com/hotels/49030/las-vegas-nevada-hotels/2026-08-25/2026-08-26",
    "results_wanted": 20
}
```

#### Location with guest counts

Use a numeric location ID when a URL is not available:

```json
{
    "location": "49030",
    "checkin": "2026-09-10",
    "checkout": "2026-09-13",
    "rooms": 1,
    "adults": 2,
    "children": 1,
    "results_wanted": 50,
    "max_pages": 2
}
```

#### Sorted hotel research

Sort a stay search by review rating and collect up to 30 records:

```json
{
    "startUrl": "https://skiplagged.com/hotels/49030/las-vegas-nevada-hotels/2026-08-25/2026-08-26",
    "sortBy": "rating_desc",
    "results_wanted": 30
}
```

### Sample Output

A typical dataset item looks like this. Optional fields vary by hotel and stay search.

```json
{
    "rank": 1,
    "source": "skiplagged.com",
    "search_url": "https://skiplagged.com/hotels/49030/las-vegas-nevada-hotels/2026-08-25/2026-08-26",
    "hotel_id": 76955,
    "name": "Luxor",
    "chain_name": "MGM Resorts International Hotels",
    "address": "3900 Las Vegas Boulevard South",
    "city_id": 49030,
    "city": "Las Vegas",
    "state": "Nevada",
    "country": "United States",
    "latitude": 36.096806,
    "longitude": -115.173001,
    "amenities": ["Free internet", "Fitness center", "Handicap accessible", "Room service", "Kitchen(ette)", "Safe"],
    "hotel_url": "https://skiplagged.com/hotel/76955/luxor-las-vegas-nevada",
    "checkin": "2026-08-25",
    "checkout": "2026-08-26",
    "nights": 1,
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "currency": "USD",
    "price_per_night": 9.1,
    "price_total": 10.31,
    "rates": {
        "priceline_low_rate": 9.1,
        "priceline_low_rate_total": 10.31
    },
    "available_rooms": 999,
    "star_rating": 3,
    "review_rating": 7.8,
    "review_count": 29089,
    "ranking": 3.90132,
    "free_cancellation": false
}
```

### Tips for best results

- Use a complete URL copied from a current Skiplagged hotel search when possible.
- Use future check-in and check-out dates. Past dates can return zero available hotels.
- Start with `results_wanted: 20` to verify the location and dates.
- Increase `max_pages` when requesting more than 50 results. The source may return fewer hotels than requested.
- Use `location` or a complete hotel URL for destination selection.
- Hotel prices, availability, rankings, and policies can change between runs. Schedule repeat runs if you need monitoring.

### Integrations and export formats

- **Apify API** - Start runs and read completed hotel datasets programmatically.
- **Google Sheets** - Review destination prices and hotel comparisons in a shared spreadsheet.
- **Webhooks** - Notify a downstream service after a run completes.
- **Make or Zapier** - Send hotel records into no-code workflows.
- **JSON, CSV, Excel, and XML** - Export data for applications, analysis, reports, and imports.

### Frequently Asked Questions

#### Can I use a Skiplagged hotel URL without dates?

Yes. The Actor accepts `/hotels/{city_id}/{city-slug}` URLs and uses tomorrow and the following day when no dates are present.

#### Can I use a plain city name such as Las Vegas?

No. Provide a numeric `location` ID or a Skiplagged hotel URL containing the location ID. Skiplagged does not provide a public city-name resolver for this Actor to use.

#### Do explicit input values override URL values?

Yes. Explicit `checkin` and `checkout` values take priority over matching values in a URL.

#### Why did I receive fewer hotels than requested?

The location, dates, availability, or source result count may limit the number of records. The Actor saves available hotels up to `results_wanted` and `max_pages`.

#### Why is a price or policy field missing?

The source does not publish every field for every hotel or date combination. Missing, null, and empty values are omitted from the individual dataset item.

#### Can I export Skiplagged hotel data to CSV or Excel?

Yes. Apify datasets support JSON, CSV, Excel, XML, and other export formats available in Apify Console.

#### Can I schedule hotel price monitoring?

Yes. Create an Apify schedule to run the Actor hourly, daily, weekly, or on a custom interval, then connect each run to a dataset or webhook.

#### Is it legal to collect Skiplagged hotel data?

Public data collection may be subject to website terms, contracts, privacy requirements, and local law. You are responsible for using the Actor lawfully and respecting Skiplagged rules.

### Related Actors

- [Booking.com Scraper](https://apify.com/shahidirfan/booking-com-scraper) - Collect hotel listings, prices, reviews, availability, and ratings from Booking.com.
- [Kayak Hotel Reviews Scraper](https://apify.com/shahidirfan/kayak-hotel-reviews-scraper) - Collect hotel reviews, ratings, amenities, and guest feedback from Kayak hotel pages.

### Support

For bugs, feature requests, or unexpected fields, use the Actor's Issues tab on Apify. Include the run ID, input URL or location, dates, and a short description of the result.

### Legal Notice

This Actor is intended for legitimate collection of publicly available hotel information. Users are responsible for complying with Skiplagged terms, applicable laws, privacy obligations, and any restrictions that apply to their intended use of the data.

# Actor input Schema

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

A Skiplagged hotel URL. It supplies the location and dates unless explicit date fields below are provided.

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

Optional Skiplagged hotel URL or numeric location ID when startUrl is empty. Plain city names are not resolved automatically.

## `checkin` (type: `string`):

Optional check-in date in YYYY-MM-DD format. Defaults to tomorrow when the URL has no dates.

## `checkout` (type: `string`):

Optional check-out date in YYYY-MM-DD format. Defaults to the day after check-in.

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

Number of rooms to search.

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

Number of adult guests.

## `children` (type: `integer`):

Number of child guests.

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

Order results before they are saved.

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

Maximum number of hotel records to save.

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

Maximum number of local 50-result output batches. The source returns the available hotels in one response.

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

Optional Apify Proxy or custom proxy settings. Apify Proxy is used on Apify and skipped for local runs.

## Actor input object example

```json
{
  "startUrl": "https://skiplagged.com/hotels/49030/las-vegas-nevada-hotels",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "sortBy": "price_asc",
  "results_wanted": 20,
  "max_pages": 1,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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://skiplagged.com/hotels/49030/las-vegas-nevada-hotels",
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "sortBy": "price_asc",
    "results_wanted": 20,
    "max_pages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/skiplagged-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://skiplagged.com/hotels/49030/las-vegas-nevada-hotels",
    "rooms": 1,
    "adults": 2,
    "children": 0,
    "sortBy": "price_asc",
    "results_wanted": 20,
    "max_pages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/skiplagged-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 '{
  "startUrl": "https://skiplagged.com/hotels/49030/las-vegas-nevada-hotels",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "sortBy": "price_asc",
  "results_wanted": 20,
  "max_pages": 1
}' |
apify call shahidirfan/skiplagged-hotels-scraper --silent --output-dataset

```

## MCP server setup

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