Start with an official source. Skyscanner's Travel API serves approved partners, Duffel sells flight search by the order, and Travelpayouts gives affiliates cached fares through a token. Google's public fare API, QPX Express, ended on April 10, 2018. If you scrape public fare pages, read each site's rules first. On October 25, 2026, 7 of 12 fare sites' robots.txt files disallowed their flight search pages for all crawlers. Google Flights, Kayak, Skyscanner and Expedia were among them. Where scraping is allowed, use a residential exit in each market, a real browser and one session per search. At 1 TB, five residential sellers' own pages listed $0.24 to $2.10 per GB on October 26, 2026. The HProxy Lite pool costs $0.50/GB from one GB.
This guide covers the APIs, the rules, why fares differ by market and how a fare search loads. Then come the traffic, the proxies that fit and the setup. The sector overview is in travel fare aggregation, and the hotel companion is how to scrape hotel prices. The sites have their own pages, from Google Flights and Skyscanner to airlines such as Delta and Lufthansa.
Is there an API for flight prices?
Yes, several, and most need an agreement. Search demand shows where people start. In Google's Keyword Planner for October 2026, "amadeus api" draws about 5,400 searches a month and "skyscanner api" about 3,600. "Scrape flight prices" draws 30.
| Source | Who can use it | What it costs |
|---|---|---|
| Skyscanner Travel API | partners, by application | set in the partnership |
| Duffel | anyone, self-serve | $3.00 per order |
| Travelpayouts Data API | affiliates with a token | no fee printed |
| Amadeus Self-Service | reported closed | none |
| Google QPX Express | ended April 10, 2018 | none |
Skyscanner. Keys come through "an application with our Partnerships team", and the team contacts you if it succeeds. Skyscanner says the APIs cover over 52 markets, 30 languages and over 1,300 supply partners. Every search names a market, a locale and a currency.
Duffel. Duffel charges $3.00 per confirmed order and allows 1,500 searches per order each month. Each search beyond that ratio costs $0.005, so a monitor that books nothing pays for every search.
Travelpayouts. The Aviasales Data API returns prices "found by Aviasales users in the last 48 hours". The data is stored for 7 days and tied to a market. The data suits trend pages and alerts, and it is a cache of past searches.
Amadeus and Google. Amadeus's Python library for its Self-Service APIs is archived on GitHub. Amadeus's developer site reports that the self-service portal shut down on July 17. Google's QPX Express FAQ said in 2017 that "The QPX Express API service ends on April 10, 2018". Our Kayak page covers Kayak's own partner API.
Is it legal to scrape flight prices?
It depends on the country, the site's terms and the use, and this section is no legal advice. Read two things first: the robots.txt file and the terms. We read the robots files of 12 fare sites on October 25, 2026. For each, we checked the flight search page against the rules for all crawlers:
- Disallow
- No matching rule
| Site | Search path tested | Rule for all crawlers |
|---|---|---|
| Google Flights | /travel/flights/search | Disallow. |
| Kayak | /flights/... and its poll API | Disallow. |
| Momondo | /flight-search/... | Disallow. |
| Skyscanner | /transport/flights/... | Disallow. |
| Expedia | /Flights-Search | Disallow. |
| Priceline | /m/fly/search/... | No rule. |
| Air France | /search/offers | Disallow. |
| Ryanair | /gb/en/trip/flights/select | Disallow. |
| United | /en/us/fsr/choose-flights | No rule. |
| Delta | /flight-search/search | No rule. |
| American | /booking/search | No rule. |
| Southwest | /air/booking/select-depart.html | No rule. |
A missing rule grants nothing. The robots standard, RFC 9309, says its rules "are not a form of access authorization", and terms still apply. Kayak's terms of August 17, 2026 are explicit. Users may not "Scrape, harvest, deep-link to, train AI on, or otherwise use automated tools on our Site without our written permission".
Airlines have gone to court over fare scrapers. In 2004, a US court held in Southwest Airlines v. FareChase that a scraper gathering Southwest's flight information was unauthorized, because it interfered with Southwest's use of its site. In 2022 the Ninth Circuit found it likely that reading publicly available data falls outside the federal anti-hacking law, the CFAA. Our page on proxies for Ryanair covers that airline's own case against Booking.com.
Why do flight prices differ by country?
Because a fare can be limited to where it is sold. In the airline rule set, Category 15 restricts a fare by "countries/currencies of sale". It also names the "locales where the fare may or may not be sold". Skyscanner's API asks for the "Market where search is coming from" on every search. Taxes, currency and resident-only fares add their own gaps.
Controlled studies found such gaps rare at airlines. A 2014 test of 25 airlines from two countries found no systematic price differences by location. Our review of whether proxies or VPNs get cheaper flights covers the evidence. For a scraper, the rule is practical: store the market, the currency and the time with every fare, or two fares cannot be compared.
Which proxy do you need to scrape flight prices?
A residential proxy in the market you read, held for the whole search. Residential addresses belong to consumer internet providers, and a gateway lets you pick the country, and on some plans the city, of each session. A datacenter proxy is cheaper and may do for a site that accepts hosting addresses. An API needs no proxy at all.
Keep one market per series, and record the exit with every fare. Our guides to what a residential proxy is and rotating vs static residential proxies explain pools, gateways and sticky sessions.
How does a flight search load, and what does it mean for a scraper?
In two steps, at least on Skyscanner. Its own documentation says the website runs on the same /create and /poll calls as its API. The first call "returns an incomplete cached subset of results", and polling then fetches the complete list as supply partners answer. The session token "expires after around an hour".
Three rules follow for a scraper:
- Wait for the search to finish. A fare stored from the first screen may come from the cached subset.
- Keep one session for one search. The create and poll steps belong to one session, so hold one sticky address until the search ends.
- Expect fares to vanish. In the 2014 study, KLM flights disappeared and reappeared between searches about a minute apart, and travel sites show cached prices.
Fare pages draw their results with scripts, so the work runs in a browser. Our guides for Playwright and Puppeteer show the proxy wiring. How Akamai's bot defense reads a browser is covered in how to scrape past Akamai.
How much traffic does a flight scraper use?
A lot, because a browser downloads the whole page. Take an example job of 300 routes, 60 dates and 3 markets, or 54,000 searches per refresh, each loaded once in a browser:
At the market's median residential price of $3.50 per GB, one refresh costs about $578 at the median page. At the heaviest tenth it costs about $2,423. On our Residential Lite plan, the three refreshes cost $69.30, $129.87 and $242.20. HTTP Archive weighs home pages, and polling, retries and block pages add bytes of their own. Weigh a sample of real searches before you budget.
What are the best residential proxies for scraping flight prices?
Pools that target the market of each search, hold one address through it and cost little at volume. One refresh of the example job moves about 165 GB. We read each seller's own pricing page on October 26, 2026:
| Seller | Price per GB, Oct 26 | Why it fits fare searches |
|---|---|---|
| HProxy Lite | $0.50/GB from 1 GB, $0.23/GB at 10,000 GB+ | country, sticky while in use |
| Rainproxy | $0.40 at 100 GB, $0.24 at 1 TB | traffic never expires |
| Evomi | $0.49 on a monthly plan | city, rotating and sticky |
| DataImpulse | $1.00, then $0.80 at 1 TB | country, rotating and sticky |
| Decodo | $2.75 at 100 GB, $2.00 at 1 TB | ZIP and ASN, sticky |
| MarsProxies | $2.99 at 100 GB, $2.10 at 1,000 GB | city, rotating and sticky |
| HProxy Premium | $1.45/GB from 1 GB, $0.65/GB at 1,000 GB+ | city, 24-hour sessions |
Decodo's 100 GB rate is a monthly subscription and its 1 TB rate an enterprise plan. Evomi's $49 monthly plan includes 100 GB, and each extra GB costs the same $0.49. A daily refresh of the example job moves about 5 TB a month. At that volume, the rates at 1 TB matter more than the entry price.
Bright Data's smallest monthly plan cost $499 for 141 GB, and its residential network is open only to verified companies. For ten sellers side by side, see our best residential proxies guide.
How do you set up a proxy to scrape flight prices?
- Check the source. Prefer a partner or flight API, and read robots.txt and the terms of any site you plan to load.
- Fix the market. Set the exit country, or city, in the proxy login, and match the site's currency and language to it.
- Hold the session. Keep one sticky address from the first request of a search to its last result.
- Record the context. Store the market, currency, exit and time with each fare.
- Slow down on a 429. Honor the Retry-After header and lower the rate for that site.
On our Premium gateway, the rotating port gives a new address on each request, and each sticky port holds one session. In Playwright for Python, the proxy goes in at launch. The host below is made up and shows the shape only; the real host, port and login come from the Copy button on your line in the dashboard:
# One fare search in a browser, held on one sticky address.
# The login is copied whole from the dashboard, where the market is chosen.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://example.hproxy.com:8080",
"username": "USER",
"password": "PASS",
})
page = browser.new_page(locale="en-GB")
page.goto(SEARCH_URL, wait_until="networkidle") # a page your rules allow
html = page.content()
browser.close()
Test the line on the free proxy checker first. A free proxy list is fine for testing a parser on a saved page.
What do HProxy's residential proxies cost for flight scraping?
Two residential pools, both billed by the GB:
| What you compare | Residential Lite | Residential Premium |
|---|---|---|
| One GB | $0.50/GB | $1.45/GB |
| At volume | $0.23/GB at 10,000 GB+ | $0.65/GB at 1,000 GB+ |
| Targeting | country | country, state, city, ISP |
| Sessions | rotating, or sticky while in use | rotating, or 3 minutes to 24 hours |
| Expiry | none | none |
| Payment | card, crypto, Alipay, QRIS, Pix | the same |
The smallest order is one GB. A card payment starts at $10 and a crypto payment at $3. The residential proxies and residential pricing pages carry the full ladders. Our guide to how a rate limit becomes a ban covers the request habits sites tolerate.
What this page could not check
- No scraping of our own. We loaded no fare page and measured no block rate, success rate or speed at any site or seller, ours included.
- One path per site. We tested one search path per robots file, and a site can use other paths.
- Unreadable sources. Kiwi.com and Lufthansa served no readable robots file. Amadeus's own closure notice was built by script, so only its archived library is verified.
- Court records at second hand. Southwest v. FareChase is known here from the Ninth Circuit's summary.
- Home pages. HTTP Archive weighs home pages, so fare pages and their polling change the totals.
- Sellers' rates untested. The seller table repeats each pricing page as printed on October 26, 2026. We bought nothing to confirm a rate or a session term.
- No legal advice. The court opinion and the terms are quoted for what they say.
- Check by January 26, 2027. Robots files, API terms and prices change often, and every figure here needs a fresh read by then.
Sources
- Google Developers, "QPX Express FAQ", Shutdown FAQs, archived November 1, 2017.
- Skyscanner developer documentation, "Flights Live Prices API: Overview", "Authentication" and "Introduction", read October 25, 2026.
- Duffel, pricing page and "Getting Started with Flights", read October 25, 2026.
- Travelpayouts Help Center, "Aviasales Data API", read October 25, 2026.
- Amadeus for Developers, amadeus-python repository record on GitHub (archived), read October 25, 2026.
- KAYAK, Terms of Use, last updated August 17, 2026, read October 25, 2026.
- HProxy, the robots.txt files of Google, Kayak, Momondo, Skyscanner, Expedia, Priceline, Air France, Ryanair, United, Delta, American and Southwest, read October 25, 2026.
- IETF, RFC 9309, "Robots Exclusion Protocol", September 2022.
- US Court of Appeals for the Ninth Circuit, hiQ Labs v. LinkedIn, April 18, 2022, including footnote 21 on Southwest Airlines v. FareChase (2004).
- Travelport, Fares and Pricing help, "Cat15, Sales Restrictions", read October 25, 2026.
- Thomas Vissers, Nick Nikiforakis, Nataliia Bielova and Wouter Joosen, "Crying Wolf? On the Price Discrimination of Online Airline Tickets", HotPETs, July 2014.
- HTTP Archive, page weight reports, crawl of October 1, 2026.
- Google Ads Keyword Planner, worldwide searches a month, read October 25, 2026.
- HProxy price records: the residential price lists of 66 sellers, captured July 2 to October 22, 2026.
- Rainproxy, Evomi, DataImpulse, Decodo, MarsProxies and Bright Data, residential pricing pages, read October 26, 2026.
- Bright Data documentation, "Residential network access", modified September 1, 2026, read October 26, 2026.
- HProxy, residential product pages and price list, read October 26, 2026.



