Flight Offers API: Amadeus Self-Service Alternative avatar

Flight Offers API: Amadeus Self-Service Alternative

Pricing

Pay per event

Go to Apify Store
Flight Offers API: Amadeus Self-Service Alternative

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

Ishema Hugues

Maintained by Community

Actor stats

0

Bookmarked

15

Total users

7

Monthly active users

13 days ago

Last modified

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, Flight Price Analysis, Hotel Search or Airport & City Search, this Actor gives you the same calls with Amadeus-style parameters and JSON, using live prices from Google Flights and Google Hotels.

  • New (12 Oct): Hotel Search by city code (hotel-offers), and free Airport & City Search and nearest-airport lookups (locations, nearest-airports).

  • Same parameter names: originLocationCode, destinationLocationCode, departureDate, returnDate, adults, children, infants, travelClass, nonStop, includedAirlineCodes, excludedAirlineCodes, maxPrice, max, currencyCode.

  • Same response shape: RESPONSE.data holds flight-offer, flight-date or itinerary-price-metric objects with itineraries[].segments[], departure.iataCode / departure.at, carrierCode, number, ISO-8601 duration, price.total / price.grandTotal as strings, plus dictionaries.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 callHereNotes
Flight Offers Search GET /v2/shopping/flight-offersendpoint: "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-datesendpoint: "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-metricsendpoint: "price-metrics"MINIMUM / FIRST / MEDIUM / THIRD / MAXIMUM from Google's recent price history for that date, plus Google's own low/typical/high verdict
Hotel Search GET /v3/shopping/hotel-offers (+ Hotel List by City)endpoint: "hotel-offers"By cityCode (PAR, LON, KGL…) or free text. Google's price per hotel, or every booking site's price (bestRateOnly: false). ratings and priceRange filters work. Hotel IDs are Google's, not Amadeus'
Airport & City Search GET /v1/reference-data/locationsendpoint: "locations"Free. keyword, subType, countryCode, page[limit], page[offset]. About 9,000 airports and 3,900 cities, metro codes such as LON, NYC, PAR
Airport Nearest Relevant GET /v1/reference-data/locations/airportsendpoint: "nearest-airports"Free. latitude, longitude, radius (km), sort = relevance or distance
Flight Offers Price, Flight Create Orders, Hotel Booking, Seat Maps✘No booking, no fare rules, no seat maps. For booking you need a booking API (an airline, a consolidator or Amadeus Enterprise)

Hotel offers are the prices booking sites show on Google, not bookable Amadeus rates, so rateCode, room.type, policies and price.base are null. Each offer has the site's name (vendor) and a bookingLink. Airport data comes from OurAirports (public domain); traveler scores and time-zone offsets are null.

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.

Ready-made tasks (one click to run)

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 ApifyClient
client = 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" }
}

hotel-offers (a real run on 2026-10-12: cityCode: "KGL", 12–14 Nov, 2 adults, bestRateOnly: false; trimmed to 2 of 16 offers):

{
"type": "hotel-offers",
"hotel": { "type": "hotel", "hotelId": "ChkIt_uMgrj-zsx_Gg0vZy8xMXhrejJncG0zEAE", "name": "MÖVENPICK KIGALI", "cityCode": "KGL", "latitude": -1.9461, "longitude": 30.0922, "rating": "5" },
"available": true,
"offers": [
{ "id": "…-1", "checkInDate": "2026-11-12", "checkOutDate": "2026-11-14", "guests": { "adults": 2 },
"price": { "currency": "USD", "base": null, "total": "287.00", "variations": { "average": { "total": "143.00" } } },
"vendor": "Mövenpick Kigali", "bookingLink": "https://www.google.com/travel/lodging/clk?…" },
{ "id": "…-2", "price": { "currency": "USD", "total": "287.00", "variations": { "average": { "total": "143.00" } } }, "vendor": "Trip.com" }
],
"source": "GOOGLE_HOTELS",
"googleHotels": { "guestRating": 4.5, "reviewCount": 232, "sitesListed": 16, "address": "Kg 7 Ave, Boulevard De L'Umuganda" }
}

locations (keyword: "MUC"):

{ "type": "location", "subType": "AIRPORT", "name": "MUNICH AIRPORT", "detailedName": "MUNICH/DE:MUNICH AIRPORT", "id": "AMUC", "iataCode": "MUC",
"geoCode": { "latitude": 48.3538, "longitude": 11.7861 },
"address": { "cityName": "MUNICH", "cityCode": "MUC", "countryName": "GERMANY", "countryCode": "DE" } }

keyword: "lon" returns the city LON first (airports LHR, LGW, STN, LTN, LCY, SEN), then the London airports. nearest-airports adds distance: { "value": 9, "unit": "KM" }.

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)

EventPrice
Google Flights search that returned results (search)$0.003
Flight offer saved (flight-offer, flight-offers endpoint only)$0.0005
Hotel with its price (hotel-offer, from 26 Oct 2026)$0.0015
Every booking site's price for a hotel (hotel-prices, bestRateOnly: false, from 26 Oct 2026)$0.006
Airport & City Search, nearest airportsfree
  • One Flight Offers Search with 10 offers: $0.008.
  • A 30-day Cheapest Date Search: $0.09.
  • One Price Analysis: $0.003.
  • Hotel Search, 20 hotels: $0.03 (with every booking site's price: $0.15).
  • Until 26 Oct 2026, Hotel Search is billed as one search per Google Hotels page (about 20 hotels), plus one per hotel when you ask for every booking site.

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 or flexible origins? Not yet. Ask in the Issues tab if you need one of these.

Hotel Search: where do the hotel IDs come from? They're Google Hotels IDs. Amadeus' two-step flow (Hotel List by City, then Hotel Search by hotelIds) is one call here: pass cityCode and you get the hotels with their offers.

More from the same developer