5.5 KiB
Travel reference
Subcommands:
airbnb-listing,airbnb-property(5 credits each) — short-term rentals.booking-search,booking-place(10 credits each) — hotels and other lodging on Booking.com.google-flights(15 credits) — flight prices and itineraries via Google Flights.
*-listing / *-search is the filtered search; *-property / *-place is a single-property deep dive.
For activities at the destination see google-events (in search.md); for ground transport scrape the operator's site with web-scraping.
airbnb-listing
hasdata airbnb-listing --location "Lisbon, Portugal" \
--check-in 2026-06-15 --check-out 2026-06-22 \
--adults 2 --price-max 200 --raw
Run --help for the full filter set (room type, amenities, instant book, etc.).
airbnb-property
hasdata airbnb-property --url "https://www.airbnb.com/rooms/12345678" --raw
booking-search (10 credits)
hasdata booking-search \
--keyword "Lisbon" \
--check-in-date 2026-07-10 --check-out-date 2026-07-13 \
--adults 2 --children 0 --rooms 1 \
[--price-min 50 --price-max 250] [--rating 4 --rating 5] \
[--review-score reviewScoreVeryGood --review-score reviewScoreSuperb] \
[--property-type hotels --property-type apartments] \
[--meals breakfastIncluded] [--facilities freeParking --facilities pool] \
[--sort priceLowestFirst|ratingHighToLow|topReviewed|...] \
[--page 2] [--currency USD] [--language en-us] \
--raw | jq '.results[]'
Required (no defaults work in production, even though --help shows them): --keyword, --check-in-date, --check-out-date, --adults, --children, --rooms. Pass --children 0 explicitly when none.
When --children > 0, also pass --children-ages-json '[5,7]' with one age per child (0–17). Booking rejects the request otherwise.
Bracketed price filters (--price-min / --price-max) require >= 10 / >= 20 respectively; one of the two is required when filtering on price.
Top-level response: results, searchInformation, pagination, requestMetadata. Per-result keys (verified live): hotelId, roomId, title, url, location, rating, reviews, price, room, beds, bedTypes, policies, photo.
# Cheap-first filtered search
hasdata booking-search --keyword "Paris" \
--check-in-date 2026-08-01 --check-out-date 2026-08-04 \
--adults 2 --children 0 --rooms 1 \
--review-score reviewScoreVeryGood \
--sort priceLowestFirst --raw \
| jq -c '.results[] | {title, price: .price.total, rating, url}'
booking-place (10 credits)
hasdata booking-place \
--url "https://www.booking.com/hotel/fr/le-bristol-paris.html" \
--check-in-date 2026-07-10 --check-out-date 2026-07-13 \
--adults 2 --children 0 --rooms 1 \
[--currency USD] [--language en-us] \
--raw | jq .
Required: --url (must be on booking.com / www.booking.com), stay dates, --adults, --children, --rooms.
Response: overview, bookingDetails, rooms[], facilities, houseRules, ratings, reviews, restaurants, breadcrumbs, questionsAndAnswers. overview carries id, title, address, description, propertyType, photos, highlights, mostPopularFacilities. Each rooms[i] has roomId, name, bedTypes, beds, facilities, otherFacilities, variants[] (pricing/availability per package).
google-flights (15 credits)
hasdata google-flights \
--departure-id "JFK" --arrival-id "LAX" \
--outbound-date 2026-06-15 --return-date 2026-06-22 \
--currency USD --raw | jq .
Round-trip vs. one-way controlled by presence/absence of --return-date. Run --help for the full flag set (cabin class, max stops, preferred airlines, etc.).
Non-obvious use cases
- Hotel-vs-rental arbitrage — same dates and party size via
booking-searchandairbnb-listing; compare nightly cost percentile-for-percentile. The cheaper platform isn't always the same one across cities. - Conference-room pricing audit —
booking-search --keyword "$CITY" --check-in-date $START --check-out-date $END --sort priceHighestFirstduring a known conference window vs an idle week; the delta is the conference premium. - Family-friendly filter —
--children-ages-json '[5,9]' --children 2 --rooms 1 --travel-group familyand Booking returns only properties that accept the party size with appropriate beds. - Loyalty-program portfolio —
booking-search --keyword "$CITY" --raw | jq '.results[] | select(.title | test("Marriott|Hilton|Hyatt"))'filters to chains you collect points with. - Airbnb price-arbitrage check — same dates, same area, two
airbnb-listingcalls with different--adultscounts to surface listings that don't scale per-person price. Sometimes the difference is the deal. - STR-vs-LTR feasibility — pair
airbnb-listingfor nightly rates withzillow-listing --type forSale(seereal-estate.md) for purchase price in the same area; compute gross yield client-side. - Flights without a travel API —
google-flightswith--departure-id,--arrival-id, dates, and--currencyfor ad-hoc fare checks against a vendor like Skyscanner. - Multi-leg cost planning — chain
google-flightscalls for each leg and sum.best_flights[].price; cheaper than the round-trip price-bot SaaS for one-off itineraries. - Trip-cost preview — combine
google-flights(transport) +booking-search/airbnb-listing(lodging) +google-events(activities, seesearch.md) into one cost estimate before pitching a destination.