If you've ever searched for flights on Skyscanner and thought "I need this data in my app", the first thing you'll discover is that the official Skyscanner API is not a self-serve product. Skyscanner provides its Travel APIs to partners, not to individual developers who just want a key.
The good news: the same Skyscanner flight search data is available through a managed helper API on RapidAPI, with a free tier you can start using today. This tutorial walks you through getting a free Skyscanner API key, making your first flight search, and building on top of the results — with complete working code in Node.js and Python.
Looking for the official reference instead? See Skyscanner API Documentation: Where It Is & How to Access.
Why the official Skyscanner API is hard to get#
Skyscanner's Travel APIs are provided to partners such as travel businesses, price-comparison sites and affiliates. Its developer site describes them as APIs "provided to connect partners", and it directs access questions to Skyscanner Partner Support. There is no sign-up form that gives an individual developer a production key on the spot.
The official catalogue is broad: flights (live and indicative prices), car hire, stays, utility APIs for places and carriers, and an affiliate link API. If you are an established travel business, contact Skyscanner Partner Support through their developer site. The exact application steps and timings are set by Skyscanner, so we do not guess at them here.
For developers who need Skyscanner flight data now — for a side project, a price tracker, an affiliate site, or a proof of concept — the practical route is a Skyscanner API on RapidAPI: a managed service that handles the data aggregation and returns clean JSON, with a free tier and no partner agreement required.
The Skyscanner API we recommend#
The Sky Scrapper API by apiheya is distributed on RapidAPI and is one of the most actively maintained Skyscanner data APIs available to independent developers. It covers the full flight search surface — one-way, round-trip, price calendars, airport lookup — and extends into hotels and car hire, making it a full travel data API rather than just a flight search wrapper.
How to get a free Skyscanner API key#
A "Skyscanner API key" for independent developers means a RapidAPI key that grants access to the Sky Scrapper API. Here's how to get one in under two minutes:
- Go to rapidapi.com and create a free account.
- Search for "Sky Scrapper" or navigate to rapidapi.com/apiheya/api/sky-scrapper.
- Click Subscribe to Test and select the BASIC plan (free).
- Copy your
X-RapidAPI-Keyfrom the code-snippets panel on the right.
That key is your Skyscanner API key. It works for every API on RapidAPI, not just Sky Scrapper — so if you later need Google Flights data, hotel rates, or weather, the same key works.
Quickstart: your first Skyscanner API call#
The Sky Scrapper API is a standard HTTP REST API — send a GET request with your key in the headers, get JSON back. Here's the simplest working call in cURL:
curl --request GET \
--url 'https://sky-scrapper.p.rapidapi.com/api/v1/flights/searchFlights?originSkyId=LOND&destinationSkyId=NYCA&originEntityId=27544008&destinationEntityId=27537542&date=2026-06-15&adults=1¤cy=USD&countryCode=US&market=en-US' \
--header 'X-RapidAPI-Host: sky-scrapper.p.rapidapi.com' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY'The response looks like this:
{
"status": true,
"data": {
"itineraries": [
{
"id": "13554-2606151010--32480-0-10414-2606151315",
"price": {
"raw": 289.0,
"formatted": "$289"
},
"legs": [
{
"id": "13554-2606151010--32480-0-10414-2606151315",
"origin": { "id": "LHR", "name": "London Heathrow" },
"destination": { "id": "JFK", "name": "New York JFK" },
"durationInMinutes": 425,
"stopCount": 0,
"departure": "2026-06-15T10:10:00",
"arrival": "2026-06-15T13:15:00",
"carriers": {
"marketing": [{ "name": "British Airways", "logoUrl": "..." }]
}
}
]
}
]
}
}Two things to note about the request parameters:
originSkyId/destinationSkyId— Skyscanner's city-level codes (e.g.,LONDfor London,NYCAfor New York). These are different from IATA airport codes. Use the/searchAirportendpoint to look them up from a user's typed city name.originEntityId/destinationEntityId— numeric IDs for the location. Also returned by/searchAirport. Both are required for/searchFlights.
The key endpoints#
| Endpoint | What it does |
|---|---|
/api/v1/flights/searchAirport | Search airports and cities by keyword — returns skyId and entityId |
/api/v1/flights/searchFlights | One-way or round-trip flight search |
/api/v1/flights/searchFlightsComplete | Full result set with extended filtering options |
/api/v1/flights/getPriceCalendar | Cheapest fare per day across a date range |
/api/v1/flights/getFlightDetails | Full detail for a specific itinerary token |
/api/v1/hotels/searchHotels | Hotel search for a destination |
/api/v1/cars/searchCars | Car hire search |
The typical integration pattern is: searchAirport for origin and
destination autocomplete → getPriceCalendar to show cheapest dates →
searchFlights on date selection → getFlightDetails when the user
clicks a result.
Node.js example — one-way flight search#
// npm install node-fetch
import fetch from "node-fetch";
const RAPIDAPI_KEY = process.env.RAPIDAPI_KEY;
const HOST = "sky-scrapper.p.rapidapi.com";
async function searchAirport(query) {
const url = new URL(`https://${HOST}/api/v1/flights/searchAirport`);
url.searchParams.set("query", query);
url.searchParams.set("locale", "en-US");
const res = await fetch(url, {
headers: {
"X-RapidAPI-Key": RAPIDAPI_KEY,
"X-RapidAPI-Host": HOST
}
});
const { data } = await res.json();
return data[0];
}
async function searchFlights({ from, to, date }) {
const url = new URL(`https://${HOST}/api/v1/flights/searchFlights`);
url.searchParams.set("originSkyId", from.skyId);
url.searchParams.set("destinationSkyId", to.skyId);
url.searchParams.set("originEntityId", from.entityId);
url.searchParams.set("destinationEntityId", to.entityId);
url.searchParams.set("date", date);
url.searchParams.set("adults", "1");
url.searchParams.set("currency", "USD");
url.searchParams.set("market", "en-US");
url.searchParams.set("countryCode", "US");
const res = await fetch(url, {
headers: {
"X-RapidAPI-Key": RAPIDAPI_KEY,
"X-RapidAPI-Host": HOST
}
});
if (!res.ok) throw new Error(`Skyscanner API ${res.status}`);
const { data } = await res.json();
return data.itineraries;
}
const [origin, destination] = await Promise.all([
searchAirport("London"),
searchAirport("New York")
]);
const flights = await searchFlights({
from: origin,
to: destination,
date: "2026-07-10"
});
for (const f of flights.slice(0, 5)) {
const leg = f.legs[0];
console.log(
`${f.price.formatted} · ${leg.carriers.marketing[0].name} · ${leg.stopCount} stop(s)`
);
}Python example — price calendar (cheapest dates)#
import os
import requests
HOST = "sky-scrapper.p.rapidapi.com"
HEADERS = {
"X-RapidAPI-Key": os.environ["RAPIDAPI_KEY"],
"X-RapidAPI-Host": HOST,
}
def search_airport(query):
r = requests.get(
f"https://{HOST}/api/v1/flights/searchAirport",
headers=HEADERS,
params={"query": query, "locale": "en-US"},
timeout=10,
)
r.raise_for_status()
return r.json()["data"][0]
def price_calendar(origin, destination, year_month):
r = requests.get(
f"https://{HOST}/api/v1/flights/getPriceCalendar",
headers=HEADERS,
params={
"originSkyId": origin["skyId"],
"destinationSkyId": destination["skyId"],
"originEntityId": origin["entityId"],
"destinationEntityId": destination["entityId"],
"yearMonth": year_month,
"currency": "USD",
},
timeout=15,
)
r.raise_for_status()
return r.json()["data"]["flights"]["days"]
origin = search_airport("London Heathrow")
destination = search_airport("Paris CDG")
days = price_calendar(origin, destination, "2026-08")
for day in sorted(days, key=lambda d: d["price"])[:5]:
print(day["day"], "→", f"${day['price']}")The price calendar endpoint is one of the most useful in the entire API — it answers "when is it cheapest to fly?" in a single call that covers a full month, which is exactly what users want to see before they pick a date.
What you can build with the Skyscanner travel API#
Pros
Cons
The strongest use cases for the Skyscanner travel API fall into a few well-defined patterns, each leaning on different endpoints.
Price-drop trackers schedule searchFlights calls for watched routes
and notify users when fares hit a threshold. Since each user only needs
one or two calls per day per watched route, this is one of the most
request-efficient use cases. Batch users watching the same route into
a single call to keep API costs low.
Cheap-date finders use getPriceCalendar to show a full month of
fares in a single call. This is exactly the calendar Google Flights and
Skyscanner themselves show under the date picker. It is one of the
highest-converting travel UI patterns because it answers the user's
actual question — "when should I go?" — before they even pick a date.
Affiliate and SEO travel blogs build route-specific landing pages
("cheap flights London to New York") with live embedded prices via
searchFlights and outbound links to Skyscanner for booking. The
organic traffic potential on long-tail route keywords is large, and
the affiliate revenue per booking click is meaningful.
Travel comparison tools combine the flight search results with the hotel and car hire endpoints — all under the same RapidAPI key — to build a complete trip cost estimator for a destination.
Pricing — what each plan gets you#
Prices and limits below were read from the provider's RapidAPI pricing page on 12 October 2026. They change, so check the live pricing page before you subscribe.
For most affiliate and side-project use cases, the PRO tier is the right starting point. The free BASIC tier gives you only 20 requests a month, so use it to run a few test searches and check the response format before you commit. Cache results so every request counts.
Common errors and how to fix them#
Airport code errors are the most common integration mistake. The Sky
Scrapper API uses Skyscanner's own skyId city codes (LOND, NYCA,
PARI), which are not the same as IATA airport codes (LHR, JFK,
CDG). Always pass user input through searchAirport to get the correct
skyId and entityId before calling searchFlights. One extra call
eliminates an entire class of confusing failures.
Caching is not optional in production. A price tracker watching 1,000
routes would exhaust a paid plan in a day if every page view triggered a
live API call. Cache searchFlights results per (skyId, destination, date, adults) tuple for 5–15 minutes — fares don't change that fast
and users can't tell the difference.
Pre-launch checklist#
- Airport IDs resolved —
searchAirporton every user-typed location before callingsearchFlights. - Caching in place — 5-minute minimum on flight search responses.
- 15-second timeout — accounts for live data aggregation latency.
429handling — checkRetry-Afterheader and back off.- Affiliate links set — deep-link to Skyscanner booking pages with your affiliate ID if you're monetising outbound clicks.
- ToS reviewed — read the Sky Scrapper API provider terms before going commercial.
Related reading#
- Best Travel APIs for Developers in 2026 — flights, hotels, maps, weather and currency in one guide.
- Hotel Booking API: 6 Options Compared — which hotel API to pair with your flight data.
- Booking.com API: How to Get a Free API Key — add hotel search and prices to your flight data.
- Google Flights API: Get Live Data (2026) — if you need Google Flights data alongside Skyscanner for comparison.
- Browse more data & analytics APIs — travel data, enrichment, and market-data providers in the same helper-API family.