← Back to Skills Marketplace
cotghw

Pricewin Deal Finder

by wenlambo · GitHub ↗ · v0.8.3 · MIT-0
cross-platform ⚠ pending
61
Downloads
0
Stars
0
Active Installs
5
Versions
Install in OpenClaw
/install pricewin-deal-finder
Description
Hotel price comparison & deals across Booking, Agoda, Google Hotels, and OpenTravel for given travel dates and guest count. Use for hotel prices, deals, or c...
README (SKILL.md)

PriceWin Deal Finder

🚨 IMPORTANT — HOW TO USE THIS SKILL

ONE command does everything. Run this as your FIRST action — no clarifying questions first:

cd {baseDir} && node bin/search.js "\x3Ccity>" \x3CcheckInYYYY-MM-DD> \x3CcheckOutYYYY-MM-DD> \x3Cadults> en-us

{baseDir} is this skill's install directory (auto-resolved by the runtime). If your runtime does not substitute it, cd into the folder that contains this SKILL.md (the one with bin/search.js). Do NOT hardcode a ~/.hermes/... or ~/.openclaw/... path — it differs per platform.

Example:

cd {baseDir} && node bin/search.js "Hangzhou" 2026-06-10 2026-06-13 2 en-us

The script handles everything automatically: daemon launch, Agoda cache lookup, Google + Booking inline search, OpenTravel API lookup (all cities), discovery for new cities, and formatted tier-card output. Just run it and send the output to the user.

DO NOT ask clarifying questions first. Just run the command. Infer all parameters:

  • Year: use the current year from today's date unless the user states otherwise. If the requested day/month has already passed this year, assume next year. (Get today's date with date +%Y-%m-%d if unsure.)
  • "10-13/6"\x3Cyear>-06-10 \x3Cyear>-06-13 — fill \x3Cyear> from the rule above
  • "2 guests" / "2 people"2 adults
  • Locale: language/region code passed to the OTAs (controls site language + region). Default en-us. Prices are in USD (Google Hotels is requested with gl=us&curr=USD); other sources follow the locale you pass.

DO NOT use any other approach. No Python scripts, no curl, no browser tools, no subagents. This one command is all you need.


🚨 CRITICAL RULES — FOLLOW EVERY TIME

RULE 0 — FORBIDDEN TOOLS. Read this twice. This skill drives a long-running Patchright daemon via the terminal tool ONLY. Your runtime exposes several other tools that LOOK convenient but are STRICTLY FORBIDDEN inside this skill:

browser_navigate / browser_open — FORBIDDEN ❌ browser_click — FORBIDDEN ❌ browser_type / browser_fill — FORBIDDEN ❌ browser_snapshot — FORBIDDEN ❌ browser_close — FORBIDDEN ❌ Any other browser_* native tool — FORBIDDEN ❌ delegate_task / spawn_agent / sub-agent delegation — FORBIDDEN

Why: those native tools spawn a vanilla Chromium without stealth, so Booking.com and Agoda detect the bot within seconds and the requests just hang until the runtime kills them with "Command timed out after 30/60 seconds". You will burn 5+ minutes on timeouts and the user will get nothing. The Patchright daemon launched via terminal survives bot-detection.

Delegated subagents start with empty history and no skill context — they will always fall back to Python/curl scraping, which gets bot-blocked immediately. This skill must run entirely in the current agent, using only the terminal tool.

✅ The ONLY allowed way to drive a browser in this skill is via terminal:

terminal: cd {baseDir} && node bin/search.js ...

RULE 1 — search.js handles everything. NEVER scrape an OTA yourself. Do not manually call browse.js commands, do not goto/click/type in the browser, do not build Agoda/Booking/Google URLs by hand, do not call the OpenTravel API separately, do not try to launch the daemon yourself. search.js already drives the stealth daemon through a careful flow that survives bot-detection — it handles Agoda discovery internally for EVERY city (including Chinese cities like Shanghai, Hangzhou, etc.). Manually navigating an OTA is the #1 cause of failure: it trips Agoda/Booking anti-bot ("detect automation", "redirect to homepage", "problem completing your search") and gets the IP blocked. Your ONLY job is to run search.js once and send its output. If you think a source is "missing", re-read RULE 4 — do NOT go fetch it by hand.

