Skyscanner API Bulk (Flights)

Skyscanner API Bulk (Flights)

Get the best flight itineraries and calendar prices in BULK from Skyscanner! Also supports Multi-city and Explore with various filters. It's fast.

LEAD_GENERATIONTRAVELSOCIAL_MEDIAApify

🛑 For best performance, we recommend using IATA airport codes for Origin/Destination.

🔃 Skyscanner prices are rounded up on their website (e.g., $709). The actual results return exact amounts (e.g., $708.01).

Parameters

[Input]

  • Process (Select)

    • Get Flight Prices
    • Get Flight Providers
    • Get Calendar Prices (Monthly)
    • Get Calendar Prices (Daily)
  • Market (select)

    Choose from the available countries. This will set default domain, country, locale and currency.

  • Query (JSON object)

    See next section: "Query fields".

    Example:

    1[
    2    // Multi-city
    3    {
    4        "adults": 1,
    5        "children": [15],
    6        "classtype": "business",
    7        "multifrom": ["yvr", "lax", "lax", "las"],
    8        "multidates": ["2025-09-01", "2025-09-15"]
    9    },
    10    // Round-trip
    11    {
    12        "origin": "cdg",
    13        "destination": "lyon",
    14        "datefrom": "251004",
    15        "dateto": "251007",
    16        "adults": 2,
    17        "children": [],
    18        "classtype": "economy",
    19        "direct": false
    20    }
    21]
  • Nearby airports (select)

    Ignored for Multi-city. Do not include, Nearby airports, Nearby airport (Origin) or Nearby airport (Destination).

  • Retries/Delay (integer)

    Skyscanner takes time to load all results. For complex searches, their website can retry loading data over 10 times.

    Adjust your retries and delay based on your search complexity, for example:

    1. Easy search: One-way trip with direct flights only. Retry = 2. Wait = 3.
    2. Complex search: Round-trip with adults and children. Retry = 5. Wait = 5.
    3. Very complex: Multi-city and additional criteria, such as nearby airports. Retry more, wait longer.

[Query fields]

  • Direct flights only (boolean)

    Not compatible with Multi-city. Direct or with stops.

  • Flight origin/destination (string)

    Not required for Multi-city. Airports to depart from and return to.

    Destination can be set to "everywhere" for one-way/round-trip open search.

  • Departure/Return dates (string)

    Not required for Multi-city. Dates to depart from and return to. Format: YYMMDD.

  • Number of adults (integer)

    Maximum of 8.

  • Cabin class (select)

    Choose from Economy, Premium Economy, Business Class or First Class.

  • Number of children (array)

    An array with one entry for each child (age 0 to 15).

    Example for two children: [ 1, 12 ]

  • Multi-city - Locations (array)

    Overrides Flight origin/destination, and Departure/Return dates.

    Enter the list of airports (2, 4, 6, 8, 10 or 12) to include in the itinerary.

    Example for 8 airports: ["yvr", "sea", "sea", "lax", "lax", "jfk", "jfk", "iad"].

  • Multi-city - Dates (array)

    Overrides Flight origin/destination, and Departure/Return dates.

    Enter the list of dates (2, 3, 4, 5, 6) matching the locations. Example for 8 airports: ["2024-09-12", "2024-09-19", "2024-09-23", "2024-09-25"].

    Note: For reference, combining both Multi-city examples creates the following itinerary: YVR to SEA (2024-09-12), SEA to LAX (2024-09-19), LAX to JFK (2024-09-23), JFK to IAD (2024-09-25).

[Output]

This actor returns raw data.

Get Flight Providers returns:

1{
2    "query": string,
3    "queryJson": string,
4    "currency": string,
5    "data": [
6      {
7        "providers": [
8          {
9            "id": string,
10            "name": string,
11            "isCarrier": boolean,
12            "rating": float,
13            "feedbackCount": integer
14          },
15          ...
16        ],
17        "alliances": [
18          {
19            "id": integer,
20            "name": string
21          },
22          ...
23        ]
24      },
25      ...
26    ]
27}

Get Flight Prices returns:

1{
2    "query": string,
3    "queryJson": string,
4    "currency": string,
5    "data": [
6      {
7        "id": string,
8        "price": float,                     // Price
9        "legs": array,                      // Flights information
10        "isSelfTransfer": boolean,
11        "isProtectedSelfTransfer": boolean,
12        "farePolicy": object,
13        "eco": float,                       // CO2 emission levels, lower is better
14        "fareAttributes": object,
15        "isMashUp": boolean,                // Multi-airlines/booking sources
16        "hasFlexibleOptions": boolean,
17        "score": float,                     // Recommended score
18        "pricingOptions": array,
19        "tags": array,
20        "vendor": string,                   // Booking provider
21        "url": string                       // Booking URL
22      },
23      ...
24    ]
25}

Get Flight Pricess with EVERYWHERE destination returns:

1{
2  "query": string,
3  "queryJson": string,
4  "currency": string,
5  "data": [
6    {
7      "id": string,
8      "type": string,
9      "url": string,  // Booking search link
10      "location": object,
11      "flightQuotes": object, // Prices
12      "hotelQuotes": object,
13      "image": object,
14      "parentLocation": object,
15      "flightRoutes": object
16    }
17  ]
18}

Get Calendar Prices (Monthly) returns:

1{
2    "query": string,
3    "queryJson": string,
4    "currency": string,
5    "data": [
6      {
7          "month": object,
8          "price": object,
9          "priceCategory": string // E.g., LOWEST
10      },
11      ...
12    ]
13}

Get Calendar Prices (Daily) returns:

1{
2    "query": string,
3    "queryJson": string,
4    "currency": string,
5    "data": [
6      {
7          "day": string,
8          "group": string,  // Low, Medium or High price
9          "price": float
10      },
11      ...
12    ]
13}

Support

Always use a strong proxy (residential or custom), and make sure to wait long enough between requests!

Open a new issue for bugs and feature requests. Please share your Run URL and Input.

Cheers!

Frequently Asked Questions

Is it legal to scrape job listings or public data?

Yes, if you're scraping publicly available data for personal or internal use. Always review Websute's Terms of Service before large-scale use or redistribution.

Do I need to code to use this scraper?

No. This is a no-code tool — just enter a job title, location, and run the scraper directly from your dashboard or Apify actor page.

What data does it extract?

It extracts job titles, companies, salaries (if available), descriptions, locations, and post dates. You can export all of it to Excel or JSON.

Can I scrape multiple pages or filter by location?

Yes, you can scrape multiple pages and refine by job title, location, keyword, or more depending on the input settings you use.

How do I get started?

You can use the Try Now button on this page to go to the scraper. You’ll be guided to input a search term and get structured results. No setup needed!