# Skiplagged Flight Scraper API ✈️ (`shahidirfan/skiplagged-flight-scraper-api`) Actor

Scrape Skiplagged flight search data with a fast, reliable API. Extract cheap flights, hidden-city fares, routes, airlines, departure and arrival times, prices, stops, and trip details for travel research, airfare comparison, price monitoring, and flight data analysis.

- **URL**: https://apify.com/shahidirfan/skiplagged-flight-scraper-api.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 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/actors/running/actors-in-store.md#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

### What does Skiplagged Flight Scraper API do?

Skiplagged Flight Scraper API collects public flight search results from Skiplagged and saves one structured record per itinerary. Provide a Skiplagged flight URL, or enter an origin, destination, and departure date, then export fares, schedules, stops, airlines, airports, and segment details.

The Actor accepts one-way and round-trip searches such as `https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17`. Empty fields are left out of each item, so the dataset does not contain repeated `null` values.

### Why use Skiplagged Flight Scraper API?

- **Airfare research** - Compare route options, prices, stop counts, airlines, and travel times.
- **Price monitoring** - Schedule repeat runs for a route and compare fare changes over time.
- **Travel planning** - Review segment-level departure and arrival details before making a booking decision.
- **Route analysis** - Find nonstop, one-stop, multi-stop, or hidden-city route options.
- **Automation-ready output** - Use the Apify API, webhooks, schedules, dataset exports, or no-code integrations.

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

| Field | Description |
|-------|-------------|
| `rank` | Position after the selected filter and sort order are applied. |
| `origin`, `destination` | Airport code or Skiplagged location slug used for the search. |
| `departure_date`, `return_date` | Search dates in `YYYY-MM-DD` format. |
| `price_usd` | One-way fare converted from the source's minor-unit value. |
| `round_trip_price_usd` | Minimum round-trip fare when the search has a return date. |
| `stop_count` | Number of stops in the itinerary. |
| `duration_minutes` | Total travel time in minutes. |
| `departure_airport`, `arrival_airport` | First departure and final arrival airport codes. |
| `airline_codes`, `airline_names` | Airlines operating the itinerary. |
| `flight_numbers` | Flight number for each segment. |
| `segments` | Segment-level airline, airport, timestamp, and duration details. |
| `pricing_sources` | Provider price details when published by Skiplagged. |
| `search_url` | The source search URL for the record. |

### How to use Skiplagged Flight Scraper API

1. Open the Actor in Apify Console.
2. Paste a public Skiplagged flight URL, or enter the route and date fields.
3. Choose a filter, sort order, passenger count, result limit, and page cap.
4. Run the Actor.
5. Download the dataset or connect it to your application.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | Sample URL | A complete Skiplagged flight URL. It takes priority for route and date values. |
| `origin` | String | No | `LON` in sample | Origin airport code or location slug when `startUrl` is empty. |
| `destination` | String | No | `dubai-emirate` in sample | Destination airport code or location slug when `startUrl` is empty. |
| `date` | String | No | `2026-09-17` in sample | Departure date in `YYYY-MM-DD` format. |
| `returnDate` | String | No | - | Return date for a round-trip search. |
| `filter` | String | No | `all` | `all`, `nonstop`, `one_stop`, `two_plus_stops`, `hidden_city`, or `with_price`. |
| `sortBy` | String | No | `price_asc` | `price_asc`, `price_desc`, `duration_asc`, `duration_desc`, or `departure_asc`. |
| `airline` | String | No | - | Airline code such as `EK`, `QR`, or `BA`. |
| `fareClass` | String | No | `economy` | Fare class sent with the search. |
| `adults` | Integer | No | `1` | Number of adult passengers. |
| `children` | Integer | No | `0` | Number of child passengers. |
| `infants_seat` | Integer | No | `0` | Infants travelling with a seat. |
| `results_wanted` | Integer | No | `20` | Maximum number of records to save. |
| `max_pages` | Integer | No | `10` | Maximum number of local 50-result batches to save. |
| `proxyConfiguration` | Object | No | Apify Proxy on cloud; disabled in local `INPUT.json` | Apify Proxy or custom proxy settings. |

