Flight Offers API: Amadeus Self-Service Alternative
Pricing
Pay per event
Flight Offers API: Amadeus Self-Service Alternative
Live flight prices with Amadeus Self-Service-style inputs and JSON: Flight Offers Search, Cheapest Date Search and Price Analysis, powered by Google Flights. For code that broke when Amadeus Self-Service shut down. Not affiliated with Amadeus.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Ishema Hugues
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Flight Offers API: an Amadeus Self-Service alternative
Amadeus decommissioned its Self-Service APIs on 17 July 2026. API keys stopped working and the official SDKs were archived. If your app, fare tracker, travel bot or class project used Flight Offers Search, Flight Cheapest Date Search or Flight Price Analysis, this Actor gives you the same calls with Amadeus-style parameters and JSON, using live prices from Google Flights.
- Same parameter names:
originLocationCode,destinationLocationCode,departureDate,returnDate,adults,children,infants,travelClass,nonStop,includedAirlineCodes,excludedAirlineCodes,maxPrice,max,currencyCode. - Same response shape:
RESPONSE.dataholdsflight-offer,flight-dateoritinerary-price-metricobjects withitineraries[].segments[],departure.iataCode/departure.at,carrierCode,number, ISO-8601duration,price.total/price.grandTotalas strings, plusdictionaries.carriers. - No API key from an airline or GDS, no approval queue, no monthly plan. You pay per search.
- Not affiliated with or endorsed by Amadeus IT Group. This is an independent replacement for the read-only price endpoints.
Step-by-step migration guide with real outputs: Amadeus Self-Service shut down on July 17. Here's a drop-in replacement for flight prices.
What it replaces (and what it doesn't)
| Amadeus Self-Service call | Here | Notes |
|---|---|---|
Flight Offers Search GET /v2/shopping/flight-offers | endpoint: "flight-offers" | Live offers, best and cheapest first. Round trips: the price is the trip total; the offer lists the outbound itinerary |
Flight Cheapest Date Search GET /v1/shopping/flight-dates | endpoint: "cheapest-date" | Scans every departure day in a range (max 90). One trip length per run (duration: 7), not a range |
Flight Price Analysis GET /v1/analytics/itinerary-price-metrics | endpoint: "price-metrics" | MINIMUM / FIRST / MEDIUM / THIRD / MAXIMUM from Google's recent price history for that date, plus Google's own low/typical/high verdict |
| Flight Offers Price, Flight Create Orders, Seat Maps | ✘ | No booking, no fare rules, no seat maps. For booking you need a booking API (an airline, a consolidator or Amadeus Enterprise) |
Fields Google Flights doesn't publish are null: numberOfBookableSeats, lastTicketingDate, price.base, aircraft.code (the aircraft name is in aircraft.name). Extras Amadeus never had are under googleFlights: CO₂, legroom, layovers, Google's price level and a link to the search.
Migrate in 5 minutes (Python)
Before, with the archived amadeus SDK:
response = amadeus.shopping.flight_offers_search.get(originLocationCode="JFK", destinationLocationCode="LAX",departureDate="2026-11-12", adults=1, max=10)for offer in response.data:print(offer["price"]["total"], offer["itineraries"][0]["segments"][0]["carrierCode"])
After, with pip install apify-client (version 3.x):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")def flight_offers_search(**params):run = client.actor("kuezi/flight-offers-api").call(logger=None, run_input={"endpoint": "flight-offers", **params})return client.key_value_store(run.default_key_value_store_id).get_record("RESPONSE")["value"]response = flight_offers_search(originLocationCode="JFK", destinationLocationCode="LAX",departureDate="2026-11-12", adults=1, max=10)for offer in response["data"]:print(offer["price"]["total"], offer["itineraries"][0]["segments"][0]["carrierCode"])
The loop body is unchanged. Only response.data becomes response["data"].
Node.js (npm i apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('kuezi/flight-offers-api').call({ endpoint: 'cheapest-date', origin: 'SFO', destination: 'HNL', departureDate: '2026-11-01,2026-11-30' });const { value: response } = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('RESPONSE');console.log(response.data[0]); // cheapest date first
Plain HTTP (one request, waits for the result):
curl -X POST "https://api.apify.com/v2/acts/kuezi~flight-offers-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"endpoint":"flight-offers","originLocationCode":"LHR","destinationLocationCode":"JFK","departureDate":"2026-12-01","max":5}'
Example output
flight-offers (one object per offer, trimmed):
{"type": "flight-offer","id": "1","source": "GOOGLE_FLIGHTS","oneWay": true,"numberOfBookableSeats": null,"itineraries": [{"duration": "PT6H8M","segments": [{"departure": { "iataCode": "JFK", "at": "2026-11-12T12:00:00" },"arrival": { "iataCode": "LAX", "at": "2026-11-12T15:08:00" },"carrierCode": "DL", "number": "1788","aircraft": { "code": null, "name": "Airbus A330" },"duration": "PT6H8M", "numberOfStops": 0}]}],"price": { "currency": "USD", "total": "204.00", "base": null, "grandTotal": "204.00" },"validatingAirlineCodes": ["DL"],"googleFlights": { "isBest": true, "stops": 0, "emissionsGrams": 261000, "priceLevel": "typical", "typicalPriceLow": 144, "typicalPriceHigh": 240 }}
cheapest-date, sorted cheapest first:
{ "type": "flight-date", "origin": "SFO", "destination": "HNL", "departureDate": "2026-11-01", "returnDate": null, "price": { "total": "163.00" }, "priceLevel": "low" }
price-metrics (a real run on 2026-10-02 for 12 Nov, over 61 days of history):
{"type": "itinerary-price-metric","origin": { "iataCode": "JFK" }, "destination": { "iataCode": "LAX" },"departureDate": "2026-11-12", "currencyCode": "USD", "oneWay": true,"priceMetrics": [{ "amount": "167.00", "quartileRanking": "MINIMUM" }, { "amount": "178.00", "quartileRanking": "FIRST" },{ "amount": "178.00", "quartileRanking": "MEDIUM" }, { "amount": "204.00", "quartileRanking": "THIRD" },{ "amount": "215.00", "quartileRanking": "MAXIMUM" }],"currentPrice": "204.00", "googlePriceLevel": "typical", "googleTypicalRange": { "low": "144.00", "high": "240.00" }}
The run's status message is a one-line answer, such as "30 departure dates priced for SFO-HNL (one-way). Cheapest 163.00 USD on 2026-11-01 (+11 more dates at that price); priciest 444.00 on 2026-11-20". AI agents calling the Actor through the Apify MCP server get the answer without reading the dataset.
Pricing (pay per event)
| Event | Price |
|---|---|
Google Flights search that returned results (search) | $0.003 |
Flight offer saved (flight-offer, flight-offers endpoint only) | $0.0005 |
- One Flight Offers Search with 10 offers: $0.008.
- A 30-day Cheapest Date Search: $0.09.
- One Price Analysis: $0.003.
Failed searches and searches with no flights are free. Set a maximum cost per run and the Actor stops cleanly.
FAQ
Why did Amadeus Self-Service stop working? Amadeus decommissioned the Self-Service portal and its APIs on 17 July 2026; its developer site now says so. Amadeus Enterprise APIs continue, for companies with a commercial agreement.
Are these the same prices Amadeus returned? No. Amadeus returned GDS fares; this Actor returns what Google Flights shows a shopper in the chosen country, which includes low-cost carriers and airline-direct fares. Treat prices as shopping prices, not bookable fares.
Can I book with this? No. It's read-only price data. Use the googleFlights.url link, or a booking API.
How fast is it? In our tests on 2026-10-02, one Flight Offers Search took 5 seconds and a 30-day Cheapest Date Search took 18–21 seconds (10 searches run in parallel). A single slow search can add 10–20 seconds, because it is retried on a fresh IP.
Multi-city, flexible origins, airport/city search? Not yet. Use IATA airport codes. Ask in the Issues tab if you need one of these.
More from the same developer
- Google Flights Scraper: the full Google Flights data (segments, layovers, legroom, CO₂) for many routes at once.
- Google Hotels Scraper: hotel prices from 18–20 booking sites per hotel. Useful if you used Amadeus Hotel Search.