Skip to main content
skill CX Codex

booking — Claude Code skill: what it does, how to install

Extracts hotel listings and flight routes from Booking.com via openweb browser commands.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add imoonkey/openweb --skill booking -a claude-code
Open on GitHub

What booking does

This skill runs automated travel workflows on Booking.com. Hotel searches start with searchHotels using destination names and trip dates. The operation outputs URLs matching /hotel/{country}/{slug}.html. You extract the country code and slug from these URLs to query deeper details.

Data extraction combines Apollo SSR cache, schema.org JSON-LD blocks, DOM parsing, and GraphQL via page.evaluate. The getHotelDetail operation returns the raw schema.org/Hotel LD+JSON payload as-is. Consumers access ratings through aggregateRating.ratingValue (scored out of 10) and addresses via the raw address fields.

Calls to getHotelPrices and getHotelReviews fail if the target property page is not actively open in the browser. Flight queries run separately against the flights.booking.com subdomain using airport codes and departure dates.

What it helps with

  • Search hotels by destination and check-in dates
  • Retrieve raw schema.org Hotel JSON-LD metadata
  • Fetch room categories and rates from open hotel pages
  • Read guest ratings and featured reviews
  • Look up flight routes between city pairs

Example prompts for the agent

  • Search hotels in New York from 2026-05-01 to 2026-05-03 using searchHotels
  • Get room prices for slug riverside-tower using getHotelPrices
  • Search flights from NYC.CITY to PAR.CITY departing on 2026-05-01

How to install booking

1Skills CLI (Vercel)

npx skills add imoonkey/openweb --skill booking -a claude-code

2Manually: put the files in place

~/.claude/skills/booking/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/booking/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about booking

How to install booking in Claude Code?

Run npx skills add imoonkey/openweb --skill booking -a claude-code. The skill file installs to ~/.claude/skills/booking/SKILL.md.

What does the booking skill do?

It gives your coding agent tools to query Booking.com for properties, room pricing, guest feedback, and flight schedules.

What data shape does getHotelDetail provide?

It returns the unmodified schema.org Hotel LD+JSON block, keeping original field paths like aggregateRating.ratingValue.

Source text

SKILL.md · MIT
# Booking.com

## Overview
Travel platform — hotel search, property details, reviews, room pricing, and flight search via Apollo SSR cache + LD+JSON + GraphQL page.evaluate + DOM.

## Workflows

### Find a hotel and check prices
1. `searchHotels(ss, checkin, checkout)` → `hotels[].url` — parse URL `/hotel/{country}/{slug}.html` → `country`, `slug`
2. `getHotelDetail(country, slug)` ← searchHotels url → name, rating, address, description
3. `getHotelPrices(slug)` ← searchHotels url → room types, beds, sizes, facilities (requires hotel page open)
4. `getHotelReviews(slug)` ← searchHotels url → score, subscores, featured reviews (requires hotel page open)

### Search flights
1. `searchFlights(route, from, to, depart)` → carriers, times, duration, stops, prices

## Operations

| Operation | Intent | Key Input | Key Output | Notes |
|-----------|--------|-----------|------------|-------|
| searchHotels | find hotels in a destination | ss (query), checkin, checkout | name, url, price, rating, reviewCount | entry point; parse url → country, slug |
| getHotelDetail | hotel info by URL | country ← searchHotels url, slug ← searchHotels url | raw schema.org/Hotel LD+JSON (name, aggregateRating, address, image, priceRange) | declarative `script_json` extraction with `type_filter: Hotel` — response is the raw LD+JSON block, not reshaped |
| getHotelReviews | review summary | slug ← searchHotels url | score, subscores, featured reviews | requires hotel detail page open |
| getHotelPrices | room availability + pricing | slug ← searchHotels url | room name, bed, size, price, perNight | requires hotel detail page open |
| searchFlights | find flights by route | route (NYC-PAR), from, to, depart | carrier, times, airports, duration, stops, price | flights.booking.com subdomain |

## Quick Start

```bash
# Search hotels in New York
openweb booking exec searchHotels '{"ss":"New York","checkin":"2026-05-01","checkout":"2026-05-03"}'

# Get hotel details (extract country/slug from searchHotels URL)
openweb booking exec getHotelDetail '{"country":"us","slug":"riverside-tower","checkin":"2026-05-01","checkout":"2026-05-03"}'

# Get hotel reviews (hotel page must be open)
openweb booking exec getHotelReviews '{"slug":"riverside-tower"}'

# Get room pricing (hotel page must be open)
openweb booking exec getHotelPrices '{"slug":"riverside-tower"}'

# Search flights NYC to Paris
openweb booking exec searchFlights '{"route":"NYC-PAR","from":"NYC.CITY","to":"PAR.CITY","depart":"2026-05-01"}'
```

## getHotelDetail response shape

`getHotelDetail` returns the raw schema.org `Hotel` JSON-LD block as-is. Pretty-name mappings (what the old adapter exposed → raw field path):

| Friendly name | Raw JSON-LD path |
|---|---|
| rating | `aggregateRating.ratingValue` (out of 10 on Booking.com) |
| reviewCount | `aggregateRating.reviewCount` |
| street | `address.streetAddress` |
| city | `address.addressLocality` |
| region | `address.addressRegion` |
| postalCode | `address.postalCode` |
| country | `address.addressCountry` |
| image | `image` (string or array of URLs) |
| priceRange | `priceRange` |

No runtime reshape — consumers read fields by their schema.org names.

© imoonkey · MIT · imoonkey/openweb

Similar skills

All skills for Browser and scraping →

From the same set12

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor