Skyscanner Flights Scraper
Pricing
from $0.55 / 1,000 flight results
Skyscanner Flights Scraper
Extract 1,000 Skyscanner flight results for $0.65🔥. Collect flight prices, airlines, routes, schedules, and fare details in seconds.
Pricing
from $0.55 / 1,000 flight results
Rating
5.0
(1)
Developer
Crawlio
Maintained by CommunityActor stats
0
Bookmarked
54
Total users
34
Monthly active users
2 days ago
Last modified
Categories
Share
Fast, reliable, and production-ready scraper for Skyscanner. Extract real-time flight itineraries, live pricing, airline carriers, stops, baggage policies, and direct booking URLs worldwide.
Powered by Skyscanner's mobile API backend with built-in anti-bot protection (PerimeterX challenge solver) and automatic residential proxy fallback—zero proxy setup or API keys required.
Features
- ✈️ Comprehensive Flight Search: Support for One-Way, Round-Trip, and Multi-City routes across any airport or city worldwide.
- 🔗 Live Booking Details & Deep Links: Fetch real-time checkout links, OTA options (Booking.com, Expedia, Trip.com), and airline direct links with live prices.
- 🧳 Baggage Filtering: Filter flights by included Cabin / Hand Baggage (
cabin_bag) and Checked Baggage (checked_bag). - 💺 Cabin Classes: Search Economy, Business, or First class cabins.
- 🌍 Global Localization: Customize Market (e.g.
US,GB,DE), Locale (e.g.en-US,fr-FR), and Currency (e.g.USD,EUR,GBP). - 🛡️ Zero-Config Anti-Bot Protection: Authentic mobile TLS fingerprints with automatic residential proxy fallback if challenges occur.
- ⚡ High Performance & Clean Output: Fully structured JSON datasets ready for export to CSV, Excel, or direct API integration.
Supported Operations
| Operation | Value | Description |
|---|---|---|
| One-Way | oneWay | Single flight leg between two airports or cities. |
| Round-Trip | roundTrip | Outbound and inbound flight with specific return dates. |
| Multi-City | multiCity | Complex itineraries with two or more legs. |
| Booking Details | bookingDetails | Real-time prices, agent ratings, fare rules, and direct booking links for a specific itinerary ID. |
Input Parameters
Global Settings
| Parameter | Type | Default | Description |
|---|---|---|---|
operation | String | "oneWay" | Choose oneWay, roundTrip, multiCity, or bookingDetails. |
adults | Integer | 1 | Number of adult passengers (1–8). |
cabin | String | "economy" | Cabin class: "economy", "business", or "first". |
cabin_bag | Boolean | false | Filter flights that include cabin / carry-on baggage. |
checked_bag | Boolean | false | Filter flights that include checked baggage. |
limit | Integer | 20 | Maximum number of flight itineraries to return. |
market | String | "US" | Market country code (ISO 2-letter, e.g. US, GB, DE, AU). |
locale | String | "en-US" | Language and locale (e.g. en-US, en-GB, es-ES, fr-FR). |
currency | String | "USD" | Currency code (e.g. USD, EUR, GBP, CAD, AUD). |
Operation: One-Way (oneWay)
| Parameter | Type | Required | Description |
|---|---|---|---|
origin | String | Yes | Origin airport IATA code (e.g. JFK) or city name (e.g. New York). |
dest | String | Yes | Destination airport IATA code (e.g. LHR) or city name (e.g. London). |
date | String | Yes | Departure date in YYYY-MM-DD format (e.g. 2026-09-17). |
Operation: Round-Trip (roundTrip)
| Parameter | Type | Required | Description |
|---|---|---|---|
origin | String | Yes | Origin airport IATA code or city name. |
dest | String | Yes | Destination airport IATA code or city name. |
outbound_date | String | Yes | Departure date in YYYY-MM-DD format. |
inbound_date | String | Yes | Return date in YYYY-MM-DD format. |
Operation: Multi-City (multiCity)
| Parameter | Type | Required | Description |
|---|---|---|---|
route_requests | String | Yes | JSON array of route objects, each containing origin, dest, and date. |
Operation: Booking Details (bookingDetails)
| Parameter | Type | Required | Description |
|---|---|---|---|
itinerary_id | String | Yes | The itinerary ID extracted from flight search results. |
origin | String | Recommended | Origin airport IATA code (e.g. JFK, DAC). Ensures 100% accurate route matching. |
dest | String | Recommended | Destination airport IATA code (e.g. LHR, DXB). Ensures 100% accurate route matching. |
date | String | Optional | Departure date (YYYY-MM-DD). Auto-extracted from itinerary_id if omitted. |
return_date | String | Optional | Return date (YYYY-MM-DD) if the itinerary was from a round-trip search. |
token | String | Optional | Session token from flight search results (if available). |
Input Examples
1. One-Way Flight Search
{"operation": "oneWay","oneWay": {"origin": "JFK","dest": "LHR","date": "2026-09-17"},"adults": 1,"cabin": "economy","cabin_bag": true,"limit": 20,"market": "US","currency": "USD"}
2. Round-Trip Flight Search
{"operation": "roundTrip","roundTrip": {"origin": "LHR","dest": "DXB","outbound_date": "2026-10-15","inbound_date": "2026-10-25"},"adults": 2,"cabin": "business","checked_bag": true,"limit": 20,"currency": "GBP"}
3. Multi-City Flight Search
{"operation": "multiCity","multiCity": {"route_requests": "[{"origin": "JFK", "dest": "LHR", "date": "2026-09-17"}, {"origin": "LHR", "dest": "CDG", "date": "2026-09-24"}]"},"adults": 1,"currency": "USD"}
4. Booking Details (Live Prices & Booking URLs)
Retrieve real-time booking options, OTA prices, direct carrier checkout links, and fare policies:
{"operation": "bookingDetails","bookingDetails": {"itinerary_id": "10901-2609171455--32213-1-11182-2609180855","origin": "DAC","dest": "DXB","date": "2026-09-17"},"currency": "USD"}
💡 Tip: Providing
origin,dest, anddatealongsideitinerary_idguarantees that Skyscanner's Sonar engine matches the route geometry and resolves all available booking agents and deep links.
Output Examples
Flight Search Output (oneWay, roundTrip, multiCity)
Each flight itinerary in the dataset contains comprehensive pricing, carrier, and segment details:
{"bucket": "Best","price_raw": 343.0,"price": "$343","carriers": ["Emirates","Flydubai"],"tags": ["Cheapest","Shortest"],"score": 0.94,"id": "10901-2609171455--32213-1-11182-2609180855","token": "AQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyA=","inputCorrected": false,"legs": [{"from": "DAC","to": "DXB","dep": "2026-09-17T14:55:00","arr": "2026-09-18T08:55:00","dur_min": 660,"stops": 1,"segments": [{"flight": "EK 585","from": "DAC","to": "DXB","dep": "2026-09-17T14:55:00","arr": "2026-09-18T08:55:00","dur_min": 660}]}]}
Booking Details Output (bookingDetails)
When retrieving booking details, each item in the dataset represents a specific booking provider / OTA option with direct checkout links:
{"id": "opt_booking_com_01","agent_id": "b_com","agent_name": "Booking.com","is_carrier": false,"agent_rating": 4.5,"agent_reviews": 12480,"price": 343.0,"currency": "USD","booking_url": "https://www.skyscanner.net/transport_deeplink/4.0/US/en-US/USD/b_com/...","fare_class": "Economy Standard","cabin_baggage": "Included (1 piece)","checked_baggage": "Included (20 kg)","changeable": true,"refundable": false,"update_status": "CONFIRMED"}
Programmatic Integration
You can easily trigger this Actor using Apify's API clients or cURL.
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"operation": "oneWay","oneWay": {"origin": "JFK","dest": "LHR","date": "2026-09-17"},"adults": 1,"cabin": "economy","limit": 20,"currency": "USD"}run = client.actor("skyscanner-flights-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{item.get('price')} - {', '.join(item.get('carriers', []))}")
Node.js / JavaScript (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: 'YOUR_APIFY_TOKEN',});const runInput = {operation: 'bookingDetails',bookingDetails: {itinerary_id: '10901-2609171455--32213-1-11182-2609180855',origin: 'DAC',dest: 'DXB',date: '2026-09-17'},currency: 'USD'};const run = await client.actor('skyscanner-flights-scraper').call(runInput);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(opt => {console.log(`${opt.agent_name}: $${opt.price} -> ${opt.booking_url}`);});
cURL
curl --request POST \--url "https://api.apify.com/v2/acts/skyscanner-flights-scraper/runs?token=YOUR_APIFY_TOKEN" \--header "Content-Type: application/json" \--data '{"operation": "oneWay","oneWay": {"origin": "JFK","dest": "LHR","date": "2026-09-17"},"currency": "USD"}'
Frequently Asked Questions (FAQ)
1. Do I need to provide proxies?
No. The Actor includes automatic residential proxy fallback and authentic mobile TLS fingerprints out of the box. No external proxy configuration is required.
2. Can I use city names instead of airport IATA codes?
Yes. The Actor automatically resolves city names (e.g. London, New York, Paris) to corresponding Skyscanner hub codes (LHR, JFK, CDG). For maximum precision, 3-letter IATA codes are recommended.
3. Why are origin and destination recommended for bookingDetails?
Skyscanner's live booking resolver (Sonar) validates the flight itinerary against route legs. Supplying origin and dest ensures the route geometry matches the itinerary and unlocks live pricing options from all airlines and travel agents.
4. How fresh is the pricing data?
All searches are performed in real-time against live Skyscanner mobile endpoints. Flight prices and availability are current as of the second the Actor executes.
Legal & Compliance
This scraper extracts publicly available pricing and flight schedules. Please review Skyscanner's terms of service and ensure compliance with local regulations (such as GDPR for personal data).