pricewin-price-comparison — Claude Code skill: hotel rate comparison
Pulls live room rates from Booking.com, Agoda, Traveloka and OpenTravel for your dates, then ranks the sources from cheapest to priciest.
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a claude-codeWhat pricewin-price-comparison does
The skill is a routing guide for your agent: it maps a request to the right tool on the pricewin MCP server (https://mcp.price.win/mcp) and says how to read what comes back. A city query goes to search_hotels_live with city, checkIn, checkOut; the call returns a sessionId straight away, so results arrive through poll_search_results — poll about every 5 seconds, up to 18 times. A hotel by name goes to get_ota_hotel_detail, and a property already carrying a propertyId from OPENTRAVEL_DIRECT goes to get_hotel_detail.
Ranking is by price alone. OpenTravel gets no bonus for being the direct API. Output lists the cheapest source first and computes the gap as (next - cheapest) / next * 100. Where the difference is slim, the skill leans toward the rate with free cancellation and expects the reason spelled out.
Cancellation terms work only on OpenTravel rate plans: get_cancellation_policy needs propertyId, ratePlanId and checkInDate, and returns the no-refund flag, the free-cancellation window, the refund share and the deadline it works out. Skip checkInDate and there is no deadline. OTA properties give you whatever the crawl found, nothing structured. The pricewin MCP server has to be connected — this skill makes no network calls of its own.
What it helps with
- check which OTA is cheapest for one property
- find the lowest rate in a city for given dates
- look up the free-cancellation deadline on an OpenTravel rate plan
- list room types and prices for a named hotel
- estimate savings when switching to another OTA
Example prompts for the agent
- Compare hotel prices in Da Nang for March 12 to 15, two adults
- Same dates for Mercure Danang — Agoda or Booking cheaper?
- What is the free-cancellation window on this OpenTravel rate plan?
How to install pricewin-price-comparison
1Skills CLI (Vercel)
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a claude-code2Manually: put the files in place
~/.claude/skills/pricewin-price-comparison/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/pricewin-price-comparison/
1Skills CLI (Vercel)
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a codex2Manually: put the files in place
.agents/skills/pricewin-price-comparison/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a cursor2Manually: put the files in place
.cursor/skills/pricewin-price-comparison/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Price-Win/pricewin-skills-hub pricewin-price-comparison2Manually: put the files in place
.github/skills/pricewin-price-comparison/SKILL.md1Skills CLI (Vercel)
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a gemini-cli2Platform CLI
gemini skills install https://github.com/Price-Win/pricewin-skills-hub --path skills/pricewin-price-comparisonManually: put the files in place
.devin/skills/pricewin-price-comparison/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about pricewin-price-comparison
How do I install pricewin-price-comparison in Claude Code?
Run npx skills add Price-Win/pricewin-skills-hub --skill pricewin-price-comparison -a claude-code. The skill file lands at ~/.claude/skills/pricewin-price-comparison/SKILL.md.
What does pricewin-price-comparison do?
It tells the agent how to compare live room rates across Booking.com, Agoda, Traveloka and OpenTravel for specific dates and present the sources ordered by price.
What do I need before using it?
The pricewin MCP server connected. The skill ships no network calls of its own, and no credentials or account are involved.
Source text
SKILL.md · MIT-0
---
name: pricewin-price-comparison
description: 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.
version: 1.0.3
author: PriceWin
platforms: [linux, macos, windows]
tags: [price-comparison, compare-hotel-prices, hotel-price-comparison, room-rates, cheapest-hotel, best-hotel-rates, booking-vs-agoda, ota-comparison, cancellation-policy, free-cancellation, agoda, booking-com, traveloka, opentravel, mcp, hotel, travel]
metadata:
openclaw:
emoji: "⚖️"
homepage: https://github.com/Price-Win/pricewin-skills-hub
---
> Requires the `pricewin` MCP server. This skill issues no network calls of its own.
# Price Comparison
**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` |
## City-wide comparison
`search_hotels_live` returns IMMEDIATELY with a `sessionId` — it does **not** return hotels.
1. `search_hotels_live` — required: `city`, `checkIn`, `checkOut` (YYYY-MM-DD). Optional: `adults` (default 2), `rooms`, `area`, `hotelName`, `priceMin`, `priceMax`, `language`
2. Wait 5s → `poll_search_results(sessionId, nights)`
3. While `status` is `pending` or `partial`: wait 5s and poll again — up to 18 times (90s)
4. Present as soon as `status == "partial"` with hotels; keep polling silently and refine
Then compare per hotel across its sources. See [`pricewin-hotel-search`](../pricewin-hotel-search/SKILL.md)
for the full dedupe + presentation contract — do not restate it differently here.
## Single named hotel
`get_ota_hotel_detail` — for one specific Booking.com/Agoda hotel the user named.
- Required: `checkIn`, `checkOut`. Pass `hotelName` + `city` + `queryText` (verbatim user text) whenever known
- **Do NOT call `search_hotels_live` for a named hotel** — that returns a whole-city list
- Live crawl, **~20–60s**. Say nothing about "loading" until it actually returns
- Speed-up: if a prior search already gave you `prices.booking.url`, pass it as `propertyUrl` to skip name resolution
- If it returns not-found under load, retry **once**
Returns rooms, prices, facilities, photos, reviews for that property.
## OpenTravel direct properties
`get_hotel_detail` — only for results with `source: "OPENTRAVEL_DIRECT"`.
- Pass `propertyId` (UUID from `opentravelResults[].propertyId`) when available
- `hotelName` + `city` is a fallback **only** for a property already confirmed as OpenTravel direct
- Required: `checkIn`, `checkOut`. Optional: `adults`, `children`, `language`
- Returns room types with `roomTypeId` and `ratePlanId` — these are what make a property bookable
⚠️ Router rule: **have a `propertyId` → `get_hotel_detail`. Name only → `get_ota_hotel_detail`.**
## Cancellation terms
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.
## Presenting a comparison
- Rank **purely by price**. No source gets priority, OpenTravel included
- Show the cheapest source first, then the others underneath:
`Agoda $X · Booking $Y · OpenTravel $Z`
- Savings vs the next-cheapest source: `(next - cheapest) / next * 100` → "Save Z%"
- When the gap is small, prefer the free-cancellation option and say why
- All prices USD unless the tool says otherwise. No conversion
Tool inputs and response fields: [reference.md](reference.md).
## Security & data handling
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`](./SECURITY.md).
© PriceWin · MIT-0 · Price-Win/pricewin-skills-hub