Agent skill

compare-hotels

Unified hotel comparison across portals, direct booking, and Airbnb. Searches Chase Edit, Amex FHR/THC, SerpAPI/Google Hotels, and Airbnb. Highlights premium program benefits, stacking opportunities, and points value.

Stars 387
Forks 22

Install this agent skill to your Project

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

SKILL.md

Compare Hotels

Search every available source for accommodation and present one unified comparison. Combines portal premium programs (Chase Edit, Amex FHR/THC), cash pricing, and Airbnb alternatives into a single view.

This is an orchestration skill. It tells the agent which tools to run and how to combine results. No standalone script.

When to Use

  • "Find me a hotel in Paris for Aug 11-15"
  • "Should I book through Chase or Amex for this hotel?"
  • "Compare hotels vs Airbnb in Oslo"
  • Any accommodation search where the user wants the full picture

Sources

Run these in parallel where possible. Never fail silently.

Portal Premium Programs (Docker required)

Source Skill Speed What It Finds
Chase Travel chase-travel ~45s Edit hotels ($100 credit, breakfast, upgrade), Points Boost, standard hotels
Amex Travel amex-travel ~45s FHR ($100+ credit, breakfast, upgrade, late checkout), THC ($100 credit on 2+ nights)

Cash Prices and Metasearch

Source Skill/Tool Speed What It Finds
SerpAPI serpapi ~3s Google Hotels cash prices and direct booking links.
Trivago web search ~5s Metasearch across many OTAs. Use tavily/exa to search trivago.com. Finds the absolute cheapest OTA rate.
LiteAPI web search ~5s Hotel API aggregator with negotiated rates. Check liteapi.travel. Can find rates below public OTA pricing.
RapidAPI rapidapi ~3s Booking.com inventory and pricing. Optional, use when user asks for Booking.com specifically.

Quality and Ratings

Source Skill/Tool Speed What It Finds
TripAdvisor tripadvisor ~2s Ratings, rankings, subratings (location/service/cleanliness), reviews, photos, amenities, awards. 5K calls/month.

SerpAPI, Trivago, and LiteAPI are all default. Always search all three. Only add RapidAPI if the user asks for Booking.com specifically. Use TripAdvisor for quality data (ratings, rankings, reviews) to complement pricing from other sources.

Vacation Rentals

Source Skill/Tool Speed What It Finds
Airbnb airbnb_search MCP tool ~5s Entire homes, private rooms, with total pricing

Premium Property Databases (local, instant)

Source Data File What It Finds
FHR properties data/fhr-properties.json Check if a hotel is FHR before booking
THC properties data/thc-properties.json Check if a hotel is THC
Chase Edit properties data/chase-edit-properties.json Check if a hotel is in Chase's Edit program

Workflow

Step 1: Search All Sources

PARALLEL GROUP 1 (fast, ~3-5s):
  - SerpAPI: Google Hotels cash prices
  - Trivago: metasearch across OTAs (web search)
  - LiteAPI: negotiated hotel rates (web search)
  - Airbnb: vacation rentals in the area
  - Local data: check premium-hotels databases for the city

PARALLEL GROUP 2 (slow, ~45s, Docker):
  - Chase Travel: --hotel --dest "City" --checkin YYYY-MM-DD --checkout YYYY-MM-DD --json
  - Amex Travel: --hotel --dest "City" --checkin YYYY-MM-DD --checkout YYYY-MM-DD --json

For each source, capture:

  • Source name
  • Status: "ok" | "error: {reason}" | "skipped: {reason}"
  • Results count
  • Data

Step 2: Identify Stacking Opportunities

Cross-reference results with data/fhr-properties.json, data/thc-properties.json, and data/chase-edit-properties.json:

For each hotel in results:
  - Is it in FHR? → Tag [FHR]
  - Is it in THC? → Tag [THC]
  - Is it in Chase Edit? → Tag [EDIT]
  - Is it in multiple? → Tag [FHR+EDIT] and note stacking potential

Stacking means: book through one portal, pay with the other card separately. For example, book FHR through Amex (get breakfast + credit + upgrade), then use CSR $300 travel credit on something else at the property.

Step 3: Calculate Points Value

Chase:

  • Portal lists at 1.0 cpp. CSR gets 1.5x at checkout.
  • Points Boost offers are better (1.5x to 2.0x effective cpp).
  • True UR cost = listed points ÷ 1.5

Amex:

  • Hotel portal pricing is variable (NOT always 1 cpp like flights).
  • The points price shown is the actual MR cost. Calculate CPP from cash/points ratio.
  • FHR benefits ($100+ credit, breakfast) offset the rate significantly.