RULE 2 — First-time city discovery takes 2–4 minutes. If search.js output contains "discovering" or "launching" messages, tell the user: "First time searching this city — discovering selectors, this takes about 2–4 minutes..." and wait for the result. Do NOT retry or abort.

RULE 3 — Send the output exactly. search.js outputs formatted tier cards ready to send. Copy the output directly into your response. Do not reformat, summarize, or abbreviate it.

RULE 3a — PRESERVE MARKDOWN HYPERLINKS. Every hotel name in the output is already wrapped as [Hotel Name](https://booking-url...). This is a clickable hyperlink — DO NOT:

  • Strip the markdown and show the URL on a separate 🔗 https://... line
  • Replace [Hotel Name](url) with plain text
  • Capitalize OTA names ("google" stays "google", not "Google")
  • Rename sections — "📋 More good deals" stays exactly

The output is Telegram-MarkdownV2-ready. Sending it as-is gives the user clickable hotel names with hidden URLs (clean UI).

RULE 3b — If you DO add a suggestion / commentary section after the output, every hotel name you mention MUST also be a markdown hyperlink [Hotel Name](url) using the SAME URL the script printed for that hotel. Never write a hotel name as plain text in your own commentary.

RULE 4 — Partial results are NORMAL and acceptable. Never "fix" them by hand. A source can be absent from the output (e.g. Agoda blocked this run, or OpenTravel has no inventory for the city). That is FINE — send the tier cards with whatever sources are present. The footer (📊 N hotels | \x3Csources> • prices in USD) lists exactly what was found. Do NOT try to fetch the missing source via the browser, a direct URL, or any other tool — that triggers anti-bot and makes things worse. If search.js errors out entirely, tell the user what failed in 1 line and show any partial output it printed above the error. If you want more coverage, the only valid retry is running the SAME search.js command again (anti-bot is often transient).


Output Format Reference

search.js prints tier cards in this format — you send this directly to the user:

The hotel name is a Markdown link to its cheapest OTA. Price rows carry NO links and the OTA key is shown lowercase (agoda/booking/google/opentravel). There are no star ratings or area lines — the script does not have that data.

🏨 \x3Ccity> • \x3Cd1>–\x3Cd2> • \x3CN> nights • \x3Cadults> guests
━━━━━━━━━━━━━━━━━━━━

🥇 BEST VALUE
[\x3CHotel Name>](\x3Ccheapest_link>)
  ✅ agoda      💰 \x3Cprice>/night
     booking    💰 \x3Cprice>/night
     opentravel 💰 \x3Cprice>/night
     → Save \x3Cdiff> vs Booking

🥈 CHEAPEST
[\x3CHotel Name>](\x3Ccheapest_link>)
  ✅ google     💰 \x3Cprice>/night
     agoda      💰 \x3Cprice>/night

🥉 QUALITY
[\x3CHotel Name>](\x3Ccheapest_link>)
  ✅ booking    💰 \x3Cprice>/night
     agoda      💰 \x3Cprice>/night

📋 More good deals
  — Agoda —
  • [\x3CHotel>](\x3Cagoda_link>) — agoda: \x3Cprice> | booking: \x3Cprice>
  — Booking —
  • [\x3CHotel>](\x3Cbooking_link>) — booking: \x3Cprice>
  — Google —
  • [\x3CHotel>](\x3Cgoogle_link>) — google: \x3Cprice>
  — OpenTravel —
  • [\x3CHotel>](\x3Copentravel_link>) — opentravel: \x3Cprice>

💡 Tip: \x3Cbest Hotel Name>
   [Book on \x3COTA>](\x3Clink>) — \x3Cprice>/night

📊 \x3CN> hotels | \x3Csources with data> • prices in USD

All prices are shown in USD. Agoda, Google and OpenTravel geo-lock to VND by IP and are converted via a live FX rate; Booking returns USD natively. Only sources that actually returned data are listed in the footer.


Limitations

  • First search per city pays the Agoda discovery cost (2–4 minutes). Google and Booking are inline (no discovery); OpenTravel is a direct API call.
  • Subsequent searches reuse the Agoda cache and complete in ~30–60 seconds.
Capability Tags
requires-sensitive-credentials
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install pricewin-deal-finder
  3. After installation, invoke the skill by name or use /pricewin-deal-finder
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.8.3
## pricewin-deal-finder 0.8.3 - Updated RULE 1 in SKILL.md: Now explicitly forbids any manual or alternate OTA scraping/navigation attempts. All OTA interaction must be handled only via `search.js`. - Clarified that missing/partial results from any source (e.g., Agoda/Google/Booking/OpenTravel) are acceptable and must not be manually "fixed." - Added a new RULE 4: Emphasizes that partial results are normal, and warns not to fetch missing sources by hand (prevents anti-bot lockouts). - Minor improvements for clarity and specificity around tool restrictions and correct output handling.
v0.8.2
**Summary: Improved handling of Agoda, Google, and Booking integration sequencing and documentation.** - Updated documentation to clarify that Agoda now requires discovery for new cities, while Google and Booking can be queried inline for all cities. - Adjusted process descriptions and instructions in SKILL.md to reflect Agoda-specific discovery delays and caching. - Updated output format notes for currency conversion: prices for Agoda, Google, and OpenTravel are always geo-locked to VND and converted to USD; Booking returns USD natively. - Minor text and rule clarifications in usage instructions and limitations. - Version bump to 0.8.2.
v0.8.1
- Added support for platform-independent install directory via `{baseDir}` in usage instructions; removed hardcoded paths. - Improved documentation in SKILL.md: clarified usage guidelines, updated footer format, and specified that only data sources with results are listed. - All prices in outputs are now explicitly shown as converted to USD, with note on FX rates for regions where OTAs return prices in VND. - Removed skill-card.md from the project.
v0.8.0
- Major documentation update: SKILL.md now provides detailed usage instructions, rules, and output formatting for hotel price comparison across Booking, Agoda, Google Hotels, and OpenTravel. - Clarifies strict usage of only the `terminal` tool to avoid bot detection and ensure reliable results. - Adds examples for inferring date, guest count, and locale from user input. - Outlines critical forbidden actions (e.g., no browser tools or sub-agents allowed). - Specifies exact output formatting requirements, including proper handling of Markdown links. - Documents behavior for city discovery latency and error handling.
v0.7.0
- Added detailed usage instructions and critical rules for running hotel price comparisons via a single terminal command. - Emphasized strict tool usage: only terminal is allowed, forbidding all browser and delegation tools for reliability. - Clarified parameter inference for dates, adults, and locale based on user input. - Specified output formatting requirements, including preserving Telegram MarkdownV2 hyperlinks and not altering OTA names or section titles. - Included error handling instructions and discovery-time user guidance. - Updated metadata, tags, and limitations for clarity and greater usability.
Metadata
Slug pricewin-deal-finder
Version 0.8.3
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 5
Frequently Asked Questions

What is Pricewin Deal Finder?

Hotel price comparison & deals across Booking, Agoda, Google Hotels, and OpenTravel for given travel dates and guest count. Use for hotel prices, deals, or c... It is an AI Agent Skill for Claude Code / OpenClaw, with 61 downloads so far.

How do I install Pricewin Deal Finder?

Run "/install pricewin-deal-finder" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Pricewin Deal Finder free?

Yes, Pricewin Deal Finder is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Pricewin Deal Finder support?

Pricewin Deal Finder is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Pricewin Deal Finder?

It is built and maintained by wenlambo (@cotghw); the current version is v0.8.3.

💬 Comments