Skyscanner Route Intelligence Scraper
Pricing
from $15.00 / 1,000 route profile collecteds
Skyscanner Route Intelligence Scraper
Profile any flight route from Skyscanner: the airlines flying it non-stop, flights per week, typical flight time, cheapest month, a twelve-month price curve, and what the same trip costs from nearby airports. One row per route per market, with several countries compared in one run.
Turn any city pair into a route-economics profile. For every route you name — or every route Skyscanner publishes, if you'd rather sweep — you get the airlines that fly it non-stop, how many flights a week it carries, how long it takes, what it costs, which month is cheapest, how the price moves across the year, and what the same trip costs from the other airports serving the same city. One clean row per route per market, ready for a spreadsheet or a model. No account and no login are needed — just run it.
What you can do with it
- Size a route before you fly it. Weekly frequency, the non-stop airline roster and the typical fare tell you how contested a city pair already is, and at what price.
- Find the gap in an airport's catchment. The nearby-airport comparison shows what the same city costs from LGA, EWR and JFK — and how far each one really is from the centre — so you can see where a catchment is leaking.
- Build a seasonality model. Twelve months of cheapest prices per route, per market, is a ready-made seasonal curve for pricing, capacity or campaign planning.
- Compare markets you sell into. The same route is a different product in different countries: different currency, different fares, and often a different cheapest month. Collect several countries in one run and put them side by side — every result also says whether its prices are for one direction or for the return trip, because that differs by country too and it is the one thing that makes two prices incomparable.
- Sweep a whole network. Point it at a departure airport and let it work through every route published from there, then filter to the ones with real traffic.
- Publish route content at scale. Flight times and airline lists as structured fields for every route, plus booking-lead-time advice and the destination's airport count on the English-language storefronts (see Limits).
What you get
One result per route per market. Abridged real example — the London → New York profile as the Indian market sees it:
{"route": "LOND > NYCA","originCode": "LOND","destinationCode": "NYCA","originName": "London","destinationName": "New York","market": "IN","currency": "INR","cheapestPrice": 27470,"priceTripType": "one_way","cheapestPriceTripType": "one_way","monthlyPriceTripType": "one_way","nearbyAirportPriceTripType": "one_way","cheapestMonth": "November","cheapestMonthByPrice": "2026-11","cheapestMonthPrice": 27470,"dearestMonthByPrice": "2026-08","dearestMonthPrice": 39434,"flightsPerWeek": 1285,"averageFlightTime": "7 hrs, 60 mins","averageFlightTimeMinutes": 480,"mostPopularAirline": "Iberia","mostPopularAirlineCode": "IB","directAirlineCount": 26,"directAirlines": [{ "name": "Aer Lingus", "code": "EI", "isPopularOnThisRoute": true },{ "name": "Air Canada", "code": "AC", "isPopularOnThisRoute": false },{ "name": "Air France", "code": "AF", "isPopularOnThisRoute": false }],"nearbyAirportCount": 6,"cheapestNearbyAirport": "JFK","cheapestNearbyAirportPrice": 27470,"nearbyAirports": [{ "airportCode": "LGA", "airportName": "New York LaGuardia","distance": 13, "distanceUnit": "km", "isClosest": true,"cheapestCarrier": "Ryanair", "cheapestPrice": 36178, "tripType": "one_way" },{ "airportCode": "EWR", "airportName": "New York Newark","distance": 14, "distanceUnit": "km", "isClosest": false,"cheapestCarrier": "Wizz Air", "cheapestPrice": 31697, "tripType": "one_way" }],"monthlyPriceCurve": [{ "month": "2026-08", "monthName": "August", "price": 39434,"tripType": "one_way", "currency": "INR" },{ "month": "2026-09", "monthName": "September", "price": 31921,"tripType": "one_way", "currency": "INR" }],"exampleFares": [{ "departureDate": "2026-11-29", "tripType": "one_way", "price": 27470,"airlines": ["Ryanair"], "airlineCodes": ["FR"],"fromAirport": "STN", "toAirport": "JFK", "isDirect": false }],"bookAheadDays": 40,"airportsServingDestination": 6,"writtenAnswerFiguresAvailable": true,"collectedAt": "2026-08-16T12:00:00.000Z"}
The full result carries more: every one of the 26 direct airlines, all six nearby airports, all twelve months, up to 60 priced examples, the published questions and answers for the route, and the provenance fields listed further down.
Read priceTripType before you compare two prices. The same London → New York route,
collected at the same moment, is priced one way on the Indian storefront (₹ 27,470) and as
a return trip on the German one (348 €). The numbers look directly comparable and are not:
one of them buys twice the travel. Every price on the result is labelled — the headline,
each of the twelve months, each alternative airport and each priced example — so the two
kinds never get averaged together by accident.
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
routes | list of text | ["LON-NYC"] | The city pairs to profile, one per line. Two place codes — a city code like LON, NYC, PAR, or an airport code like LHR, JFK, CDG. LON-NYC, LHR > JFK and CDG to BCN all work. A Skyscanner route address is accepted too: the two places are taken from it and the route is then collected for the market you chose, which may be a different country from the address you pasted — the run says so at the start when that happens. |
market | choice | GB | The country you are selling into. Skyscanner runs a separate storefront per country and they are genuinely different — different currency, different fares, often a different cheapest month, and some price a one-way trip where others price the return (see priceTripType). Two fields, bookAheadDays and airportsServingDestination, come back only on the English-language storefronts — see Limits. |
compareMarkets | multi-choice | empty | Collect the same routes for extra countries too, one result per route per market. Up to 6 extras. |
findRoutesForMe | true/false | false | Work through the routes Skyscanner publishes for the chosen market instead of listing them all yourself. |
seedOrigins | list of text | empty | With discovery on: keep only routes departing from these places, e.g. LHR, LGW, STN. |
seedDestinations | list of text | empty | With discovery on: keep only routes arriving at these places, e.g. JFK, EWR. |
maxRoutes | number (1–2000) | 25 | The most routes in one run, counting both the ones you listed and the ones found for you. |
includeNearbyAirports | true/false | true | Add the alternative-airport comparison. Charged separately — see pricing. |
includeMonthlyPrices | true/false | true | Add the twelve-month cheapest-price curve. |
includeDeals | true/false | true | Add the priced example trips, each with a direct link and its own tripType — one-way on some storefronts, return on others. |
includeFaqs | true/false | true | Add the questions and answers Skyscanner publishes for the route. |
minFlightsPerWeek | number (0–200000) | 0 | Keep only routes carrying at least this many flights a week. |
minDirectAirlines | number (0–200) | 0 | Keep only routes flown non-stop by at least this many airlines. Set to 1 to exclude connection-only pairs. |
onlyRoutesWithAPrice | true/false | false | Drop routes with no published headline price. |
onlyRequestedMarket | true/false | false | Drop results that came back labelled with a market other than the one you chose. |
Output fields
| Field | What it is |
|---|---|
routeKey, route | Stable identity for the route and market, and a readable label. |
originCode, destinationCode | The two places, as Skyscanner identifies them. |
originName, destinationName, originCountry, destinationCountry | Their published names. |
marketRequested, marketRequestedName | The market you asked for. |
market, marketMatchesRequested | The market that actually answered, and whether it is the one you asked for. |
currency, currencyConfirmed, language | The currency the figures are in, whether it was stated outright, and the language the text is in. |
cheapestPrice, cheapestPriceFormatted, cheapestPriceUrl | The headline lowest price, as a number, as displayed, and a link to it. |
priceTripType | What the prices on this result buy: one_way or return. Read this before comparing two results — it differs by country. null when the source did not say, or when its own labels disagree; nothing is assumed. |
cheapestPriceTripType, monthlyPriceTripType, nearbyAirportPriceTripType | The same answer for each group of prices separately: the headline figure, the twelve-month curve, and the alternative-airport comparison. |
cheapestMonth | The headline cheapest month. |
cheapestMonthStatement | Skyscanner's own written answer to the same question — sometimes a different month (see Limits). |
cheapestMonthByPrice, cheapestMonthByPriceName, cheapestMonthPrice | The cheapest month worked out from the published monthly prices themselves. |
dearestMonthByPrice, dearestMonthPrice | The most expensive month, likewise. |
monthsWithAPublishedPrice | How many of the twelve months actually carry a price. |
averageFlightTime, averageFlightTimeMinutes | Typical flight time, as published and in minutes. |
averageFlightTimeIsRounded | True when the published figure is a rounded one (see Limits). |
flightsPerWeek | Weekly frequency on the route. |
bookAheadDays | How far ahead Skyscanner says to book this route. English-language storefronts only — see Limits. |
airportsServingDestination | How many airports serve the destination city. English-language storefronts only — see Limits. |
writtenAnswerFiguresAvailable | Whether the two figures above could be taken from this route's written answers at all. false on a storefront that publishes those answers in another language — where both fields are empty for every route, rather than unpublished for this one. null when the written answers were not collected (you switched them off, or the result is partial). |
mostPopularAirline, mostPopularAirlineCode | The most-flown carrier on the route. |
directAirlineCount, directAirlines[] | Every airline flying it non-stop: name, code, isPopularOnThisRoute, airlineUrl. |
nearbyAirportsIncluded, nearbyAirportCount, nearbyAirportsWithAPrice | Whether the comparison was collected, how many airports it covers, and how many of them are priced. |
nearbyAirportDistanceUnit | km or mi — read from the source, because it changes by market. |
cheapestNearbyAirport, cheapestNearbyAirportPrice | The cheapest airport into the destination city, and its price. |
nearbyAirports[] | Per airport: airportCode, airportName, distance, distanceUnit, isClosest, isCheapest, cheapestCarrier, cheapestPrice, cheapestPriceFormatted, tripType, currency. |
monthlyPriceCurve[] | Per month: month, monthName, price, priceFormatted, tripType, currency, monthUrl. |
exampleFareCount, exampleFares[] | Priced examples: departureDate, returnDate, tripType, price, airlines, airlineCodes, fromAirport, toAirport, isDirect, quotedAt, flightUrl. |
faqCount, faqs[] | The published questions and answers for the route: question, answer, topic. |
sourceUrl, requestedUrl | Where the profile came from, and what was asked for. |
priceDisclaimer, pricesAreEstimates | Skyscanner's own wording about how its prices should be read. |
isPartialProfile | True when only part of the profile came through. Everything missing is then null, never estimated and never zero — including the counts (directAirlineCount, exampleFareCount, nearbyAirportCount, monthsWithAPublishedPrice, faqCount), because a count of 0 would be a measurement nobody took. A count is 0 only on a complete result where the source published nothing there. |
publishedFigureConflicts[] | Cases where Skyscanner published two different values for the same numeric figure — weekly flights, flight time, destination count, headline price. Both are kept. (The cheapest-month disagreement is not in here; both answers are their own columns, cheapestMonth and cheapestMonthStatement.) |
notes[] | Anything unusual about this particular result. |
collectedAt | When it was collected. |
Pricing
You pay per result, not per minute.
| What you pay for | Price |
|---|---|
| Route profile collected — one route, one market, saved as a result | $15.00 per 1,000 |
| Nearby airport comparison added — only when you switch it on, and only when it actually carries prices | $5.00 per 1,000 |
One result is a whole route dossier — the complete non-stop airline roster, weekly frequency, flight time, a twelve-month price curve, priced examples and the catchment comparison — around fifty fields for one route in one market.
Worked example. 500 routes in one market, with the nearby-airport comparison on: 500 profiles × $0.015 = $7.50, plus 500 comparisons × $0.005 = $2.50. Total: $10.00.
Take those same 500 routes across three markets and you get 1,500 results for 1,500 × $0.02 = $30.00. A first look at 25 routes costs $0.50.
Switch the comparison off and the run is $15.00 per 1,000 results, flat.
You are never charged for a route that had nothing published, a route the source does not publish at all, a route removed by your own filters, or a route that could not be read. Those are reported in the run summary instead.
Limits & what this actor cannot do
- Prices are a snapshot, and Skyscanner labels them as estimates. Its own wording
travels with every result in
priceDisclaimer. Airline pricing moves continuously, and a price seen now may be gone shortly after. - It cannot book, hold or reserve anything, and it cannot guarantee a price is still available. It reports what Skyscanner publishes to the public, nothing more.
- Some countries price one direction and others price the return trip, and you have to
look. Measured on the same route at the same moment: the Indian storefront published
₹ 27,470 for a one-way London → New York, and the German one published 348 € for the
return. Nothing in the two figures themselves distinguishes them, so every result carries
priceTripType, every month in the curve, every alternative airport and every priced example carries its owntripType, and none of them is ever assumed — when the source does not say, or contradicts itself, the field isnull. Do not compare, average or model two results without checking it first. - Two figures are English-only.
bookAheadDaysandairportsServingDestinationare not published as figures anywhere: they exist only inside the route's written answers, and a number is only ever taken out of those answers in English rather than guessed from another language. On any storefront whose answers are not in English — Germany, France, Spain, Italy, the Netherlands and Poland always, and any of the others on a run where they answer for a different country — both fields are therefore empty on every route, andwrittenAnswerFiguresAvailableon each result — plus a line in the run summary — tells you that is what happened, rather than leaving it looking like a route nobody answered for. Everything else on the result is available in every market. - Skyscanner sometimes disagrees with itself, and you are shown both answers. The
headline cheapest month and its own written answer to "which month is cheapest" come
from different places and can name different months — measured on a live route:
headline November, written answer September. Both are on the result, in
cheapestMonthandcheapestMonthStatement, andcheapestMonthByPricegives you the month the published numbers actually support. Nothing is silently picked for you. Note thatpublishedFigureConflicts[]covers the figures published as numbers — weekly flights, flight time, destination count and the headline price — and not this one, because the written answer is a sentence in the local language and no month is ever read out of it. - The published flight time is rounded, occasionally oddly. One live route is
published as "7 hrs, 60 mins" where the same page's written answer says 7 h 59 m.
The text is passed through exactly as published and flagged with
averageFlightTimeIsRoundedrather than quietly corrected. - Results differ by market, and a few markets answer for wherever the run reads
from. Germany, India, Australia, Canada, Spain, Italy, the Netherlands and Poland
reliably answer for themselves. The United States, United Kingdom and France
storefronts sometimes answer with another country's market instead. Every result is
always labelled with the market and currency that actually answered, and
marketMatchesRequestedtells you which happened — a result is never labelled with a market that was merely asked for. Turn ononlyRequestedMarketto discard mismatches. - A route with nothing on it is reported as having nothing, not as an error. Thin and seasonal routes exist: measured live, one real Scottish island route publishes its alternative airports and no price at all anywhere. That is reported as empty, and it is not saved as a result or charged for.
- A route Skyscanner does not publish at all is its own outcome. It is counted separately from a route that is published but bare.
- If the source declines to serve a route, that route is reported as "could not be read" — never as a route with no data. This is the distinction the whole actor is built around, because the two look identical otherwise. The run summary counts them separately, and if the source stops answering part-way through, the run says so and stops rather than spending your allowance on silence.
- Baggage fees, seat maps, airline ratings and cabin classes are not available here. Skyscanner does not publish them alongside route economics.
- There is no "cheapest destinations from anywhere" list. Skyscanner publishes only a small sample of destinations on pages of this kind, so a full destination sweep is not something this actor can honestly offer.
- Very broad sweeps return what Skyscanner publishes, in the order it publishes it, up to your route limit — not an unlimited list.
- Speed depends on the size of the job and on how quickly the source answers. No fixed throughput is promised, and a large run is deliberately paced.
- Skyscanner's terms govern automated access. You are responsible for using the data lawfully and in line with those terms, and for handling any personal data in line with applicable privacy law.
FAQ
Do I need an account on Skyscanner? No. Nothing is signed in to and nothing is signed up for.
Does it need my login or password? No. It never asks for one, and there is nowhere to enter one.
Can I schedule it? Yes. Schedule it daily or weekly and the results accumulate, so you can watch a route's frequency, airline roster and seasonal curve change over time.
Are these prices bookable? Treat them as indicative. Skyscanner publishes them as estimated lowest prices and says so itself, in wording carried on every result. They are a snapshot of what was published at collection time, not a held or guaranteed price.
Why does the same route cost different amounts in different markets?
Because they genuinely are different products. Each country storefront has its own
inventory and its own currency, and the cheapest month can differ too. Nothing is ever
converted between currencies — every figure is exactly what that market published. Check
priceTripType before reading anything into a gap: some countries publish these prices
for one direction and others for the return trip, so part of a difference can simply be
that one of the two figures buys twice the travel.
One market shows a much lower price than another. Is it really cheaper?
Only if both results say the same thing in priceTripType. When one says one_way and
the other says return, they are not comparable at all, and neither one is wrong — they
are answers to different questions.
What is the difference between "cheapest month" and "cheapest month by price"? The first is Skyscanner's headline answer. The second is the month with the lowest figure in the twelve-month curve on the same result. They usually agree; when they don't, you can see it rather than having a choice made for you.
How do I get every route out of one airport?
Turn on findRoutesForMe, put the airport in seedOrigins, and raise maxRoutes. Add
minFlightsPerWeek to cut the long tail down to routes with real traffic.