Calculate benefit-adjusted price:

FHR adjusted = total_price - $100 credit - (breakfast_value × nights)
  breakfast_value ≈ $30-50/person × 2 people = $60-100/night
THC adjusted = total_price - $100 credit (2+ night stays only)
Edit adjusted = total_price - $100 credit - (breakfast_value × nights)

Step 4: Present Unified Table

Always use markdown tables. Hotels sorted by benefit-adjusted total price.

Example: Paris, Aug 11-15 (4 nights, 2 guests)

# Hotel Program Stars Per Night Total Points Benefits Adj Total
1 SO/ Paris EDIT+BOOST 5★ $639 $2,555 127,756 UR Breakfast, $100 credit, upgrade ~$1,855
2 Hotel Balzac EDIT+BOOST 5★ $614 $2,455 122,769 UR Breakfast, $100 credit, upgrade ~$1,755
3 Le Bristol FHR 5★ $1,849 $8,284 n/a $100 credit, breakfast, upgrade, 4pm checkout ~$6,884
4 Marriott Champs-Élysées 4★ $289 $1,156 $1,156
5 Airbnb: Marais 2BR $195 $780 Kitchen, washing machine $780

Sources checked:

  • ✅ Chase Travel: 21 hotels (15 Edit, 6 standard)
  • ✅ Amex Travel: 17 hotels (13 FHR, 4 THC)
  • ✅ SerpAPI: 25 hotels
  • ✅ Trivago: 30 hotels (cheapest OTA per hotel)
  • ✅ LiteAPI: 22 hotels (negotiated rates)
  • ✅ Airbnb: 18 listings
  • ✅ Premium databases: 8 FHR, 3 THC, 15 Edit properties in Paris
  • ⏭️ RapidAPI/Booking.com: skipped (not requested)

Step 5: Recommendation

After the table, always provide:

  1. Best luxury value: Which premium hotel gives the most benefit-adjusted savings
  2. Best budget option: Cheapest option (often Airbnb for longer stays)
  3. Stacking opportunities: Hotels in both FHR/THC AND Chase Edit
  4. Credit usage: Which card credits apply ($600 Amex FHR, $300 CSR travel, $250 Select Hotels)
  5. Points vs cash: Is using points worthwhile for any of these? (Calculate CPP)
  6. Direct booking comparison: Note if direct booking is significantly cheaper than portal price

Airbnb Integration

Use the airbnb_search MCP tool:

airbnb_search(
  location="Paris, France",
  checkin="2026-08-11",
  checkout="2026-08-15",
  adults=2,
  propertyType="entire_home"
)

For each Airbnb result, extract:

  • Name, price, rating, reviews
  • Property type (entire home, private room)
  • Key amenities (kitchen, washer, wifi, AC)
  • Direct link to listing

When Airbnb makes sense:

  • Stays of 5+ nights (usually cheaper per night)
  • Groups or families needing space
  • Destinations where hotels are overpriced
  • When kitchen access matters (dietary restrictions, saving on meals)

When hotels win:

  • Short stays (1-2 nights)
  • Premium benefits offset the rate (FHR breakfast alone can be $100+/night value)
  • Points redemption gives good CPP
  • Loyalty status benefits (upgrades, late checkout, lounge access)

Error Handling

NEVER fail silently. Every source must report its status.

- ❌ Chase Travel: Login failed. No Chase portal pricing available.
- ❌ Airbnb: No results for this location/dates.
- ⚠️ Amex Travel: Only 3 results (some hotels may not be available for these dates).

If premium databases show FHR/Edit properties in the city but the portal search didn't return them, note this: "The FHR database lists 8 properties in Paris but Amex Travel only returned 3. Some may not have availability for your dates."

Data Files Used

File Purpose
data/fhr-properties.json FHR property lookup by city/coordinates
data/thc-properties.json THC property lookup
data/chase-edit-properties.json Chase Edit property lookup
data/hotel-chains.json Hotel chain to loyalty program mapping
data/points-valuations.json CPP valuations for points calculations

Limitations

  • Portal searches require Docker and credentials. Skip if not configured.
  • Airbnb MCP must be available. Skip gracefully if not.
  • FHR/THC/Edit databases are updated periodically. Properties may have been added or removed.
  • Amex hotel points pricing is variable (not 1 cpp). Use the actual points price from the portal.
  • Chase portal prices don't include the 1.5x CSR multiplier. The skill adjusts automatically.
  • Direct booking prices (via SerpAPI) may differ from portal prices for the same hotel.

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