[Home](https://scrapfly.io/)/[Scrapers](https://scrapfly.io/scrapers)/Skyscanner

Flights · fare calendars · hotels · car rentals

# // Skyscanner Scraper API

Get Skyscanner flight search results with prices, airlines, times, stops and booking deals, the cheapest fare for every day up to a year ahead, hotel results with nightly and total prices, and car rental quotes, as clean JSON. Scrapfly handles PerimeterX and renders the page, so you send a search URL and read the data.

- **Clone it and run it.** An open-source Skyscanner flight scraper, tested against live Skyscanner every night.
- **Every itinerary from one search.** Read the search response Skyscanner's own page loads: price, airline, departure and arrival, duration, stops and the number of booking deals for each flight.
 
 [Get free API key](https://scrapfly.io/register) [View GitHub scraper](https://github.com/scrapfly/scrapfly-scrapers/tree/main/skyscanner-scraper) [Read Unblocker docs](https://scrapfly.io/docs/scrape-api/unblocker) 

1,000 free credits. No credit card required.

 [  ](https://scrapeway.com/web-scraping-api/scrapfly) [  ](https://www.capterra.com/p/212653/Scrapfly/)  

 4.9/5 from 238 reviews 

 



 

 

 Skyscanner searches · illustration

 

 

 Flight JSON**Output**

```
{
  <span class="c-str">"from"</span>: <span class="c-str">"JFK"</span>,
  <span class="c-str">"to"</span>: <span class="c-str">"LHR"</span>,
  <span class="c-str">"carrier"</span>: <span class="c-str">"Aer Lingus"</span>,
  <span class="c-str">"departs"</span>: <span class="c-str">"2027-01-20T21:05:00"</span>,
  <span class="c-str">"arrives"</span>: <span class="c-str">"2027-01-21T11:25:00"</span>,
  <span class="c-str">"minutes"</span>: <span class="c-num">560</span>,
  <span class="c-str">"stops"</span>: <span class="c-num">1</span>,
  <span class="c-str">"price"</span>: <span class="c-str">"$283"</span>,
  <span class="c-str">"deals"</span>: <span class="c-num">22</span>
}
```

Printed by the Python request below[See the request ↓](#implementation)

  

What you can scrape from Skyscanner

Four kinds of Skyscanner data you can scrape with Scrapfly, no Skyscanner account or partner API access required.

 ## // Scrape Skyscanner flight search results

One-way and round-trip searches by airport and date: every itinerary in the results with its price, the number of booking deals, marketing and operating airline, departure and arrival times, duration, stop count and flight segments. Round trips return both legs on each itinerary.

- price
- pricingOptions
- carriers.marketing
- carriers.operating
- departure
- arrival
- durationInMinutes
- stopCount
- segments

  ## // Scrape Skyscanner fare calendars and route pages

The flight search page also loads Skyscanner's price calendar: the cheapest fare for each departure day up to a year ahead, tagged low, medium or high, plus monthly lows. Route pages such as New York to London give the lowest listed fare and the route questions Skyscanner answers on the page, without a browser.

- day
- price
- group
- flightPricesPerMonth
- lowPrice
- priceCurrency
- FAQPage

  ## // Scrape Skyscanner hotel results and hotel pages

Hotel searches by city and dates: 35 hotels per results page with name, star rating, address, coordinates, review score, price per night and total price with taxes, partner offers and photos, plus the number of hotels found. Hotel pages add the description, amenities, check-in and check-out times and guest reviews.

- name
- stars
- coordinates
- reviewSummary.score
- pricePerNight
- priceTotal
- partnerOffers
- hotelTotal
- amenityFeature
- review

  ## // Scrape Skyscanner car rental quotes

Car rental searches by pickup location and dates: each quote with rental company, car model, price, seats, bags, fuel policy, free cancellation where offered and pickup type, grouped by car class across the providers Skyscanner compares.

- vndr
- car\_name
- price
- seat
- bags
- fuel\_pol
- free\_cancel
- pickup\_type
- groups

  



Reliability

## // Get past Skyscanner's PerimeterX block

Skyscanner runs PerimeterX in front of its search pages. A request without Unblocker lands on an "Are you a person or a robot?" page that still answers HTTP 200, so a status check alone won't catch the block. Flight, hotel and car prices also load after the page, through Skyscanner's own search calls. Use Unblocker with residential proxies and render the page in a browser.

`unblocker=true`Enable Scrapfly's [Unblocker](https://scrapfly.io/products/unblocker) for Skyscanner's PerimeterX check, with `proxy_pool=residential`.



`render_js=true`Render search pages in a browser so the price search runs. `rendering_wait=8000` gives it time to finish.



`browser_data`Read the search response from the captured XHR calls and raise an error when it is missing, so a captcha page never reaches your dataset.



 



Choose your tools

## // Scrapfly products for Skyscanner scraping

Start with the Web Scraping API, Unblocker and residential proxies. Add a hotel extraction model, screenshots, a browser session or a URL-list crawl as your workflow needs them. One API key covers all five products.

 ### Web Scraping API for Skyscanner

Fetch flight, hotel and car rental search URLs with Unblocker, a browser and residential proxies.

The results come back as captured XHR calls in `browser_data`, so you read Skyscanner's search response as JSON instead of parsing the rendered page.

 

```
GET /scrape?url=https://www.skyscanner.com/transport/flights/JFK/LHR/270120/&unblocker=true&render_js=true&rendering_wait=8000&proxy_pool=residential&country=US
```

 [Explore Web Scraping API →](https://scrapfly.io/products/web-scraping-api)  ### Data Extraction API for Skyscanner hotel pages

Add `extraction_model=hotel` to a hotel page request for a standard hotel record, with no parser to write.

Get name, address, rating, review count, amenities, check-in and check-out times, photos and guest reviews in the same schema you use for other travel sites.

 

```
GET /scrape?url=https://www.skyscanner.com/hotels/united-states/new-york-hotels/boro-hotel/ht-134628954&unblocker=true&proxy_pool=residential&country=US&extraction_model=hotel
```

 [Explore Data Extraction API →](https://scrapfly.io/products/extraction-api)  ### Screenshot API for Skyscanner results

Capture a flight results page with its prices, airlines, times, stops and the Best, Cheapest and Fastest tabs.

Keep a dated visual record of the fares you collected alongside your JSON.

 

```
GET /screenshot?url=https://www.skyscanner.com/transport/flights/JFK/LHR/270120/&country=us&capture=fullpage&format=png&rendering_wait=8000
```

 [Explore Screenshot API →](https://scrapfly.io/products/screenshot-api)  ### Cloud Browser API for Skyscanner sessions

Call the Cloud Browser unblock endpoint for a hosted Chromium session that is already past Skyscanner's PerimeterX check, then connect Playwright or Puppeteer to it.

Open the search, wait for the results to finish loading and read the page or its search responses. A failed unblock returns an error instead of a session, so retry it.

 

```
POST https://browser.scrapfly.io/unblock?key=KEY {"url": "https://www.skyscanner.com/transport/flights/JFK/LHR/270120/", "country": "us"}
```

 [Explore Cloud Browser API →](https://scrapfly.io/products/cloud-browser-api)  ### Crawler API for lists of Skyscanner URLs

Submit route pages and city hotel pages as one bounded job, with Unblocker and residential proxies applied to the requests.

Ask for HTML output and read each page's JSON-LD fares and hotel lists after the job finishes.

- url\_list
- unblocker
- proxy\_pool
- country
- content\_formats

 [Explore Crawler API →](https://scrapfly.io/products/crawler-api)  



One request

## // Fetch a Skyscanner flight search and read the cheapest fare

The JSON at the top is what this code prints for a one-way New York to London search: one request, then the cheapest itinerary from the search response Skyscanner's page loads.

Install `scrapfly-sdk` and replace the key below. The example uses only the SDK and Python's standard library.

**Prefer the full scraper?** The open-source [Skyscanner scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/skyscanner-scraper) turns a flight search into a list of flights with airline, times, duration, stops, price and deal count, in Python 3.10. It runs against live Skyscanner every night. Clone it, set `SCRAPFLY_KEY`, and run `poetry run python run.py`.

 

 Python · scrapfly-sdkscrape + parse

```
<span class="c-key">import</span> json
<span class="c-key">from</span> scrapfly <span class="c-key">import</span> ScrapeConfig, ScrapflyClient

client = ScrapflyClient(key=<span class="c-str">"YOUR_SCRAPFLY_KEY"</span>)
result = client.scrape(ScrapeConfig(
    <span class="c-str">"https://www.skyscanner.com/transport/flights/JFK/LHR/270120/"</span>,
    unblocker=<span class="c-key">True</span>, render_js=<span class="c-key">True</span>, rendering_wait=<span class="c-num">8000</span>,
    proxy_pool=<span class="c-str">"residential"</span>, country=<span class="c-str">"US"</span>,
))
calls = [
    c <span class="c-key">for</span> c <span class="c-key">in</span> result.scrape_result[<span class="c-str">"browser_data"</span>][<span class="c-str">"xhr_call"</span>]
    <span class="c-key">if</span> <span class="c-str">"/radar/api/v2/web-unified-search/"</span> <span class="c-key">in</span> c[<span class="c-str">"url"</span>]
]
<span class="c-key">if</span> <span class="c-key">not</span> calls:
    <span class="c-key">raise</span> RuntimeError(<span class="c-str">"Skyscanner returned no flight results"</span>)
search = json.loads(calls[-<span class="c-num">1</span>][<span class="c-str">"response"</span>][<span class="c-str">"body"</span>])
best = min(
    search[<span class="c-str">"itineraries"</span>][<span class="c-str">"results"</span>],
    key=<span class="c-key">lambda</span> r: r[<span class="c-str">"price"</span>][<span class="c-str">"raw"</span>],
)
leg = best[<span class="c-str">"legs"</span>][<span class="c-num">0</span>]
flight = {
    <span class="c-str">"from"</span>: leg[<span class="c-str">"origin"</span>][<span class="c-str">"displayCode"</span>],
    <span class="c-str">"to"</span>: leg[<span class="c-str">"destination"</span>][<span class="c-str">"displayCode"</span>],
    <span class="c-str">"carrier"</span>: leg[<span class="c-str">"carriers"</span>][<span class="c-str">"marketing"</span>][<span class="c-num">0</span>][<span class="c-str">"name"</span>],
    <span class="c-str">"departs"</span>: leg[<span class="c-str">"departure"</span>],
    <span class="c-str">"arrives"</span>: leg[<span class="c-str">"arrival"</span>],
    <span class="c-str">"minutes"</span>: leg[<span class="c-str">"durationInMinutes"</span>],
    <span class="c-str">"stops"</span>: leg[<span class="c-str">"stopCount"</span>],
    <span class="c-str">"price"</span>: best[<span class="c-str">"price"</span>][<span class="c-str">"formatted"</span>],
    <span class="c-str">"deals"</span>: len(best[<span class="c-str">"pricingOptions"</span>]),
}
print(json.dumps(flight, indent=<span class="c-num">2</span>))
```

 

 



What the data is used for

## // Common Skyscanner scraping use cases

### Fare tracking

Track prices on a set of routes and dates and alert when the cheapest fare drops.



### Fare calendar analysis

Find the cheapest departure days and months for a route up to a year ahead.



### Airline and route research

See which airlines serve a route, direct or with stops, and how their prices and durations compare.



### Hotel rate monitoring

Watch nightly and total prices, review scores and partner offers by city and dates.



### Car rental pricing

Compare rental prices by pickup location, car class and rental company.



### Travel price comparison

Feed flight, hotel and car prices into your own comparison or trip-planning product.



 



Common questions

## // Skyscanner scraping FAQ

 Is scraping Skyscanner legal?There is no universal answer. Legality depends on your jurisdiction, the data, the access method and how you use the result. Keep the workflow to public search and hotel pages, avoid signed-in content, treat anything that identifies a guest reviewer as personal data, review Skyscanner's terms of service, and get legal advice for commercial use.

 Does Skyscanner have a public API?Skyscanner doesn't offer an open API for flight or hotel prices; its Travel API is available only to approved partners under a commercial agreement. These requests read public Skyscanner pages signed out, so you need a Scrapfly API key, not a Skyscanner account or partner access.

 Why does Skyscanner show "Are you a person or a robot?"That is PerimeterX, Skyscanner's bot protection. The captcha page still answers HTTP 200. Set `unblocker=true` and `proxy_pool=residential`, render the page with `render_js=true`, and check that the response contains Skyscanner's search data before parsing it.

 Can I scrape Skyscanner flight prices?Yes. Put the airports and date in the search URL, for example `/transport/flights/JFK/LHR/270120/` for a one-way search on 20 January 2027, and add a return date for a round trip. Each itinerary carries its price, booking deals, airlines, times and stops. On round trips Skyscanner can still be adding results when the page settles, so check the search status before treating the list as complete.

 Can I scrape Skyscanner hotel prices?Yes. A hotel search page for a city and dates returns 35 hotels per results page with price per night and total price with taxes, star rating, review score and partner offers. Hotel pages add amenities, check-in times and guest reviews, and the `hotel` extraction model returns them in a standard schema.

 Can I scrape Skyscanner car rentals?Yes. A car rental search page for a pickup location and dates returns each quote with rental company, car model, price, seats, bags and fuel policy, grouped by car class. Not every quote lists every field, so check for each one before you store it.

 How much does scraping Skyscanner cost?A flight, hotel or car rental search page with Unblocker, a browser and residential proxies costs 30 credits. Residential bandwidth above 3 MB per request adds credits, which large hotel searches can reach. Route and hotel pages that don't need a browser cost 25 credits, and the hotel extraction model brings a hotel page to 35. Every account starts with 1,000 free credits.

 What are the rate limits when scraping Skyscanner?Scrapfly sets no Skyscanner-specific limit. Your maximum parallelism is the concurrency quota on your plan, or a lower cap configured for the project. Each in-flight request uses one slot until it finishes.

 



Start with one request

## Send the search. Read the JSON.

Web Scraping API with Unblocker, a browser and residential proxies, one call per Skyscanner search URL.

Proxies across 190+ countries

 [Skyscanner scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/skyscanner-scraper) [How to scrape Skyscanner](https://scrapfly.io/blog/posts/how-to-scrape-skyscanner) [All scraper pages](https://scrapfly.io/scrapers) 

 

 [Get free API key](https://scrapfly.io/register) [Read the docs](https://scrapfly.io/docs/scrape-api/unblocker)