Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compare live hotel room rates across Booking.com, Agoda, Traveloka, and OpenTravel for specific dates — which OTA is cheapest for the same property, per-room prices, and free-cancellation terms. Use when comparing hotel prices, checking room rates for a named hotel, asking which site is cheaper, or finding the best rate for given check-in/check-out dates.
.claude/skills/price-win-pricewin-price-comparison/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 19% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 170% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-12 | ✓→✓ | = Same ✓ | 17% | 0% |
> Requires the pricewin MCP server. This skill issues no network calls of its own.
MCP server: pricewin. Compares live rates across Booking.com, Agoda, Traveloka (crawled) plus OpenTravel (direct API).
Comparison is something you do over the returned sources — there is no server-side compare call. Pick the entry point by what the user gave you:
| User gave you | Tool | |---|---| | A city — "compare hotel prices in Da Nang" | search_hotels_live → poll_search_results | | A named hotel — "is Mercure Danang cheaper on Agoda or Booking?" | get_ota_hotel_detail | | A hotel already known to be OpenTravel direct (source: "OPENTRAVEL_DIRECT", has propertyId) | get_hotel_detail |
search_hotels_live returns IMMEDIATELY with a sessionId — it does not return hotels.
search_hotels_live — required: city, checkIn, checkOut (YYYY-MM-DD). Optional: adults (default 2), rooms, area, hotelName, priceMin, priceMax, languagepoll_search_results(sessionId, nights)status is pending or partial: wait 5s and poll again — up to 18 times (90s)status == "partial" with hotels; keep polling silently and refineThen compare per hotel across its sources. See pricewin-hotel-search for the full dedupe + presentation contract — do not restate it differently here.
get_ota_hotel_detail — for one specific Booking.com/Agoda hotel the user named.
checkIn, checkOut. Pass hotelName + city + queryText (verbatim user text) whenever knownsearch_hotels_live for a named hotel — that returns a whole-city listprices.booking.url, pass it as propertyUrl to skip name resolutionReturns rooms, prices, facilities, photos, reviews for that property.
get_hotel_detail — only for results with source: "OPENTRAVEL_DIRECT".
propertyId (UUID from opentravelResults[].propertyId) when availablehotelName + city is a fallback only for a property already confirmed as OpenTravel directcheckIn, checkOut. Optional: adults, children, languageroomTypeId and ratePlanId — these are what make a property bookable⚠️ Router rule: have a propertyId → get_hotel_detail. Name only → get_ota_hotel_detail.
For OpenTravel rate plans only: get_cancellation_policy(propertyId, ratePlanId, checkInDate) → non-refundable flag, free-cancellation window, refund %, and the computed deadline.
ratePlanId comes from get_hotel_detail → roomTypes[].ratePlanId. Pass checkInDate or you get no deadline. OTA hotels have no structured policy — quote whatever the crawl returned.
Agoda $X · Booking $Y · OpenTravel $Z
(next - cheapest) / next * 100 → "Save Z%"Tool inputs and response fields: reference.md.
Documentation only — no code, no dependencies, no network calls of its own. The only data sent is the comparison query (city or hotel name, dates, guests, plus queryText — the user's message verbatim), to PriceWin's hosted MCP server https://mcp.price.win/mcp (no credentials, no account). No PII, and this skill cannot book or pay for anything. Full disclosure — operator, backend provenance, exact fields per tool — in SECURITY.md.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 9,129 | 5,212 | -43% | 1 | 1 | 0% | 1,741 | 2,042 | +17% | 0 | 0 | — |
case-13 | fail→fail | 9,115 | 5,049 | -45% | 1 | 1 | 0% | 788 | 1,552 | +97% | 0 | 0 | — |
case-01 | fail→fail | 12,682 | 4,455 | -65% | 1 | 1 | 0% | 2,490 | 1,497 | -40% | 0 | 0 | — |
case-02 | fail→fail | 3,437 | 6,734 | +96% | 1 | 1 | 0% | 596 | 1,684 | +183% | 0 | 0 | — |
case-03 | fail→fail | 13,243 | 6,586 | -50% | 1 | 1 | 0% | 2,895 | 1,695 | -41% | 0 | 0 | — |
case-04 | fail→fail | 12,892 | 4,651 | -64% | 1 | 1 | 0% | 2,481 | 1,439 | -42% | 0 | 0 | — |
case-05 | fail→fail | 5,665 | 6,233 | +10% | 1 | 1 | 0% | 1,011 | 1,659 | +64% | 0 | 0 | — |
case-06 | fail→pass | 6,222 | 2,402 | -61% | 1 | 1 | 0% | 1,388 | 1,655 | +19% | 0 | 0 | — |
case-07 | fail→fail | 5,658 | 5,541 | -2% | 1 | 1 | 0% | 1,112 | 1,680 | +51% | 0 | 0 | — |
case-08 | fail→fail | 8,926 | 4,046 | -55% | 1 | 1 | 0% | 614 | 1,346 | +119% | 0 | 0 | — |
case-09 | fail→fail | 13,801 | 2,867 | -79% | 1 | 1 | 0% | 3,165 | 1,746 | -45% | 0 | 0 | — |
case-10 | pass→pass | 3,151 | 2,615 | -17% | 1 | 1 | 0% | 624 | 1,655 | +165% | 0 | 0 | — |
case-11 | pass→pass | 3,857 | 1,822 | -53% | 1 | 1 | 0% | 836 | 1,546 | +85% | 0 | 0 | — |
case-14 | fail→pass | 5,356 | 1,854 | -65% | 1 | 1 | 0% | 1,007 | 1,441 | +43% | 0 | 0 | — |
case-15 | fail→pass | 3,187 | 1,791 | -44% | 1 | 1 | 0% | 532 | 1,436 | +170% | 0 | 0 | — |
case-16 | fail→pass | 3,298 | 1,407 | -57% | 1 | 1 | 0% | 613 | 1,412 | +130% | 0 | 0 | — |
case-17 | pass→pass | 7,908 | 3,874 | -51% | 1 | 1 | 0% | 1,520 | 1,901 | +25% | 0 | 0 | — |
case-18 | fail→fail | 14,908 | 9,462 | -37% | 1 | 1 | 0% | 1,188 | 1,407 | +18% | 0 | 0 | — |
case-19 | fail→fail | 7,501 | 2,691 | -64% | 1 | 1 | 0% | 1,464 | 1,739 | +19% | 0 | 0 | — |
case-20 | pass→pass | 3,471 | 2,392 | -31% | 1 | 1 | 0% | 673 | 1,601 | +138% | 0 | 0 | — |
case-21 | pass→pass | 6,904 | 2,060 | -70% | 1 | 1 | 0% | 1,291 | 1,515 | +17% | 0 | 0 | — |
case-22 | pass→pass | 9,551 | 2,495 | -74% | 1 | 1 | 0% | 1,689 | 1,564 | -7% | 0 | 0 | — |
case-23 | pass→pass | 4,861 | 2,897 | -40% | 1 | 1 | 0% | 951 | 1,682 | +77% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 15 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +17 percentage points is the difference between those two pass rates over the 15 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/3/2026 | +9% |
| gemini-3.6-flash | verified | 8/3/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.