When both `startUrl` and route fields are supplied, explicit route fields override the matching values parsed from the URL. If no input is provided during a local run, the project uses the values in `INPUT.json`.

### Usage Examples

#### Basic URL extraction

Collect the 20 lowest-priced one-way options from the supplied route:

```json
{
    "startUrl": "https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17",
    "results_wanted": 20
}
```

#### Route and date fields

Build a search from airport codes and a date without pasting a URL:

```json
{
    "origin": "JFK",
    "destination": "LAX",
    "date": "2026-09-17",
    "filter": "nonstop",
    "sortBy": "duration_asc",
    "results_wanted": 20
}
```

#### Round trip with passenger counts

Collect round-trip options and include child passenger counts in the search:

```json
{
    "startUrl": "https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17/2026-09-24",
    "adults": 2,
    "children": 1,
    "filter": "with_price",
    "results_wanted": 50,
    "max_pages": 2
}
```

#### Airline and proxy filters

Limit results to Emirates and use Apify Proxy for a repeated run:

```json
{
    "startUrl": "https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17",
    "airline": "EK",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    },
    "results_wanted": 20
}
```

### Sample Output

```json
{
    "rank": 1,
    "source": "skiplagged.com",
    "search_url": "https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17",
    "origin": "LON",
    "destination": "dubai-emirate",
    "departure_date": "2026-09-17",
    "trip_type": "one_way",
    "flight_key": "4db915c",
    "price_usd": 208.58,
    "price_minor_units": 20858,
    "stop_count": 0,
    "duration_seconds": 25800,
    "duration_minutes": 430,
    "departure_time": "2026-09-17T14:35:00+01:00",
    "departure_airport": "LGW",
    "departure_airport_name": "London Gatwick",
    "arrival_time": "2026-09-18T00:45:00+04:00",
    "arrival_airport": "DXB",
    "arrival_airport_name": "Dubai Intl",
    "airline_codes": ["EK"],
    "airline_names": ["Emirates"],
    "flight_numbers": [16],
    "is_hidden_city": false,
    "segments": [
        {
            "airline_code": "EK",
            "airline_name": "Emirates",
            "flight_number": 16,
            "departure_time": "2026-09-17T14:35:00+01:00",
            "departure_airport": "LGW",
            "arrival_time": "2026-09-18T00:45:00+04:00",
            "arrival_airport": "DXB",
            "duration_seconds": 25800
        }
    ]
}
```

### Tips for best results

- Use a complete Skiplagged URL when you want the source route and dates copied exactly.
- Use airport codes for precise airport searches, or location slugs for city and region searches.
- Start with `results_wanted: 20` while checking a new route.
- Use `max_pages` to keep larger result sets within a predictable size.
- Use `nonstop` or `one_stop` when travel time matters more than the lowest fare.
- Prices and availability can change between runs. Save the run time with your exported dataset.

### Integrations and exports

- **Apify API** - Read completed datasets from your application.
- **Google Sheets** - Review route and price changes in a spreadsheet.
- **Webhooks** - Trigger a downstream workflow after a run completes.
- **Make or Zapier** - Send new results to other services.
- **Exports** - Download JSON, CSV, Excel, XML, and other supported formats.

### Frequently Asked Questions

#### Can I use a Skiplagged URL with a city destination?

Yes. Airport codes and location slugs such as `dubai-emirate` are accepted when Skiplagged supports the route.

#### Can I run a round-trip search?

Yes. Add a return date in the URL or provide `returnDate`. The output includes the minimum round-trip price when Skiplagged publishes it.

#### Does `max_pages` request pages from Skiplagged?

No. Skiplagged returns the available search set in one response. The Actor saves that set in local 50-record batches and uses `max_pages` as an output limit.

