Booking Hotel Finder & Scraper: AI best-value shortlist
Pricing
from $4.00 / 1,000 qualified hotel (rules only)s
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
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

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 get | a ranked hotel shortlist: price per night, value score with reasons, free cancellation, amenities, fine-print risks, a why-this-hotel line |
| You provide | a destination and dates — optionally a budget, must-have amenities and a one-line traveller brief |
| Output | JSON / CSV / Excel dataset, best value first, plus DIGEST and OUTPUT |
| Typical run | up 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 tier | first 10 qualified hotels per account |
| Keys / setup | none — the AI uses Apify's model access; plans without it set llmProvider: byok |
| Works with | Schedules, 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
- Click
Try it— the form is pre-filled with the free demo on sample Lisbon hotels; it works as is. - Type your
destination,checkInandcheckOut— the run switches to the live search by itself, capped bymaxDiscoveryChargeUsd. Pick the Booking scraper indiscoveryActorId, add atravellerBrief, keepenableAion. - Press Start — the
Shortlistview is ranked best value first. - Schedule it daily or weekly with your address in
notifyEmail— only new hotels and price drops are charged.

📚 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-scraper | lentic_clockss/booking-hotels-scraper | Booking 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 for | every row, incl. sold-out | every record | every row | only 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 rows | the 25 best, ranked and explained: $0.10 here + the scraper run on your account; junk costs $0 |
| Ranking | search order | value queue | search order | per night, reasons, your brief |
| Repeat runs | the same hotels again | watchlist deltas | the same hotels again | only 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.
| Event | When it is charged | Price |
|---|---|---|
free-tier | your first 10 qualified hotels, in any mode | $0.00 |
qualified-hotel-basic | AI off — value score, room facts, Booking's pros/cons, regex fine print | $0.004 |
qualified-hotel-ai | AI 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
| Field | Type | Default | What it does |
|---|---|---|---|
destination | string | — | City, district or hotel name as on Booking.com (or startUrls); typed next to the demo, it searches live |
sourceMode | actor | dataset | list | actor | Live Booking search, a Booking dataset, or pasted records. {} runs the free demo, nothing charged |
discoveryActorId | select | voyager/booking-scraper | The Booking scraper: full details $0.005, or $0.003 / $0.002 per property for the search-page row |
checkIn / checkOut | string | 30 days / 32 days | YYYY-MM-DD or relative days |
travellerBrief | string | — | What the AI scores each hotel against |
minScore | 0–100 | 40 | The field that decides what you pay: below this value score = not charged |
enableAi | boolean | true | Brief match, why-this-hotel, pros/cons, fine print |
mustHaveAmenities | string[] | — | Hard requirement, matched with synonyms |
maxQualified | integer | 25 | Hotels on the shortlist — the ceiling of what this Actor charges |
maxDiscoveryChargeUsd | number | 0.5 | Caps 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
- 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. - Keep
dedupeAcrossRunsandonlyNewOrPriceDropon — you are charged only for what is new or cheaper; the memory is kept pertravellerBrief, so clients never mix. - Add
slackWebhookUrlfor a channel, orwebhookUrlfor 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:
| Niche | What it looks for | Input |
|---|---|---|
| Travel agent | family hotels with pool and parking under a budget | docs/img/preset-travel-agent.json |
| Event planner | hotels within 2 km of the venue, rating ≥ 8 | docs/img/preset-event-planner.json |
| Deal hunter | daily hotel price drop alert ≥ 10 % on one stay | docs/img/preset-price-drop-alert.json |
🔌 Integrations, automation and API
- E-mail / Slack —
notifyEmailandslackWebhookUrldeliver theDIGESTafter every run with new hotels. - Webhook (Zapier, Make, n8n) —
webhookUrlPOSTs{"event": "hotel.qualified", "hotel": {…}, "runId": "…"}per hotel, or{"event": "hotels.qualified", "hotels": [{…}], "runId": "…"}perwebhookBatchSizebatch; a 429 / 5xx is retried once, a failed POST is counted inOUTPUT.webhook.failedand 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 ApifyClientclient = 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 / concierge | send a client the 10 best-value hotels with free cancellation, parking and a pool | dates, travellerBrief, mustHaveAmenities |
| Corporate-travel or event planner | hotels within 2 km of the venue under a nightly cap, fine print flagged | nearPoint, maxDistanceKm, maxPricePerNight |
| Trip-planning app or AI agent | ranked hotels as JSON from destination, dates and a brief | the API / MCP call above |
| Deal hunter / travel creator | a 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
whyThisHotelbrings back the rule line. - Your brief.
briefMatchScorescores the hotel againsttravellerBrief;valueScore= 70 % rule + 30 % brief. - Tokens where they matter. The best rule-scored candidates first, every one at or above
minScore− 15, up toaiCandidateMultiplier×maxQualified. - No keys. Default
anthropic/claude-haiku-4.5via 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
maxDiscoveryChargeUsdand 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
- Google Reviews Analysis AI — what guests say about a hotel or venue on Google Maps: complaints, praise, reputation
- Reddit Brand Monitoring — what travellers say about a hotel, brand or destination on Reddit, with sentiment
🆘 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;
REPORTpage; a demo brief kept next to your destination is ranked without, not stopped.score(=valueScore) is deprecated and removed in 0.2 — sort onvalueScore. -
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.