Methodology
Not a black-box recommendation. Every score below is a documented formula over real data - this page shows the weights, the sources, and exactly what's an honest estimate versus a fact.
Every hotel gets a metric score: each of its metrics (quiet, cleanliness, transit, room size, value, and a couple/family/business fit score) is multiplied by a weight, summed, and divided by the total weight. Your traveler type shifts those weights automatically before anything else runs.
| Metric | Base weight |
|---|---|
| Quiet | 20 |
| Cleanliness | 18 |
| Transit access | 18 |
| Value | 14 |
| Room size | 12 |
| Couple fit | 8 |
| Family fit | 4 |
| Breakfast | 3 |
| Wi-Fi | 3 |
Picking Couple adds +10 to couple fit; Family adds +12 to family fit; Business adds +8 Wi-Fi / +4 transit; First-time adds +8 transit. Anything your free-text description implies as a priority (e.g. "quiet is essential") boosts that metric's weight too, on a continuous 0–18 scale when the LLM parser is active, or a flat +8 from the rule-based fallback.
That weighted metric score is then blended with a semantic text-match score - a real TF-IDF cosine-similarity comparison between your exact wording and each hotel's neighborhood description, tags, strengths, and review text - so phrasing that isn't a recognized keyword can still move the ranking:
Price is applied last: hotels over your stated budget lose up to 24 points scaled to how far over they are; hotels under budget gain up to 8. Nothing about this formula changes hotel-by-hotel - it's the same function for all of them.
Metrics like QUIET 86/100 are disclosed estimates, not measurements - there's no honest source for a real decibel reading per hotel. Where a real, checkable fact exists instead, StayRank AI shows that fact alongside the estimate rather than replacing one with a guess:
The actual named nearest station/stop and straight-line distance, via OpenStreetMap's Overpass API - the same public data Google Hotels and Booking.com's "X min walk to [station]" line draws from.
No honest decibel data exists per hotel, so nothing is invented. Instead: a real count of nearby nightlife venues and nearby major roads from OpenStreetMap, shown as plain-language context alongside the raw counts.
Real street-network routing via OSRM's public routing engine - not a straight-line guess - for distance/time to a landmark you search for.
Live forecast via Open-Meteo for trips within ~15 days; beyond that horizon, real historical averages for the matching dates, clearly flagged as historical rather than presented as a forecast for your specific trip.
Live daily rates from the European Central Bank via the free Frankfurter API - not a fixed or estimated conversion.
Name, coordinates, address, star category, and photos come from live booking-data APIs, or the Hotelbeds Content API as an independent fallback when the primary source's rate limit is hit for a city - never a generated placeholder.
Weighted-formula outputs built from the real signals above plus review text, explicitly labeled as a computed score - never presented as a measured fact.
No. There is no mechanism in the app for a hotel to pay for a better score or position. The formula above runs identically for every hotel.
The search doesn't fail. Every LLM call is wrapped so any failure (missing key, rate limit, timeout, malformed response) falls back to a rule-based keyword and TF-IDF parser, seamlessly, on the same request.
Because there's no honest data source behind one. The Best Time panel shows real historical temperature and rainfall by month instead of a fabricated popularity number.