#### What happens when a field is unavailable?

That field is omitted from the item. The dataset does not add always-empty or always-null fields.

#### Can I export the results to CSV or Excel?

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

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

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

### Related Actors

- [Kayak Flights Scraper](https://apify.com/shahidirfan/kayak-flights-scraper) - Collect flight prices and route details from Kayak.
- [Booking.com Scraper](https://apify.com/shahidirfan/booking-com-scraper) - Collect travel accommodation data from Booking.com.

### Support

For issues or feature requests, use the Actor's Issues tab on Apify or contact the developer through the Apify profile.

### Legal Notice

This Actor is intended for legitimate collection of publicly available flight data. Users are responsible for lawful use, compliance with source-site terms, and appropriate handling of any personal information in public results.

# Actor input Schema

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

A Skiplagged URL such as https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17. If provided, it is used as the primary route and date source.

## `origin` (type: `string`):

Origin airport code or Skiplagged location slug, used when startUrl is not provided.

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

Destination airport code or Skiplagged location slug, used when startUrl is not provided.

## `date` (type: `string`):

Departure date in YYYY-MM-DD format, used when startUrl is not provided.

## `returnDate` (type: `string`):

Optional return date in YYYY-MM-DD format for round-trip results.

## `filter` (type: `string`):

Keep all results, nonstop flights, one-stop flights, flights with two or more stops, hidden-city results, or priced results.

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

Order results by price, duration, or departure time before saving.

## `airline` (type: `string`):

Optional airline code such as EK, QR, or BA.

## `fareClass` (type: `string`):

Optional fare class sent to the search, such as economy, premium\_economy, business, or first.

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

Number of adult passengers.

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

Number of child passengers.

## `infants_seat` (type: `integer`):

Number of infants travelling with a seat.

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

Maximum number of flight records to save across the run.

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

Maximum number of local 50-result batches to save. Skiplagged returns the search set in one JSON response, so this is an output safety cap rather than a server page parameter.

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

Optional Apify Proxy or custom proxy settings for reliable repeated searches.

## Actor input object example

```json
{
  "startUrl": "https://skiplagged.com/flights/LON/dubai-emirate/2026-09-17",
  "origin": "LON",
  "destination": "dubai-emirate",
  "date": "2026-09-17",
  "filter": "all",
  "sortBy": "price_asc",
  "fareClass": "economy",
  "adults": 1,
  "children": 0,
  "infants_seat": 0,
  "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/flights/LON/dubai-emirate/2026-09-17",
    "origin": "LON",
    "destination": "dubai-emirate",
    "date": "2026-09-17",
    "filter": "all",
    "sortBy": "price_asc",
    "fareClass": "economy",
    "adults": 1,
    "children": 0,
    "infants_seat": 0,
    "results_wanted": 20,
    "max_pages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/skiplagged-flight-scraper-api").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/flights/LON/dubai-emirate/2026-09-17",
    "origin": "LON",
    "destination": "dubai-emirate",
    "date": "2026-09-17",
    "filter": "all",
    "sortBy": "price_asc",
    "fareClass": "economy",
    "adults": 1,
    "children": 0,
    "infants_seat": 0,
    "results_wanted": 20,
    "max_pages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/skiplagged-flight-scraper-api").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/flights/LON/dubai-emirate/2026-09-17",
  "origin": "LON",
  "destination": "dubai-emirate",
  "date": "2026-09-17",
  "filter": "all",
  "sortBy": "price_asc",
  "fareClass": "economy",
  "adults": 1,
  "children": 0,
  "infants_seat": 0,
  "results_wanted": 20,
  "max_pages": 1
}' |
apify call shahidirfan/skiplagged-flight-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/skiplagged-flight-scraper-api"
        }
    }
}

```

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/jTLcVGha2jh1wXDi2/builds/6GavNNWcGxMub3Zsu/openapi.json
