Agent skill

serpapi

Search Google Flights for cash prices, Google Hotels for accommodation, and Google Travel Explore for destination discovery. Use when comparing award flights vs pay-with-points portal pricing, searching hotels, or exploring travel options. Triggers on "cash price", "how much does the flight cost", "hotel search", "Google Flights", "Chase portal comparison", "pay with points portal", "cheapest flight", "flight schedule", or any question about actual dollar prices for flights or hotels.

Stars 387
Forks 22

Install this agent skill to your Project

npx add-skill https://github.com/borski/travel-hacking-toolkit/tree/main/skills/serpapi

SKILL.md

SerpAPI Skill

Scrape Google Flights, Google Hotels, and Google Travel Explore via SerpAPI. Provides cash flight prices (for Chase/Amex portal comparison), hotel pricing, and destination discovery.

Source: serpapi.com — Free tier available, paid plans for higher volume.

Authentication

SERPAPI_API_KEY is set in .env. All requests use api_key query parameter.

API Base

https://serpapi.com/search

Google Flights (Cash Prices)

Search for flight prices and schedules. Essential for comparing: "Is 88,000 United miles better than paying $900 cash through the Chase portal at 1.5 cpp?"

One-Way Search

bash
curl -s "https://serpapi.com/search?engine=google_flights&departure_id=SFO&arrival_id=NRT&outbound_date=2026-08-10&type=2&adults=2&travel_class=1&currency=USD&stops=2&sort_by=2&api_key=$SERPAPI_API_KEY" | jq '{best: [.best_flights[]? | {price: .price, duration: .total_duration, stops: (.layovers | length), flights: [.flights[] | {from: .departure_airport.id, to: .arrival_airport.id, airline: .airline, flight: .flight_number, depart: .departure_airport.time, arrive: .arrival_airport.time}]}], price_insights: .price_insights}'

Parameters

Param Required Description
engine Yes google_flights
departure_id Yes Airport code(s), comma-separated: SFO,PDX
arrival_id Yes Airport code(s), comma-separated: NRT,HND
outbound_date Yes YYYY-MM-DD
return_date Round trip YYYY-MM-DD (required if type=1)
type No 1 = round trip (default), 2 = one way, 3 = multi-city
adults No Default 1
children No Default 0
travel_class No 1 = economy, 2 = premium economy, 3 = business, 4 = first
stops No 0 = any, 1 = nonstop, 2 = 1 stop or fewer, 3 = 2 stops or fewer
sort_by No 1 = top flights, 2 = price, 3 = departure, 4 = arrival, 5 = duration
include_airlines No IATA codes: SK,KL,UA or alliances: STAR_ALLIANCE,SKYTEAM,ONEWORLD
max_price No Maximum ticket price in USD
max_duration No Maximum flight duration in minutes
bags No Number of carry-on bags
deep_search No true for browser-identical results (slower)
currency No Default USD

Multi-City (Open Jaw)

Use type=3 with multi_city_json:

bash
curl -s "https://serpapi.com/search?engine=google_flights&type=3&multi_city_json=%5B%7B%22departure_id%22%3A%22SFO%22%2C%22arrival_id%22%3A%22NRT%22%2C%22date%22%3A%222026-08-05%22%7D%2C%7B%22departure_id%22%3A%22ICN%22%2C%22arrival_id%22%3A%22SFO%22%2C%22date%22%3A%222026-08-26%22%7D%5D&adults=2&travel_class=1&currency=USD&api_key=$SERPAPI_API_KEY" | jq '.'

The JSON value for multi_city_json is URL-encoded. Decoded:

json
[{"departure_id":"SFO","arrival_id":"NRT","date":"2026-08-05"},{"departure_id":"ICN","arrival_id":"SFO","date":"2026-08-26"}]

Response Fields

Each flight in best_flights[] and other_flights[]:

Field Description
price Cash price in USD
total_duration Total minutes
flights[] Array of legs with airline, flight number, times, airplane, legroom
layovers[] Array with duration and airport for each connection
departure_token Token to get return flight options (round trip)
booking_token Token to get booking options

price_insights includes lowest_price, price_level (low/typical/high), and typical_price_range.

Portal Comparison Math

Chase Sapphire Reserve: 1.5 cpp via portal. If cash price is $900, portal cost = 60,000 UR points. If award price is 88,000 United miles, cash via portal is better value.

Amex: typically 1 cpp via portal (worse value, use transfers instead).

Capital One Venture X: 1 cpp via portal, but transfer partners can be better.

Google Hotels

Search hotels and vacation rentals with pricing from multiple OTAs.

