Booking Hotel Finder & Scraper: AI best-value shortlist avatar

Booking Hotel Finder & Scraper: AI best-value shortlist

Pricing

from $4.00 / 1,000 qualified hotel (rules only)s

Go to Apify Store
Booking Hotel Finder & Scraper: AI best-value shortlist

Booking Hotel Finder & Scraper: AI best-value shortlist

First 10 hotels free. Booking hotel finder: runs the Booking Scraper, drops sold-out and over-budget hotels free, ranks a hotel shortlist by value per night with AI brief match and hotel price drop alerts. Pay per result, per qualified hotel. Free demo on any plan; live search on your Apify account.

Pricing

from $4.00 / 1,000 qualified hotel (rules only)s

Rating

0.0

(0)

Developer

Rich Minds

Rich Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

The best-value Booking.com hotels for your dates, budget and brief — ranked and explained.

⚡ First 10 hotels free · 💵 $0.004 per qualified hotel · 🤖 $0.01 with AI assessment · 🔑 No API key needed — the AI uses the model access of your Apify plan, or your own key · ⏱️ free demo in 3 s

Ranked Booking.com shortlist — price per night, rating, value score, free cancellation, distance and why each hotel made it

Try it in 30 seconds. Click Try it — the form is already filled with a free demo on six sample Lisbon hotels. Type your destination and press Start to search Booking.com live (a Store Actor on your Apify plan); your first 10 qualified hotels are free. → What a run costs · What the AI adds · Run it weekly

⚡ At a glance

What you geta ranked hotel shortlist: price per night, value score with reasons, free cancellation, amenities, fine-print risks, a why-this-hotel line
You providea destination and dates — optionally a budget, must-have amenities and a one-line traveller brief
OutputJSON / CSV / Excel dataset, best value first, plus DIGEST and OUTPUT
Typical runup to 100 properties scraped → your maxQualified (25) best-value hotels
Cost of that run$0.50 Booking Scraper on your account + 25 × $0.004 here = $0.60 — $0.40 with the $0.003 scraper
Free tierfirst 10 qualified hotels per account
Keys / setupnone — the AI uses Apify's model access; plans without it set llmProvider: byok
Works withSchedules, e-mail, Slack, webhooks, Google Sheets, Make / n8n / Zapier, MCP & AI agents

🎯 What this Actor does

This booking hotel finder runs a Booking scraper on your account (full listings, or a cheaper one), drops junk for free and hands you a shortlist you can send to a client:

  • Price per night you can compare — Booking's stay price ÷ nights, next to rating and reviews.
  • Verified facts — amenities from Booking's facility list, free cancellation and breakfast from the room options.
  • Fine print before it bites — city tax, resort fee, deposit, cash only, late check-in fees, quoted verbatim.
  • Price-drop alerts — scheduled runs deliver only new hotels or cheaper rates, even with relative dates.

🏷️ Best value hotels: the value score

valueScore (0–100) weighs guest rating shrunk by review count (35 %), price per night against this search (30 %), Booking's Value for money / Location / Cleanliness (15 %), your amenities (10 %), free cancellation (5 %) and distance to nearPoint (5 %). valueReasons says why; rank and valueTier sort the sheet; minScore is the bar.

📋 A hotel shortlist your client can read

whyThisHotel is one line per hotel, pros / cons come from Booking's review summary, and shortlistMemo: true writes a top-5 comparison into SHORTLIST_MEMO. Every run also writes REPORT — a client-ready page (photo, price per night, rating, why this hotel, fine print, Booking link) whose link, OUTPUT.reportUrl, you forward.

🔔 Hotel price drop alert and hotel price tracker

Each delivered stay and its price is remembered (hotel + nights + adults when the dates are relative, 30 days). With onlyNewOrPriceDrop a scheduled run delivers only new hotels or drops of minPriceDropPct % or more, with previousPrice, priceChangePct and a Slack-ready line: ↓12 % Hotel X, $143/night, 8.7 Excellent.

🧾 Filters that cost nothing

minRating, minReviews, minStars, propertyTypes, maxPricePerNight, mustHaveAmenities, freeCancellationOnly, breakfastIncludedOnly, maxDistanceKm, sold-out rooms, missing prices and duplicates.

🚀 How to use it

  1. Click Try it — the form is pre-filled with the free demo on sample Lisbon hotels; it works as is.
  2. Type your destination, checkIn and checkOut — the run switches to the live search by itself, capped by maxDiscoveryChargeUsd. Pick the Booking scraper in discoveryActorId, add a travellerBrief, keep enableAi on.
  3. Press Start — the Shortlist view is ranked best value first.
  4. Schedule it daily or weekly with your address in notifyEmail — only new hotels and price drops are charged.

