Skyscanner APIskyscanner.de ↗
Search one-way flights, compare airline prices, and get daily or monthly cheapest-fare calendars from Skyscanner.de via 4 structured API endpoints.
What is the Skyscanner API?
The Skyscanner.de API exposes 4 endpoints for querying flight data from Skyscanner's German market: autocomplete airport and city lookups, one-way flight search with per-itinerary pricing, and two price-calendar views. The search_flights endpoint returns available itineraries with airline, price, times, and duration for any origin–destination pair and departure date, while get_price_calendar and get_price_calendar_month surface the cheapest fares across individual days and across multiple months.
curl -X GET 'https://api.parse.bot/scraper/33eee404-d3ea-4f24-8793-1dcfd3580c5c/search_flights_autocomplete?query=Ber' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace skyscanner-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Skyscanner flight search — find cheapest flights and compare prices."""
from parse_apis.skyscanner_flight_search___pricing_api import (
Skyscanner, Route, Origin, Destination, PriceCategory, PriceTier, PlaceNotFound
)
client = Skyscanner()
# Search for airports matching "Berlin" — limit caps total items fetched.
for place in client.places.search(query="Ber", limit=3):
print(place.place_name, place.place_id, place.country_name)
# Construct a route using typed enums and check monthly prices.
route = Route(_api=client, origin=Origin.BER, destination=Destination.LOND)
monthly = route.monthly_prices()
for mp in monthly.flight_prices_per_month[:3]:
print(mp.month.year, mp.month.month, mp.price.amount, mp.price.currency_code, mp.price_category)
# Get daily prices to find the cheapest specific day.
calendar = route.daily_prices()
cheapest_day = min(calendar.days, key=lambda d: d.price)
print(cheapest_day.day, cheapest_day.price, calendar.currency, cheapest_day.group)
# Search flights on that cheapest day.
try:
search = route.search_flights(date=cheapest_day.day)
print(search.itineraries.context.total_results, "flights found")
for itin in search.itineraries.results[:3]:
leg = itin.legs[0]
print(itin.price.formatted, leg.origin.city, "->", leg.destination.city, leg.duration_in_minutes, "min")
except PlaceNotFound as exc:
print(f"Place not found: {exc}")
print("exercised: places.search / monthly_prices / daily_prices / search_flights")
Autocomplete airport, city, or country names from a partial text query. Returns matching places with Skyscanner place codes, city names, country information, and Geo IDs usable as entity identifiers in other endpoints. Results are localized to German (de-DE). The response is a flat list ordered by relevance; no pagination.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Partial name of a location to search for (e.g. 'Ber', 'Lond', 'Par') |
{
"type": "object",
"fields": {
"data": "array of matching place objects with PlaceId, PlaceName, CountryId, CountryName, CityId, CityName, GeoId, IataCode, and Location"
},
"sample": {
"data": {
"data": [
{
"GeoId": "95673383",
"CityId": "BERL",
"PlaceId": "BER",
"CityName": "Berlin",
"IataCode": "",
"Location": "52.366667,13.50333",
"CountryId": "DE",
"PlaceName": "Berlin Brandenburg",
"CountryName": "Deutschland"
},
{
"GeoId": "128668278",
"CityId": "BERI",
"PlaceId": "BGO",
"CityName": "Bergen",
"IataCode": "",
"Location": "60.293611,5.219444",
"CountryId": "NO",
"PlaceName": "Bergen",
"CountryName": "Norwegen"
}
]
},
"status": "success"
}
}About the Skyscanner API
Endpoints and What They Return
The search_flights_autocomplete endpoint accepts a partial location string (e.g. 'Ber' or 'Lond') and returns matching airports, cities, and countries. Each result includes PlaceId, PlaceName, IataCode, GeoId, CityId, CityName, CountryId, and CountryName. Results are localized to de-DE, so display names and country strings appear in German. Use this endpoint to resolve user input into the IATA codes required by the flight search and calendar endpoints.
Flight Search
search_flights takes a required origin IATA code, destination IATA code, and a date string in YYYY-MM-DD format. It returns a sessionId and an itineraries object containing available one-way flight options — each with carrier, pricing, departure and arrival times, and total duration. Only one-way routes are supported by this endpoint; round-trip search is not exposed.
Price Calendars
Two calendar endpoints offer different granularities. get_price_calendar returns a flights object showing the cheapest available fare for each day of a given month for an origin–destination pair — useful for displaying a "cheapest day to fly" calendar view. get_price_calendar_month returns a flightPricesPerMonth array, giving cheapest-price summaries grouped by month across multiple months for the same route. Both accept origin and destination as required inputs and require no date parameter, defaulting to near-future availability.
The Skyscanner API is a managed, monitored endpoint for skyscanner.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when skyscanner.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official skyscanner.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display a date-picker with per-day cheapest prices using
get_price_calendarfor a user-specified route - Power a month-overview fare grid with
get_price_calendar_monthto help users pick the cheapest travel month - Build an airport search-as-you-type input using
search_flights_autocompletewith IATA code resolution - Retrieve and compare airline itineraries, prices, and flight durations for a specific route and date via
search_flights - Aggregate daily minimum fares across routes to identify the cheapest corridor for flexible travelers
- Enrich travel booking tools with German-localized airport and city names for EU-facing products
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Skyscanner have an official developer API?+
What does `search_flights` return, and can it search round-trip routes?+
sessionId and an itineraries object containing one-way flight options with airline, price, departure and arrival times, and duration. Round-trip search is not covered by this endpoint. The API currently handles one-way queries only. You can fork it on Parse and revise to add a round-trip search endpoint if your use case requires it.Do the price calendar endpoints require a specific month or date?+
get_price_calendar and get_price_calendar_month require only origin and destination — no date or month parameter. Both default to near-future availability. If you need to query a specific target month, that filtering is not currently exposed. You can fork the API on Parse and revise it to add a month parameter to the calendar endpoints.Are multi-city or connecting-flight details exposed?+
search_flights endpoint returns itinerary-level data for one-way routes, but does not break out individual flight segments, layover durations, or connection airports within a multi-leg itinerary. You can fork the API on Parse and revise it to add a segment-detail endpoint once the underlying data is available.What localization does the autocomplete endpoint use?+
search_flights_autocomplete are localized to de-DE, meaning place names, city names, and country names are returned in German. This is fixed to the German market and is not configurable per-request in the current endpoint definition.