bash
curl -s "https://serpapi.com/search?engine=google_hotels&q=hotels+Tokyo+Japan&check_in_date=2026-08-10&check_out_date=2026-08-13&adults=2&currency=USD&sort_by=3&api_key=$SERPAPI_API_KEY" | jq '[.properties[]? | {name: .name, type: .type, rating: .overall_rating, reviews: .reviews, price: .rate_per_night.extracted_lowest, class: .extracted_hotel_class, amenities: .amenities}] | .[0:10]'

Parameters

Param Required Description
engine Yes google_hotels
q Yes Search query: hotels Tokyo Japan
check_in_date Yes YYYY-MM-DD
check_out_date Yes YYYY-MM-DD
adults No Default 2
children No Default 0
sort_by No 3 = lowest price, 8 = highest rating, 13 = most reviewed
min_price / max_price No Price range filter
hotel_class No 2,3,4,5 (comma-separated)
rating No 7 = 3.5+, 8 = 4.0+, 9 = 4.5+
vacation_rentals No Set to true for Airbnb-style results
property_token No Get details for a specific property

Google Travel Explore

Discover destinations and cheapest flights from an origin. Great for "where can I fly cheaply in August?"

bash
curl -s "https://serpapi.com/search?engine=google_travel_explore&departure_id=SFO&outbound_date=2026-08-05&return_date=2026-08-26&adults=2&travel_class=1&currency=USD&api_key=$SERPAPI_API_KEY" | jq '[.destinations[]? | {name: .name, country: .country, airport: .destination_airport.code, price: .flight_price, duration: .flight_duration, stops: .number_of_stops, airline: .airline}] | .[0:15]'

Parameters

Param Required Description
engine Yes google_travel_explore
departure_id Yes Airport code or kgmid
arrival_id No Specific destination
arrival_area_id No Region kgmid (e.g., /m/02j9z for Europe)
outbound_date No YYYY-MM-DD
return_date No YYYY-MM-DD
month No 1-12 for flexible dates
travel_duration No 1 = weekend, 2 = 1 week, 3 = 2 weeks
interest No /g/11bc58l13w = Outdoors, /m/0b3yr = Beaches
include_airlines No Filter by airline or alliance
max_price No Maximum price
stops No Same as Google Flights

Workflow: Compare Award vs Cash

  1. Search cash prices on Google Flights via SerpAPI
  2. Estimate portal cost. Chase uses dynamic "Points Boost" pricing (1.5 to 2.0cpp on select bookings, not a flat rate). Amex/Capital One ~1.0cpp. For rough math use 1.5cpp Chase, 1.0cpp others, but always recommend checking the actual portal price.
  3. Compare with award price from Seats.aero
  4. Lower number wins (accounting for the value you place on each currency)

Notes

  • Cached results are free (1hr cache). Set no_cache=true to force fresh.
  • deep_search=true gives browser-identical results but is slower.
  • Results include price_insights with historical price data and trend.
  • Multi-city supports open jaw itineraries natively.
  • Hotels support vacation rentals mode for Airbnb-style results.

Expand your agent's capabilities with these related and highly-rated skills.

borski/travel-hacking-toolkit

chase-travel

387 22
Explore
borski/travel-hacking-toolkit

atlas-obscura

Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring plaques. Search by coordinates, get full details with descriptions and images.

387 22
Explore
borski/travel-hacking-toolkit

rapidapi

Search Google Flights Live and Booking.com Live via RapidAPI. Use as a secondary source for flight cash prices and hotel availability/pricing. Triggers on "Booking.com", "booking prices", "RapidAPI", "secondary flight search", "hotel prices on Booking", or when SerpAPI results need a second opinion. Also useful for vacation rental pricing.

387 22
Explore
borski/travel-hacking-toolkit

premium-hotels

Search Amex Fine Hotels & Resorts (FHR), The Hotel Collection (THC), and Chase Sapphire Reserve Hotel Collection (Chase Edit) properties by city. Compare credits, benefits, and stacking opportunities across programs.

387 22
Explore
borski/travel-hacking-toolkit

google-flights

Search Google Flights for flight prices and schedules using browser automation. Use when user asks to search flights, find airfare, compare prices, check flight availability, or look up routes. Covers ALL airlines including Southwest (which no API can reach). Triggers include "search flights", "find flights", "how much is a flight", "flights from X to Y", "cheapest flight", "flight prices", "airfare", "flight schedule", "nonstop flights", "when should I fly".

387 22
Explore
borski/travel-hacking-toolkit

ignav

Search for flights using the Ignav API. Fast REST API for flight prices and booking links. Use alongside other flight sources for price comparison. Always include in every flight search. Triggers on any flight-related search request.

387 22
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results