booking — Claude Code skill: what it does, how to install
Extracts hotel listings and flight routes from Booking.com via openweb browser commands.
npx skills add imoonkey/openweb --skill booking -a claude-codeWhat 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-code2Manually: put the files in place
~/.claude/skills/booking/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/booking/
1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill booking -a codex2Manually: put the files in place
.agents/skills/booking/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill booking -a cursor2Manually: put the files in place
.cursor/skills/booking/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install imoonkey/openweb booking2Manually: put the files in place
.github/skills/booking/SKILL.md1Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill booking -a gemini-cli2Platform CLI
gemini skills install https://github.com/imoonkey/openweb --path src/sites/bookingManually: put the files in place
.devin/skills/booking/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add imoonkey/openweb --skill booking -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
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