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 closed — it's only available to approved travel partners, not independent developers.
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.
Why the official Skyscanner API is hard to get#
Skyscanner runs a partner programme for travel agencies, meta-search engines, and OTAs. If you're an established travel business, you can apply at partners.skyscanner.net for direct API access. The process involves a business review, a commercial agreement, and production credentials that typically take weeks to arrive — not something you can sign up for and use today.
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#
For most affiliate and side-project use cases, the PRO tier is the right starting point. The free BASIC tier is sufficient to test all endpoints and validate your integration before committing.
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#
- 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.