agentsclimarketplace

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

Install
npx -y skills add duongxthanh/claude-bokun-skills --skill bokun-cross-check

Assembled 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 with javascript_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/dashboard to 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_text covers 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:

  1. Headline callout (1–2 sentences, the main finding).
  2. Price pivot table — tier × channel (Bokun column highlighted as the source). Label states: Unavailable, promo, -X%.
  3. Description/schedule/policy pivot (name, description, times, closed days, duration, age policy, cancellation, sale-date range).
  4. Mismatches table — issue · detail · severity (🔴 High / 🟡 Medium / 🟢 Minor).
  5. Matched section (bullets).
  6. Action priorities (numbered).
  7. 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

Keep looking

Skills are one crate of 326,970. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.