# Skyscanner Scraper — Flight Prices & Search Results (`studio-amba/skyscanner-scraper`) Actor

Scrape live flight search results from Skyscanner.net: airlines, prices, departure/arrival times, stops, and booking links for any origin, destination, and date. No login required.

- **URL**: https://apify.com/studio-amba/skyscanner-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 60.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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 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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

### What does Skyscanner Scraper do?

**Skyscanner Scraper** extracts live flight search results from
[Skyscanner.net](https://www.skyscanner.net), the flight comparison site used
by millions of travelers to find and book cheap flights. Give it an origin,
a destination, and a date, and it returns the same list of flights you'd see
on the Skyscanner results page: airline, price, departure/arrival times,
stops, and a direct booking link. No login or cookies required.

Use it to collect structured flight data via the Apify platform with full
**API access, scheduling, integrations**, and no need to run a browser
yourself.

### Why use Skyscanner Scraper?

- **Price monitoring** — Track fares on specific routes over time and catch
  price drops before they disappear
- **Travel research** — Compare airlines, layovers, and departure times
  across a route without manually clicking through the site
- **Fare analytics** — Build datasets for route pricing trends, seasonality,
  and airline market share
- **Meta-search / travel apps** — Feed live Skyscanner pricing into your own
  booking tool or comparison site
- **Corporate travel** — Check fares for upcoming business trips in bulk

### How to use Skyscanner Scraper

1. Go to the **Input** tab
2. Enter an **Origin** and **Destination** (airport or city code, e.g. `LON`, `LHR`, `BCN`, `JFK`)
3. Enter a **Departure date** in `YYYY-MM-DD` format
4. Optionally set the number of adults, cabin class, and max results
5. Click **Start** and wait for the run to finish
6. Download your data from the **Output** tab in JSON, CSV, Excel, or other formats

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `origin` | String | No | Departure airport or city code (default: `LON`) |
| `destination` | String | No | Arrival airport or city code (default: `BCN`) |
| `date` | String | No | Departure date, `YYYY-MM-DD` (default: ~45 days out) |
| `adults` | Integer | No | Number of adult travellers (default: 1) |
| `cabinClass` | String | No | `ECONOMY`, `PREMIUM_ECONOMY`, `BUSINESS`, or `FIRST` |
| `maxResults` | Integer | No | Maximum flight results to return (default: 50) |

This is a one-way search actor: give it one origin, one destination, and one
departure date per run. For a return trip, run it twice (outbound and
inbound legs separately).

### Output

Each result is one flight itinerary. Skyscanner typically returns
200-400 itineraries per search — `maxResults` only caps how many of those
are pushed to the dataset, it does not trigger extra requests.

| Field | Type | Example |
|-------|------|---------|
| `airline` | String | `"Wizz Air UK"` |
| `price` | Number | `22` |
| `currency` | String | `"GBP"` |
| `origin` | String | `"LTN"` |
| `destination` | String | `"BCN"` |
| `departureTime` | String | `"2026-09-01T12:45:00"` |
| `arrivalTime` | String | `"2026-09-01T15:55:00"` |
| `durationMinutes` | Number | `130` |
| `stops` | Number | `0` |
| `direct` | Boolean | `true` |
| `flightNumber` | String | `"5359"` |
| `url` | String | Direct booking link on Skyscanner |

### Example output

```json
{
    "airline": "Wizz Air UK",
    "price": 22,
    "currency": "GBP",
    "origin": "LTN",
    "destination": "BCN",
    "departureTime": "2026-09-01T12:45:00",
    "arrivalTime": "2026-09-01T15:55:00",
    "durationMinutes": 130,
    "stops": 0,
    "direct": true,
    "flightNumber": "5359",
    "searchDate": "2026-09-01",
    "url": "https://www.skyscanner.net/transport_deeplink/4.0/UK/en-GB/GBP/skyp/1/...",
    "scrapedAt": "2026-07-14T18:50:26.000Z"
}
````

### Data fields

| Field | Description | Example |
|-------|-------------|---------|
| `airline` | Marketing carrier(s), joined with " + " for connections | British Airways |
| `price` | Total fare in the listed currency | 83 |
| `currency` | Fare currency code | GBP |
| `stops` | Number of stops (0 = direct) | 1 |
| `flightNumber` | Flight number(s) for the itinerary | 5359 |
| `searchDate` | Departure date that was searched | 2026-09-01 |
| `url` | Deep link to book the exact itinerary on Skyscanner | — |

### How much does it cost to scrape Skyscanner?

Skyscanner is protected by PerimeterX and renders results client-side, so
this actor uses a real, JS-executing browser session (Bright Data Scraping
Browser) rather than a plain HTTP request. One search session returns the
full result set (200-400 flights) in a single browser session, so cost does
not scale per flight — it scales per search:

- **1 search (up to 400 results)** costs approximately **$0.06-0.10** in
  browser session data, plus Apify platform credits for the run itself
- Running the same route/date repeatedly (e.g. daily price tracking) is the
  most cost-efficient way to use this actor, since each run is one session

The Apify Free plan includes $5 of monthly credits.

### Limitations

- **One-way only.** Round trips require two separate runs (outbound + inbound).
- **Intermittent retries.** Skyscanner's anti-bot layer occasionally blocks a
  browser session at the network level; the actor retries automatically with
  a fresh session (up to 6 attempts) before giving up. Most searches succeed
  within 1-3 attempts.
- Data is scraped from the public website and may change without notice.
- Respect Skyscanner's terms of service and use responsibly.

### FAQ and support

**Is it legal to scrape Skyscanner?**
Skyscanner Scraper accesses only publicly available flight search results
that any visitor can see, without logging in or bypassing payment. Always
review and comply with the target website's Terms of Service before use.

**Why do some runs take longer than others?**
Skyscanner's anti-bot layer intermittently blocks individual browser
sessions. The actor detects this and automatically retries with a new
session — this adds a few seconds to a minority of runs but does not
require any action from you.

**I found a bug or need help**
Please submit an issue on the [Issues tab](https://console.apify.com/actors/skyscanner-scraper/issues) and we'll get back to you quickly. For custom scraping solutions, reach out via the same channel.

### How to scrape Skyscanner flight data

1. Go to this actor's page on the [Apify Store](https://apify.com/store).
2. Click **Try for free** to open it in Apify Console.
3. Enter your origin, destination, and departure date.
4. Set the maximum number of results and cabin class if needed.
5. Click **Start** and wait for the run to finish — most searches complete
   in under a minute.
6. Download your data in JSON, CSV, Excel, or connect it to your workflow
   via the Apify API.

You can also schedule daily runs to track fares on a route over time, set up
webhooks for price-drop notifications, or integrate results directly into
your own booking or comparison tool using the [Apify API](https://docs.apify.com/api).

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
price-drop alerts, delta detection, and delivery to your inbox, Google
Sheets, or API — maintenance included. We can also build a custom version
with round-trip search, multi-city routing, or your exact fields.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

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

Departure airport or city code (e.g. 'LON' for London, 'LHR' for Heathrow, 'NYC' for New York).

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

Arrival airport or city code (e.g. 'BCN' for Barcelona, 'JFK' for New York JFK).

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

Departure date in YYYY-MM-DD format. Must be in the future. One-way search only.

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

Number of adult travellers.

## `cabinClass` (type: `string`):

Cabin class to search.

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

Maximum number of flight results to return. A single search typically returns 200-400 itineraries — raising this does not trigger extra requests, it only caps how many of the already-fetched results are pushed.

## `sbrWsCdp` (type: `string`):

Optional: your own Bright Data Scraping Browser CDP endpoint. Leave empty to use the built-in unlocking service.

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

Legacy field, kept for backwards compatibility. Fetching goes through the built-in Bright Data Scraping Browser, so this is ignored.

## Actor input object example

```json
{
  "origin": "LON",
  "destination": "BCN",
  "date": "2026-09-01",
  "adults": 1,
  "cabinClass": "ECONOMY",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# Actor output Schema

## `results` (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 = {
    "origin": "LON",
    "destination": "BCN",
    "date": "2026-09-01",
    "adults": 1,
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/skyscanner-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 = {
    "origin": "LON",
    "destination": "BCN",
    "date": "2026-09-01",
    "adults": 1,
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/skyscanner-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 '{
  "origin": "LON",
  "destination": "BCN",
  "date": "2026-09-01",
  "adults": 1,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call studio-amba/skyscanner-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Skyscanner Scraper — Flight Prices & Search Results",
        "description": "Scrape live flight search results from Skyscanner.net: airlines, prices, departure/arrival times, stops, and booking links for any origin, destination, and date. No login required.",
        "version": "0.1",
        "x-build-id": "UQtME9G4XE4TiVi0K"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~skyscanner-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-skyscanner-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/studio-amba~skyscanner-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-skyscanner-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/studio-amba~skyscanner-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-skyscanner-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": {
                    "origin": {
                        "title": "Origin",
                        "type": "string",
                        "description": "Departure airport or city code (e.g. 'LON' for London, 'LHR' for Heathrow, 'NYC' for New York)."
                    },
                    "destination": {
                        "title": "Destination",
                        "type": "string",
                        "description": "Arrival airport or city code (e.g. 'BCN' for Barcelona, 'JFK' for New York JFK)."
                    },
                    "date": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "Departure date in YYYY-MM-DD format. Must be in the future. One-way search only."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult travellers.",
                        "default": 1
                    },
                    "cabinClass": {
                        "title": "Cabin class",
                        "enum": [
                            "ECONOMY",
                            "PREMIUM_ECONOMY",
                            "BUSINESS",
                            "FIRST"
                        ],
                        "type": "string",
                        "description": "Cabin class to search.",
                        "default": "ECONOMY"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of flight results to return. A single search typically returns 200-400 itineraries — raising this does not trigger extra requests, it only caps how many of the already-fetched results are pushed.",
                        "default": 50
                    },
                    "sbrWsCdp": {
                        "title": "Bright Data Scraping Browser endpoint (optional)",
                        "type": "string",
                        "description": "Optional: your own Bright Data Scraping Browser CDP endpoint. Leave empty to use the built-in unlocking service."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Legacy field, kept for backwards compatibility. Fetching goes through the built-in Bright Data Scraping Browser, so this is ignored."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