Client sheet — pros, cons, fine-print risks with quotes and the amenities each hotel really has

📚 Learn more: Step-by-step tutorial — find the best-value Booking.com hotels with this Actor

🆚 Why this instead of a Booking Scraper?

Booking Scraper (voyager/booking-scraper)ryanclinton/booking-scraperlentic_clockss/booking-hotels-scraperBooking Hotel Finder
Price$0.005 per property · 828 users / 30 days$0.006 per record + $0.02 per query$0.002 per row + $0.005 start$0.004 per qualified hotel, 10 free
What you pay forevery row, incl. sold-outevery recordevery rowonly hotels that pass your filters
Same 100 hotels, all in$0.50: 100 unsorted rows to read$0.62: 100 records, no brief$0.21: 100 unsorted rowsthe 25 best, ranked and explained: $0.10 here + the scraper run on your account; junk costs $0
Rankingsearch ordervalue queuesearch orderper night, reasons, your brief
Repeat runsthe same hotels againwatchlist deltasthe same hotels againonly new hotels or price drops

💸 Cheaper than a rate-shopper seat

Lighthouse (formerly OTA Insight) Rate Insight ($250/month) and RateGain Rate Shopper ($200/month) are per property (indicative). A daily watch here — 100 properties, ~5 new or cheaper a day with AI — is ≈ $0.50 source + 5 × ($0.01 + ≈ $0.003 tokens) = $0.57 a day, ≈ $17/month, no seat.

💵 Pricing — what a run really costs

Pay per result: one event per qualified hotel, nothing else. No start fee.

EventWhen it is chargedPrice
free-tieryour first 10 qualified hotels, in any mode$0.00
qualified-hotel-basicAI off — value score, room facts, Booking's pros/cons, regex fine print$0.004
qualified-hotel-aiAI on — plus brief match with evidence, why-this-hotel, AI pros/cons and flags$0.01

Never charged: hotels below minScore or failing a filter, duplicates, your exclude list, unchanged hotels from an earlier run. The source run is billed by the Booking scraper on your account.

How that compares — $0.004 is the median row price of the Booking scrapers and of the Store search next to this card (one Actor per publisher) — the same price per unit, but one qualified hotel replaces 4 raw rows you would read and discard: $0.001 per raw-row equivalent. Junk costs nothing.

Worked example — 100 properties scraped = $0.50 on your account → 25 qualify → 10 free + 15 × $0.004 = $0.06 on your first run. Next run with AI on: 25 × $0.01 + 25 × ≈ $0.003 tokens = $0.33 here + $0.50 source = $0.83, $0.033 per hotel (AI off: $0.10 + $0.50 = $0.60). With the $0.003 scraper the source is $0.30: $0.63 all in (AI on), $0.40 (AI off).

