Skip to main content

Travel

Travel price intelligence: Google Flights cheapest-date grids and one-way searches, and hotel rate lookups across Google Hotels and Booking.com.

What it scrapes

SourceData
Google FlightsCheapest flight per day across a date range; one-way flight options for a single date (cheapest first)
Google Hotels / Booking.comPer-night hotel rates for a stay window

Endpoints

Router: routers/travel.py · tag: Travel

MethodPathSummary
GET/v1/travel/flights/gridCheapest flight per day between start_date and end_date
GET/v1/travel/flights/searchOne-way flights for a single date (limit 1–200, default 20)
GET/v1/travel/hotels/ratesPer-night hotel rates for a stay window

Dates are YYYY-MM-DD; airport codes are 3-letter IATA codes.

GET /v1/travel/flights/grid

Query params: origin (required, IATA e.g. JFK), dest (required, IATA e.g. CDG), start_date, end_date (required, YYYY-MM-DD).

curl -X GET "http://localhost:8005/v1/travel/flights/grid?origin=JFK&dest=CDG&start_date=2026-09-01&end_date=2026-09-07" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"origin": "JFK",
"dest": "CDG",
"start_date": "2026-09-01",
"end_date": "2026-09-07",
"data": [
{
"date": "2026-09-01",
"price": 412,
"currency": "USD",
"airline": "Delta",
"departure": "18:30",
"arrival": "07:55+1",
"duration_minutes": 445
},
{
"date": "2026-09-02",
"price": 389,
"currency": "USD",
"airline": "Air France",
"departure": "19:05",
"arrival": "08:30+1",
"duration_minutes": 445
}
]
}

GET /v1/travel/flights/search

Query params: origin, dest, date (required), limit (1–200, default 20).

curl -X GET "http://localhost:8005/v1/travel/flights/search?origin=JFK&dest=CDG&date=2026-09-01&limit=5" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"origin": "JFK",
"dest": "CDG",
"date": "2026-09-01",
"limit": 5,
"data": [
{
"price": 389,
"currency": "USD",
"airline": "Air France",
"stops": 0,
"departure": "19:05",
"arrival": "08:30+1",
"duration_minutes": 445
}
]
}

GET /v1/travel/hotels/rates

Query params: hotel_name (required), checkin, checkout (required, YYYY-MM-DD).

curl -X GET "http://localhost:8005/v1/travel/hotels/rates?hotel_name=Hotel%20Example%20Paris&checkin=2026-09-01&checkout=2026-09-04" \
-H "Authorization: Bearer <key>"

Response (200):

{
"success": true,
"data": {
"hotel": "Hotel Example Paris",
"checkin": "2026-09-01",
"checkout": "2026-09-04",
"nights": 3,
"rates": [
{
"source": "google_hotels",
"per_night": 189.0,
"currency": "EUR",
"room_type": "Double Room",
"total": 567.0
},
{
"source": "booking",
"per_night": 175.5,
"currency": "EUR",
"room_type": "Double Room",
"total": 526.5
}
]
}
}

MCP tools

No dedicated MCP tool for travel yet — call the REST endpoints directly, or use pry_scrape + pry_extract for other travel sites (airlines, OTAs, rental platforms).

Who uses this

  • Travel price trackers — cheap-date grids to find the cheapest day to fly a route.
  • Travel agents / OTAs — hotel rate comparison across sources.
  • Expense optimization bots — find the cheapest flight window before booking.
  • Content sites — power "cheapest time to visit" articles with real data.

Next steps