Bokun cross check
Skill duongxthanh/claude-bokun-skills/skills/bokun-cross-check
Cross-check product data (price, description, schedule, inclusions, age policy...) between Bokun (source of truth) and every sales channel — your website and OTAs (GetYourGuide, Viator, ...). Use when the user wants to verify channels match, audit listings after a price change or OTA go-live, or double-check consistency. Produces a printable HTML (PDF) report.From its SKILL.md
npx -y skills add duongxthanh/claude-bokun-skills --skill bokun-cross-checkAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.2 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
Cross-check Bokun ↔ website ↔ OTAs
Channels to check: $ARGUMENTS (default: every channel listed in
bokun.config.md + the Bokun source).
Read bokun.config.md first (extranet, experience IDs, currency, sales
channels); missing → tell the user to run /bokun-setup and stop.
Bokun is always the source of truth — every channel is compared against it.
Principles
- Read-only. Never change prices or click action buttons on Bokun or any OTA. If a mismatch needs fixing → point to the right skill and confirm.
- Honest reporting: verified numbers get stated as numbers; a "from" price is reported as "from-price only", never inflated into certainty.
- Output: pivot tables (rows = attributes, columns = channels) + a "Mismatches" list ranked by severity + a "Matched" list.
Procedure
1. Pull the source of truth from Bokun (first — it's the baseline)
Set up the tab (tabs_context_mcp; reuse or create; login page → stop, ask).
-
Prices per tier: open
<extranet>/app/experience-creation/<ID>/pricing. Pricing pages can hold dozens of extras rows — don't scroll manually; read prices straight from the DOM withjavascript_tool:Array.from(document.querySelectorAll('input')) .filter(i => /\.price\.[A-Z]{3}$/.test(i.name || '')) .map(i => ({ name: i.name, value: i.value }))Input names look like
rates.<rateId>.categories.<catId>.price.<CUR>— those are the base per-category prices for each rate. -
Schedule / opening hours:
<extranet>/app/experience-creation/<ID>/opening-hours→ screenshot. Unticked weekdays = closed. For date-only experiences (see config) Bokun attaches no time — any time shown on an OTA comes from the description, compare accordingly. -
Description / inclusions: the Experience (Description) step, when needed — often comparing OTA descriptions against each other suffices.
-
A wrong route renders a blank page. If blank → navigate to
/v2/dashboardto confirm the session, then retry the editor URL.
2. Pull each sales channel
- Plain websites:
navigate→ wait 4s →get_page_text. Ticketing pages may hide per-tier prices behind a Tickets tab — click it and scroll to the ticket cards; note availability labels (an "Unavailable" tag on a live listing is a finding, report it). - GetYourGuide / Viator:
get_page_textcovers description/schedule/age policy. To see per-tier prices (not just "from") you must pick an open date in the date-picker, then read the per-tier options. Bonus: the OTA calendar greys out exactly the closed dates — a free check that the availability matches Bokun.
3. Known gotchas (read these — they save real time)
- WebFetch is useless here: GetYourGuide/Viator return 403 to plain
fetchers, and most vendor sites are SPAs that return only a page title.
Always use the browser (
navigate+get_page_text/ screenshots). - GetYourGuide may show a Cloudflare "Just a moment…" page — wait a few
seconds, it clears on its own, then
get_page_text. - Viator sometimes reports "Permission denied" (the Chrome extension
lacks a site permission). Retry the navigation once or twice; if it
persists, ask the user to grant the extension access to
viator.com— don't try to work around it. - The user's other tabs are off-limits — never touch or close them; create your own tab.
- Different currencies across channels: convert for comparison and state the approximate rate you used.
4. Produce the HTML report (printable to PDF)
Copy this skill's assets/report-template.html, fill it in, and save to the
working directory as ota-price-audit-<YYYY-MM-DD>.html. The report contains:
- Headline callout (1–2 sentences, the main finding).
- Price pivot table — tier × channel (Bokun column highlighted as the
source). Label states:
Unavailable,promo,-X%. - Description/schedule/policy pivot (name, description, times, closed days, duration, age policy, cancellation, sale-date range).
- Mismatches table — issue · detail · severity (🔴 High / 🟡 Medium / 🟢 Minor).
- Matched section (bullets).
- Action priorities (numbered).
- Footer: sources verified + audit date.
To preview, ask the user to run ! xdg-open "<file path>" (or open on
macOS) — the browser extension blocks file:// navigation, so don't navigate
to it yourself. Printing: Chrome Ctrl+P → Save as PDF → A4 → enable
Background graphics to keep the colors.
5. Answer in chat
Besides the HTML file, summarize in chat: a "what was verified / how / result" table plus the most important mismatches, so the user gets the picture without opening the file.
What ships with it: 1 file
6.8 KB alongside SKILL.md
assets/
- report-template.html6.8 KB