mcpField
S
serpapi

serpapi

github.com/borskiProductivity78077 installsUpdated 2d ago
Repository

About serpapi

serpapi is a skill for querying Google Flights, Google Hotels, and Google Travel Explore through SerpAPI. It supports travel planning with flight and lodging searches, destination discovery, and cash-price comparisons against award bookings.

Key features

  1. 01Search one-way, round-trip, and multi-city flights
  2. 02Filter flights by cabin, price, and stops
  3. 03Find hotel and vacation rental prices
  4. 04Explore destinations and low-cost flights
  5. 05Review price insights and historical trends

Use cases

  1. 01Compare cash fares with award bookings
  2. 02Find lodging for specific dates and budgets
  3. 03Explore affordable destinations from an origin

Install

Copy the command and run it in a terminal.

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

After installing, type/serpapiin Claude Code to confirm it loaded.

Details

From the project README

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?" (Chase portal pricing is now dynamic via Points Boost, ~1.5-2.0 cpp on select bookings; verify the actual quote.)

One-Way Search
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
ParamRequiredDescription
engineYesgoogle_flights
departure_idYesAirport code(s), comma-separated: SFO,PDX
arrival_idYesAirport code(s), comma-separated: NRT,HND
outbound_dateYesYYYY-MM-DD
return_dateRound tripYYYY-MM-DD (required if type=1)
typeNo1 = round trip (default), 2 = one way, 3 = multi-city
adultsNoDefault 1
childrenNoDefault 0
travel_classNo1 = economy, 2 = premium economy, 3 = business, 4 = first
stopsNo0 = any, 1 = nonstop, 2 = 1 stop or fewer, 3 = 2 stops or fewer
sort_byNo1 = top flights, 2 = price, 3 = departure, 4 = arrival, 5 = duration
include_airlinesNoIATA codes: SK,KL,UA or alliances: STAR_ALLIANCE,SKYTEAM,ONEWORLD
max_priceNoMaximum ticket price in USD
max_durationNoMaximum flight duration in minutes
bagsNoNumber of carry-on bags
deep_searchNotrue for browser-identical results (slower)
currencyNoDefault USD
Multi-City (Open Jaw)

Use type=3 with multi_city_json:

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:

[{"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[]:

FieldDescription
priceCash price in USD
total_durationTotal minutes
flights[]Array of legs with airline, flight number, times, airplane, legroom
layovers[]Array with duration and airport for each connection
departure_tokenToken to get return flight options (round trip)
booking_tokenToken to get booking options

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

Portal Comparison Math

Chase Sapphire Reserve: dynamic Points Boost pricing, typically 1.5-2.0 cpp on select bookings (not a fixed floor). Verify actual portal price for the specific booking. 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.

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
ParamRequiredDescription
engineYesgoogle_hotels
qYesSearch query: hotels Tokyo Japan
check_in_dateYesYYYY-MM-DD
check_out_dateYesYYYY-MM-DD
adultsNoDefault 2
childrenNoDefault 0
sort_byNo3 = lowest price, 8 = highest rating, 13 = most reviewed
min_price / max_priceNoPrice range filter
hotel_classNo2,3,4,5 (comma-separated)
ratingNo7 = 3.5+, 8 = 4.0+, 9 = 4.5+
vacation_rentalsNoSet to true for Airbnb-style results
property_tokenNoGet 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?"

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
ParamRequiredDescription
engineYesgoogle_travel_explore
departure_idYesAirport code or kgmid
arrival_idNoSpecific destination
arrival_area_idNoRegion kgmid (e.g., /m/02j9z for Europe)
outbound_dateNoYYYY-MM-DD
return_dateNoYYYY-MM-DD
monthNo1-12 for flexible dates
travel_durationNo1 = weekend, 2 = 1 week, 3 = 2 weeks
interestNo/g/11bc58l13w = Outdoors, /m/0b3yr = Beaches
include_airlinesNoFilter by airline or alliance
max_priceNoMaximum price
stopsNoSame 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-2.0cpp on select bookings, not a flat rate). Amex/Capital One ~1.0cpp. For rough math, run the actual portal quote against the cash price; do not assume a flat cpp on Chase.
  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.

Comments

Markdown supported