Kayak API: Search hotels
Compares Kayak hotel nightly rates across booking sites for a city or neighborhood and stay dates (two adults, one room).
Unofficial. Not affiliated with or endorsed by Kayak.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Sort optional
sort Order hotels by recommendation, lowest price, or guest score.
recommended (default)
One of
recommended,cheapest,top_rated.- Check in, required
check_in Arrival date, for example 2026-11-10.
2026-11-10
- Location, required
location City or area to search, for example Chicago.
Chicago
- Check Out, required
check_out Departure date, for example 2026-11-12.
2026-11-12
- Min Stars optional
min_stars Minimum hotel class from 1 to 5 stars.
Not set
Whole number from 1 to 5.
- Max Results optional
max_results Maximum hotels to return.
20 (default)
Whole number from 1 to 50.
Input as JSON
{ "check_in": "2026-11-10", "location": "Chicago", "check_out": "2026-11-12"}Output
{ "hotels": [ { "name": "Chicago South Loop Hotel", "stars": 3, "kayak_link": "https://www.kayak.com/Chicago-Hotels-Chicago-South-Loop-Hotel.300284.ksp" , "guest_rating": 6.1, "neighbourhood": "Douglas", "kayak_hotel_id": "300284", "lowest_price_site": "Booking.com", "number_of_reviews": 4623, "guest_rating_label": "Okay", "total_stay_price_usd": null, "lowest_nightly_price_usd": 119 }, { "name": "Renaissance Chicago O'Hare Suites Hotel", "stars": 4, "kayak_link": "https://www.kayak.com/Chicago-Hotels-Renaissance-Chicago-O-Hare-Suites-Hotel.26414.ksp" , "guest_rating": 8.2, "neighbourhood": "O'Hare", "kayak_hotel_id": "26414", "lowest_price_site": "Priceline", "number_of_reviews": 1367, "guest_rating_label": "Very good", "total_stay_price_usd": null, "lowest_nightly_price_usd": 255 }, { "name": "River Hotel", "stars": 4, "kayak_link": "https://www.kayak.com/Chicago-Hotels-River-Hotel.286778.ksp" , "guest_rating": 8.3, "neighbourhood": "Loop", "kayak_hotel_id": "286778", "lowest_price_site": "Priceline", "number_of_reviews": 7624, "guest_rating_label": "Very good", "total_stay_price_usd": null, "lowest_nightly_price_usd": 195 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"kayak.com/search_hotels","input":{"check_in":"2026-11-10","location":"Chicago","check_out":"2026-11-12"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "kayak.com/search_hotels" , "input": { "check_in": "2026-11-10", "location": "Chicago", "check_out": "2026-11-12" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "kayak.com/search_hotels" , "input": { "check_in": "2026-11-10", "location": "Chicago", "check_out": "2026-11-12" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run kayak.com/search_hotels# with {"check_in":"2026-11-10","location":"Chicago","check_out":"2026-11-12"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "location", "check_in", "check_out" ], "properties": { "sort": { "enum": [ "recommended", "cheapest", "top_rated" ], "type": "string", "default": "recommended", "description": "Order hotels by recommendation, lowest price, or guest score." }, "check_in": { "type": "string", "description": "Arrival date, for example 2026-11-10." }, "location": { "type": "string", "description": "City or area to search, for example Chicago." }, "check_out": { "type": "string", "description": "Departure date, for example 2026-11-12." }, "min_stars": { "type": "integer", "maximum": 5, "minimum": 1, "description": "Minimum hotel class from 1 to 5 stars." }, "max_results": { "type": "integer", "default": 20, "maximum": 50, "minimum": 1, "description": "Maximum hotels to return." } }}Output schema
{ "type": "object", "required": [ "hotels" ], "properties": { "hotels": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "stars": { "type": [ "number", "null" ] }, "kayak_link": { "type": "string" }, "guest_rating": { "type": [ "number", "null" ] }, "neighbourhood": { "type": [ "string", "null" ] }, "kayak_hotel_id": { "type": [ "string", "null" ] }, "lowest_price_site": { "type": "string" }, "number_of_reviews": { "type": [ "integer", "null" ] }, "guest_rating_label": { "type": [ "string", "null" ] }, "total_stay_price_usd": { "type": [ "number", "null" ] }, "lowest_nightly_price_usd": { "type": "number" } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
kayak.com/search_hotels- Returns
- hotel name, stars, guest rating, neighbourhood, lowest nightly USD price and site, Kayak link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method kayak.com/search_hotels with the inputs above.
Ask your agent
- Find me hotels in Lisbon for two adults from March 14 to March 17, sorted by lowest nightly price
- What are the cheapest 4-star hotels in downtown Chicago for November 10 to 12?
- Show top-rated hotels in Kayak for a weekend stay in Austin, check-in 2026-09-04, check-out 2026-09-06
- I need a list of hotels near the Shibuya neighbourhood in Tokyo, at least 3 stars, for one room over five nights in April
- Compare nightly rates for hotels in Denver from 2026-12-20 to 2026-12-23 and give me the top 10 by guest rating
See more
Finds Expedia hotels in a destination for given dates, with public USD prices, reviews, property class, refund status and links. Nightly prices are per room; totals include all requested rooms, taxes and fees.
expedia.com/search_hotelsFinds places to stay in a city or area for given dates on Google Hotels, with nightly and total prices, hotel class, guest ratings, amenities, address and cheapest booking site. Optional filters for price, stars and rating; vacation rentals are left out. Prices and availability can change.
google.com/search_hotelsFind publicly priced Priceline hotels in a place for your travel dates, with guest ratings, nightly and total USD prices, and cancellation information. Excludes hotels hidden behind anonymous deals and sign-in-only prices.
priceline.com/search_hotelsFinds hotels in a city on Trip.com for given dates, with prices, guest ratings, reviews and booking links. Only the initial public listing is read, so large limits may return fewer hotels.
trip.com/search_hotelsFinds available Agoda stays in a city for your dates, with prices before taxes and fees, star and guest ratings, and free-cancellation status.
agoda.com/search_hotelsFinds room offers and nightly prices for one Agoda hotel on selected dates. Totals are calculated from displayed nightly prices before taxes and fees; final checkout totals may differ.
agoda.com/get_room_pricesSearches Booking.com stays by destination and dates, with guest counts, price, review, cancellation, sorting and paging. Displayed prices generally exclude some taxes and fees; children are searched as age 8.
booking.com/search_staysFinds Marriott-family hotels for a place and stay dates in Marriott's search order, with standard public nightly rates (before taxes) and hotel details.
marriott.com/search_hotels