AI tier, all in: ≈ $0.013 per hotel ($0.01 + ≈ $0.003 tokens at ~1,600 in / 300 out with anthropic/claude-haiku-4.5 through Apify's model access) — 2.5× the basic event; with your own key the tokens go to it.

🤖 What the AI tier adds

The same demo hotel, AI off — facts, value score, Booking's own pros/cons and a keyword brief match:

{"name": "Baixa Garden Suites", "pricePerNight": 149.0, "rating": 8.9, "valueScore": 68, "briefMatchScore": 100,
"whyThisHotel": "Rated 8.9 Fabulous from 640 reviews; $149/night, cheaper than 50% of this search; Value for money 8.6, Location 9.6, Cleanliness 9.1.",
"briefMatched": [{"requirement": "pool", "evidence": "Rooftop pool"},
{"requirement": "free cancellation", "evidence": "free cancellation on a room option"}],
"cons": ["Early check-in cut-off"]}

AI on — judged against "Quiet hotel for a couple, walkable to the old town, with a pool and free cancellation":

{"name": "Baixa Garden Suites", "pricePerNight": 149.0, "rating": 8.9, "valueScore": 70, "briefMatchScore": 75,
"briefMatched": [{"requirement": "walkable to the old town", "evidence": "300 metres from Rossio Square."},
{"requirement": "pool", "evidence": "shared rooftop pool"}],
"briefUnmet": [{"requirement": "quiet hotel for a couple", "evidence": null}],
"whyThisHotel": "Only $149/night, 0.14 km from Rossio Square, rooftop pool and free cancellation – a central stay for couples.",
"finePrintFlags": [{"type": "late_checkin_fee", "quote": "late check-in carries an extra charge of EUR 30."},
{"type": "payment_restriction", "quote": "This property only accepts cash for the city tax."}]}

Local demo runs, 2026-09-26 (AI: groq:openai/gpt-oss-120b; the platform uses anthropic/claude-haiku-4.5). The AI proves "walkable" with a quote, marks "quiet" unproven and flags the cash-only city tax — reading you skip.

⚙️ Input

FieldTypeDefaultWhat it does
destinationstring—City, district or hotel name as on Booking.com (or startUrls); typed next to the demo, it searches live
sourceModeactor | dataset | listactorLive Booking search, a Booking dataset, or pasted records. {} runs the free demo, nothing charged
discoveryActorIdselectvoyager/booking-scraperThe Booking scraper: full details $0.005, or $0.003 / $0.002 per property for the search-page row
checkIn / checkOutstring30 days / 32 daysYYYY-MM-DD or relative days
travellerBriefstring—What the AI scores each hotel against
minScore0–10040The field that decides what you pay: below this value score = not charged
enableAibooleantrueBrief match, why-this-hotel, pros/cons, fine print
mustHaveAmenitiesstring[]—Hard requirement, matched with synonyms
maxQualifiedinteger25Hotels on the shortlist — the ceiling of what this Actor charges
maxDiscoveryChargeUsdnumber0.5Caps the Booking scraper run, in the form and the API

Budget, guests, minRating, onlyNewOrPriceDrop, webhooks and the advanced options are in the Input tab.

📤 Output

One dataset item per qualified hotel — JSON, CSV or Excel, or a webhook.

The demo's price memory is a sample (sampleMemory); real runs fill it from your earlier runs.

Output fields

Upsert key for a CRM or Sheet: dedupeKey — Booking hotel id + check-in + check-out + adults (hotel + nights + adults with relative dates), the key the price memory uses; itemId is its short hash, hotelId the property.

Views: Shortlist, Price drops and Client sheet (brief, pros, cons, fine print). The DIGEST record (top 10, "vs last run: qualified 41 → 55") and OUTPUT (funnel, skips per reason, topPicks, aiCoverage, timing) sit next to the dataset.

⭐ Found it useful? A review on the Store helps others find it — it takes a minute on the Actor's page.

🔁 Run it weekly

  1. Actions → Schedule (daily for price-drop alerts) with your address in notifyEmail — each run with new hotels or drops e-mails you the digest and the trend vs the last run. Relative dates (30 days) keep working.
  2. Keep dedupeAcrossRuns and onlyNewOrPriceDrop on — you are charged only for what is new or cheaper; the memory is kept per travellerBrief, so clients never mix.
  3. Add slackWebhookUrl for a channel, or webhookUrl for your sheet — the docs/marketing/kit/integrations.md import in one click.

Weekly cost is the new hotels only: 100 properties, ~10 new or cheaper a week, AI on ≈ $0.50 source + 10 × $0.013 all in = $0.63.

🎯 Try it for your niche

Ready-made inputs — paste one into the JSON tab of the input form, or save it as a Task:

NicheWhat it looks forInput
Travel agentfamily hotels with pool and parking under a budgetdocs/img/preset-travel-agent.json
Event plannerhotels within 2 km of the venue, rating ≥ 8docs/img/preset-event-planner.json
Deal hunterdaily hotel price drop alert ≥ 10 % on one staydocs/img/preset-price-drop-alert.json

🔌 Integrations, automation and API

  • E-mail / Slack — notifyEmail and slackWebhookUrl deliver the DIGEST after every run with new hotels.
  • Webhook (Zapier, Make, n8n) — webhookUrl POSTs {"event": "hotel.qualified", "hotel": {…}, "runId": "…"} per hotel, or {"event": "hotels.qualified", "hotels": [{…}], "runId": "…"} per webhookBatchSize batch; a 429 / 5xx is retried once, a failed POST is counted in OUTPUT.webhook.failed and never fails the run.
  • Google Sheets — one click from the Integrations tab.
  • Hotel search API for apps and AI agents / MCP — every input is a plain typed field. First call = the free trial: "sourceMode": "list" ranks the Booking records you send, no source run.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("rich_minds/booking-hotel-finder-ai").call(
run_input={
"sourceMode": "list", # free trial; "actor" + "destination" + dates searches Booking.com live
"itemsList": [{"name": "Hotel Example", "url": "https://www.booking.com/hotel/pt/example.html", "price": 300,
"checkInDate": "2026-10-26", "checkOutDate": "2026-10-28", "rating": 8.8, "reviews": 950}],
"travellerBrief": "Quiet couple trip with a pool",
"maxDiscoveryChargeUsd": 0.5, # spend cap once you switch to "sourceMode": "actor"
},
timeout_secs=1800, # a live search with AI — see "How long does a run take?"
# build="0.1", # pin the build your pipeline was tested with (Changelog below)
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["rank"], item["name"], item["pricePerNight"], item["whyThisHotel"])

🤖 Hotel search tool for AI agents (MCP)

{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?actors=rich_minds/booking-hotel-finder-ai"}}}

Minimal agent input — every other field has a default: destination, checkIn, checkOut, travellerBrief, maxQualified, maxDiscoveryChargeUsd. Ask: "Search Lisbon for 2 nights, maxDiscoveryChargeUsd: 0.5; give me the 5 best-value hotels."

Run outcomes — what your integration sees

👥 Who is it for?

You are…You run it to…Start with
Travel agent / conciergesend a client the 10 best-value hotels with free cancellation, parking and a pooldates, travellerBrief, mustHaveAmenities
Corporate-travel or event plannerhotels within 2 km of the venue under a nightly cap, fine print flaggednearPoint, maxDistanceKm, maxPricePerNight
Trip-planning app or AI agentranked hotels as JSON from destination, dates and a briefthe API / MCP call above
Deal hunter / travel creatora morning alert when a hotel on your stay drops ≥ 10 %minPriceDropPct, notifyEmail, a daily schedule

🧠 How the AI works

  • Grounded. One hotel per call; evidence and fine-print quotes must be exact substrings of the listing or they are dropped, and an invented number in whyThisHotel brings back the rule line.
  • Your brief. briefMatchScore scores the hotel against travellerBrief; valueScore = 70 % rule + 30 % brief.
  • Tokens where they matter. The best rule-scored candidates first, every one at or above minScore − 15, up to aiCandidateMultiplier × maxQualified.
  • No keys. Default anthropic/claude-haiku-4.5 via Apify's model access; llmProvider: "byok" for your own key.
  • Fallback. If the model fails, hotels keep the rule tier (keyword brief match, Booking's pros/cons, regex fine print), and the status says how many — free while your free hotels last, then at the basic price, never AI.

🔒 Data, compliance and limits

  • Public Booking.com listing data only; host and trader contact data is ignored — no personal data.
  • Prices change by the minute — confirm on Booking.com. Without dates hotels rank on rating only. The source run is capped by maxDiscoveryChargeUsd and 600 s; the $0.003 / $0.002 scrapers return no facilities or fine print. Stay within Booking.com's terms and GDPR / CCPA.

❓ FAQ

How much will one run cost me? $0.50 of Booking Scraper for 100 properties ($0.30 with the $0.003 scraper) + 25 hotels × $0.004 (AI off) or ≈ $0.013 all in (AI on) here — first 10 free.

Is this a Booking scraper or a Booking.com hotel scraper? It runs one for you — voyager/booking-scraper, santamaria-automations/booking-com-scraper or voyager/fast-booking-scraper — and adds price per night, value ranking, verified amenities, fine print, brief match and memory; sourceMode: dataset ranks your own scraper runs.

What will my first real search cost? Up to 100 properties × $0.005 = $0.50 on your account (the maxDiscoveryChargeUsd cap), and the first 10 qualified hotels here are free — 25 qualified cost 15 × $0.004 = $0.06.

How long does a run take? Measured: the demo 2.8 s (AI off), 6.9 s (AI on). A live search takes as long as the scraper, then the AI. With Apify's model access calls run 8 at a time; with your own key 2 at a time — a free-tier key took 191 s for 4 hotels. Rate-limit waits stop after 2 min, 30 s if the key answers no call (OUTPUT.timing); worst case with a slow own key ≈ 17 min per 100 hotels, always before the run's timeout. Pass timeoutSecs 1800.

Which Apify plan do I need? Any plan runs the demo; the live search and built-in AI need a plan that runs Store Actors — else rank a Booking dataset with llmProvider: "byok".

🧩 More Actors from the same developer

🆘 Support

Something missing or wrong? Open an issue on the Actor's page or message the developer through the Apify Console — requests from buyers are shipped first.

📝 Changelog

One line per published build, newest first — /actor-publish adds it with the commit subject.

  • 0.1.4 (2026-09-26) — feat(marketing): 2026-09-26.md — M-01, M-02.

  • 0.1.3 (2026-09-26) — fix(review): 2026-09-26-3.md — every finding implemented.

  • Next build — free tier 10 hotels; REPORT page; a demo brief kept next to your destination is ranked without, not stopped. score (= valueScore) is deprecated and removed in 0.2 — sort on valueScore.

  • 0.1.2 (2026-09-26) — fix(review): 2026-09-26.md — every finding implemented.

  • 0.1.1 (2026-09-26) — feat: implement Booking Hotel Finder: AI best-value hotels, pay per result Actor.

  • 0.1 (2026-09-26) — initial release.