Booking Best Price
Overview
Booking sites and aggregators (Airbnb, Stayz, Vrbo, Expedia, Booking.com, HomeToGo) deliberately hide a property's real identity and the manager's contact so you cannot book around their fee. The same house is almost always listed on 5 to 15 sites through a single property manager, often including the manager's own website where it is cheapest.
This skill traces one pasted listing link back to the real property, finds every site it appears on, compares prices on the same dates, and surfaces the manager's direct contact. Goal: book the same house cheaper, or deal with the manager direct.
Core idea: pull a unique fingerprint from the listing (government licence number, exact name, manager/agency, a verbatim sentence of the description, the photos), then search that fingerprint across the web.
Step 0 — Firecrawl gate (do this FIRST, every time)
OTA pages are JavaScript-heavy and bot-protected. You need the Firecrawl MCP server. Built-in WebFetch is a weak fallback only.
Check if it is connected. Run in Bash:
claude mcp list
Look for a firecrawl entry showing connected. (Or confirm a mcp__firecrawl__firecrawl_scrape tool is available.)
If connected: say "Firecrawl is connected" and go to Step 1.
If missing: tell the user they need Firecrawl and walk them through it. Do not run install commands without their go-ahead (it edits their config and needs their key).
Step 1 — Scrape the pasted link
Scrape the listing as full content. Render the page and beat anti-bot:
formats: ["markdown", "links"], onlyMainContent: false, waitFor: 8000.
- If the result is thin or blocked, retry with
proxy: "stealth" and waitFor: 10000, and set location to the property's country (e.g. {country: "ES"}).
Step 2 — Pull the fingerprint
Extract every identifier you can. The licence number and a verbatim description sentence are the strongest keys.
| Identifier |
Why it matters |
Government tourist licence / registration no. (e.g. ETV/6027, VT-, CTC) |
Near-unique, especially in the EU. Best single key. |
| Exact property name / listing title |
Direct search hit on other sites. |
| Manager / agency / host name ("Central de Reservas", a company) |
Leads to the direct-booking site. |
| Partial / approximate address + postcode |
Pins it on a map; OTAs often expose area-level. |
| One verbatim sentence of the description |
Quote it in search to surface clones. |
| Distinctive amenity combo (e.g. "ping-pong, BBQ, 7 sunbeds") |
Disambiguates near-matches. |
| Photo URLs |
Reverse-image search if text fails. |
Per-platform internal IDs (Booking hotel_id, Vrbo/Stayz p-number, Airbnb room id) |
Cross-references the same group's sites. |
Step 3 — Find every channel
Run several searches in parallel (one message, multiple calls). Use firecrawl_search:
- The licence number in quotes.
- The exact property name + town.
- A quoted unique sentence from the description.
- The manager/agency name + town + "holiday rental".
Collect the listing on every site it appears: Airbnb, Vrbo/Stayz, Expedia/Hotels.com, Booking.com, plus regional portals and the manager's own domain.
Step 4 — Identify the manager and their direct site
The manager named on the listing usually runs their own booking site (and sometimes sister brands). That direct channel carries no OTA margin and is typically the cheapest, and it gives you a real human to negotiate with. Find it (site: search the manager name) and note their booking reference for the property.
Step 5 — Price-compare cleanly
Get a real, dated quote from 2 to 3 channels plus the direct site. Avoid false comparisons:
- Same dates, same guests, same currency. Append date params so the page prices the actual stay. Booking.com example:
?checkin=2026-07-01&checkout=2026-07-19&group_adults=6&no_rooms=1&group_children=0&selected_currency=EUR
- Compare all-in totals (cleaning + tourist tax + fees), not headline nightly rates.
- Ignore aggregator teaser prices. The price in a HomeToGo/aggregator URL often differs from the checkout price. Only trust the figure on the live property page at the right dates.
Step 6 — Get the contact
- The manager is the reachable contact: company name, phone, email, address, and their own booking page. This is your real counterparty and where you negotiate.
- Be honest that the individual private owner is almost never published. Every channel routes through the manager by design. Do not imply you can get a private owner's personal number when you cannot.
Step 7 — Deliver
Give the user, tightly:
- What it is — name, location, key features, licence number.
- Where it is listed — table of channels with links.
- Price comparison — all-in totals for the dates, cheapest flagged, teaser prices called out as unreliable.
- Direct contact — manager name, phone, email, direct booking link + property reference.
- Recommended move — usually email/call the manager with the dates and reference and ask for their best direct all-in price.
Platform notes
| Link |
Notes |
| Booking.com |
Exposes manager ("company info"), partial address, licence number, hotel_id. Add &selected_currency=EUR and date params for an all-in total. |
| Stayz |
Australian brand of Vrbo. Its p-number is the same property on Vrbo worldwide and often on Expedia/Hotels.com (all Expedia Group). |
| Expedia / Hotels.com |
Same group as Vrbo/Stayz. Shows property name + manager. Cross-check the other group sites. |
| Airbnb |
Strong anti-bot: use proxy: "stealth", waitFor: 10000. Hides exact address and host surname, but shows title, host first name, "managed by", neighbourhood, review text. The same manager usually also lists on Vrbo/Booking. |
| HomeToGo / aggregators |
Not a host, a meta-search. Exposes the underlying provider/manager, licence, and full description, which is gold for the fingerprint. Distrust its quoted price until you reach the provider's checkout. |
Common mistakes
- Comparing different currencies or different dates and declaring a "winner".
- Quoting the aggregator URL/teaser price as the real price.
- Comparing headline nightly rates instead of all-in totals.
- Claiming you found the private owner's contact when it is really the manager.
- Skipping Step 0 and then failing on a blocked Airbnb/Booking page.
Scope
This is for booking the same property cheaper or direct, and for legitimate price research. It is not for harassing owners, evading genuine taxes or deposits, or scraping personal data. Surface the public business contact of the manager, nothing more.
1---2name: booking-best-price3description: Use when the user pastes a holiday-rental or hotel listing link (Airbnb, Stayz, Vrbo, Expedia, Booking.com, HomeToGo, or similar) and wants to identify the actual property, find it listed on other sites, compare prices to book it cheaper, or track down the property manager / owner contact to book direct. Requires the Firecrawl MCP server. This skill verifies Firecrawl is installed and walks the user through setup first if it is not.4---56# Booking Best Price78## Overview910Booking sites and aggregators (Airbnb, Stayz, Vrbo, Expedia, Booking.com, HomeToGo) deliberately hide a property's real identity and the manager's contact so you cannot book around their fee. The same house is almost always listed on 5 to 15 sites through a single property manager, often including the manager's own website where it is cheapest.1112This skill traces one pasted listing link back to the real property, finds every site it appears on, compares prices on the same dates, and surfaces the manager's direct contact. Goal: book the same house cheaper, or deal with the manager direct.1314**Core idea:** pull a unique *fingerprint* from the listing (government licence number, exact name, manager/agency, a verbatim sentence of the description, the photos), then search that fingerprint across the web.1516## Step 0 — Firecrawl gate (do this FIRST, every time)1718OTA pages are JavaScript-heavy and bot-protected. You need the Firecrawl MCP server. Built-in WebFetch is a weak fallback only.19201. Check if it is connected. Run in Bash:21 ```bash22 claude mcp list23 ```24 Look for a `firecrawl` entry showing connected. (Or confirm a `mcp__firecrawl__firecrawl_scrape` tool is available.)25262. **If connected:** say "Firecrawl is connected" and go to Step 1.27283. **If missing:** tell the user they need Firecrawl and walk them through it. Do not run install commands without their go-ahead (it edits their config and needs their key).29 - Get a free API key: open [https://www.firecrawl.dev/app/api-keys](https://www.firecrawl.dev/app/api-keys), sign up, copy the key (starts with `fc-`). Free tier is enough to start.30 - Install (recommended, hosted):31 ```bash32 claude mcp add --transport http firecrawl https://mcp.firecrawl.dev/YOUR-API-KEY/v2/mcp33 ```34 - Or local:35 ```bash36 claude mcp add firecrawl -e FIRECRAWL_API_KEY=YOUR-API-KEY -- npx -y firecrawl-mcp37 ```38 - Replace `YOUR-API-KEY`. Then restart Claude Code and re-run `claude mcp list` to confirm.3940## Step 1 — Scrape the pasted link4142Scrape the listing as full content. Render the page and beat anti-bot:43- `formats: ["markdown", "links"]`, `onlyMainContent: false`, `waitFor: 8000`.44- If the result is thin or blocked, retry with `proxy: "stealth"` and `waitFor: 10000`, and set `location` to the property's country (e.g. `{country: "ES"}`).4546## Step 2 — Pull the fingerprint4748Extract every identifier you can. The licence number and a verbatim description sentence are the strongest keys.4950| Identifier | Why it matters |51|---|---|52| Government tourist licence / registration no. (e.g. `ETV/6027`, VT-, CTC) | Near-unique, especially in the EU. Best single key. |53| Exact property name / listing title | Direct search hit on other sites. |54| Manager / agency / host name ("Central de Reservas", a company) | Leads to the direct-booking site. |55| Partial / approximate address + postcode | Pins it on a map; OTAs often expose area-level. |56| One verbatim sentence of the description | Quote it in search to surface clones. |57| Distinctive amenity combo (e.g. "ping-pong, BBQ, 7 sunbeds") | Disambiguates near-matches. |58| Photo URLs | Reverse-image search if text fails. |59| Per-platform internal IDs (Booking `hotel_id`, Vrbo/Stayz `p`-number, Airbnb room id) | Cross-references the same group's sites. |6061## Step 3 — Find every channel6263Run several searches in parallel (one message, multiple calls). Use `firecrawl_search`:64- The licence number in quotes.65- The exact property name + town.66- A quoted unique sentence from the description.67- The manager/agency name + town + "holiday rental".6869Collect the listing on every site it appears: Airbnb, Vrbo/Stayz, Expedia/Hotels.com, Booking.com, plus regional portals and the manager's own domain.7071## Step 4 — Identify the manager and their direct site7273The manager named on the listing usually runs their own booking site (and sometimes sister brands). That direct channel carries no OTA margin and is typically the cheapest, and it gives you a real human to negotiate with. Find it (`site:` search the manager name) and note their booking reference for the property.7475## Step 5 — Price-compare cleanly7677Get a real, dated quote from 2 to 3 channels plus the direct site. Avoid false comparisons:78- **Same dates, same guests, same currency.** Append date params so the page prices the actual stay. Booking.com example:79 `?checkin=2026-07-01&checkout=2026-07-19&group_adults=6&no_rooms=1&group_children=0&selected_currency=EUR`80- Compare **all-in** totals (cleaning + tourist tax + fees), not headline nightly rates.81- **Ignore aggregator teaser prices.** The price in a HomeToGo/aggregator URL often differs from the checkout price. Only trust the figure on the live property page at the right dates.8283## Step 6 — Get the contact8485- The **manager** is the reachable contact: company name, phone, email, address, and their own booking page. This is your real counterparty and where you negotiate.86- Be honest that the **individual private owner** is almost never published. Every channel routes through the manager by design. Do not imply you can get a private owner's personal number when you cannot.8788## Step 7 — Deliver8990Give the user, tightly:911. **What it is** — name, location, key features, licence number.922. **Where it is listed** — table of channels with links.933. **Price comparison** — all-in totals for the dates, cheapest flagged, teaser prices called out as unreliable.944. **Direct contact** — manager name, phone, email, direct booking link + property reference.955. **Recommended move** — usually email/call the manager with the dates and reference and ask for their best direct all-in price.9697## Platform notes9899| Link | Notes |100|---|---|101| **Booking.com** | Exposes manager ("company info"), partial address, licence number, `hotel_id`. Add `&selected_currency=EUR` and date params for an all-in total. |102| **Stayz** | Australian brand of Vrbo. Its `p`-number is the same property on Vrbo worldwide and often on Expedia/Hotels.com (all Expedia Group). |103| **Expedia / Hotels.com** | Same group as Vrbo/Stayz. Shows property name + manager. Cross-check the other group sites. |104| **Airbnb** | Strong anti-bot: use `proxy: "stealth"`, `waitFor: 10000`. Hides exact address and host surname, but shows title, host first name, "managed by", neighbourhood, review text. The same manager usually also lists on Vrbo/Booking. |105| **HomeToGo / aggregators** | Not a host, a meta-search. Exposes the underlying provider/manager, licence, and full description, which is gold for the fingerprint. Distrust its quoted price until you reach the provider's checkout. |106107## Common mistakes108109- Comparing different currencies or different dates and declaring a "winner".110- Quoting the aggregator URL/teaser price as the real price.111- Comparing headline nightly rates instead of all-in totals.112- Claiming you found the private owner's contact when it is really the manager.113- Skipping Step 0 and then failing on a blocked Airbnb/Booking page.114115## Scope116117This is for booking the same property cheaper or direct, and for legitimate price research. It is not for harassing owners, evading genuine taxes or deposits, or scraping personal data. Surface the public business contact of the manager, nothing more.