Labsco
price-win logo

pricewin-deal-finder

by price-win Β· part of price-win/pricewin-skills-hub

Hotel price comparison & deals across Booking, Agoda, Google Hotels, and OpenTravel for given travel dates and guest count. Use for hotel prices, deals, or comparing OTA rates.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeQuick setup
🧩 One of 2 skills in the price-win/pricewin-skills-hub package β€” works on its own, and pairs well with its siblings.

This is the playbook your agent receives when the skill activates β€” you don't need to read it to use the skill, but it's here to audit before installing.

by price-win

Hotel price comparison & deals across Booking, Agoda, Google Hotels, and OpenTravel for given travel dates and guest count. Use for hotel prices, deals, or comparing OTA rates. npx skills add https://github.com/price-win/pricewin-skills-hub --skill pricewin-deal-finder Download ZIPGitHub

PriceWin Deal Finder

🚨 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 | <sources> β€’ 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.

🏨 β€’ – β€’ nights β€’ guests
━━━━━━━━━━━━━━━━━━━━

πŸ₯‡ BEST VALUE

 βœ… agoda πŸ’° /night
 booking πŸ’° /night
 opentravel πŸ’° /night
 β†’ Save vs Booking

πŸ₯ˆ CHEAPEST

 βœ… google πŸ’° /night
 agoda πŸ’° /night

πŸ₯‰ QUALITY

 βœ… booking πŸ’° /night
 agoda πŸ’° /night

πŸ“‹ More good deals
 β€” Agoda β€”
 β€’ β€” agoda: | booking: 
 β€” Booking β€”
 β€’ β€” booking: 
 β€” Google β€”
 β€’ β€” google: 
 β€” OpenTravel β€”
 β€’ β€” opentravel: 

πŸ’‘ Tip: 
 [Book on ](
- ) β€” /night

πŸ“Š hotels | β€’ 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.

Related Skills

migrating-dbt-core-to-fusion dbt-labs

Use when a user needs help triaging dbt-core to Fusion migration errors. Runs dbt-autofix first, then classifies remaining errors into actionable categories… official

azure-ai-contentunderstanding-py microsoft

Multimodal AI service that extracts semantic content from documents, video, audio, and image files for RAG and automated workflows. official

openapi-to-application-code github

Generate complete, production-ready applications directly from OpenAPI specifications. Accepts OpenAPI specs via URL, local file, or direct content input; validates completeness and identifies endpoints, schemas, authentication requirements, and data relationships Generates full project structure with controllers, services, models, repositories, and configuration files following framework conventions and best practices Includes unit tests, README with setup instructions, environment... official

firecrawl-interact firecrawl

Interact with scraped pages in a live browser session. Scrape a page first, then use natural language prompts or code to click, fill forms, navigate, and extract data. official

video-edit runcomfy-com

Edit existing video on RunComfy β€” this skill is a smart router that matches the user's intent to the right edit model in the RunComfy catalog. Picks Wan 2.7 Edit-Video (general restyle / background swap / packaging swap, identity + motion preservation), Kling 2.6 Pro Motion Control (transfer precise motion from a reference video to a target character), or Lucy Edit Restyle (lightweight identity-stable restyle / outfit swap). Bundles each model's documented prompting patterns so the skill... video creative media

omnibus-instrument-integration posthog

Use this skill to add the PostHog SDK to an application. Use it when setting up PostHog for the first time, or reviewing PRs that need PostHog initialization. Covers SDK installation, provider setup, and basic configuration. Supports any framework or language. official

code-review-context openai

Model visible context official

feature-flags-elixir posthog

PostHog feature flags for Elixir applications official