How we grade deals
Every site tells you "great deal." Most have no idea what that means statistically. Here's exactly how ResortMeter computes its grades, what the data looks like, and how to interpret it.
The data we collect
Once a day, an automated job queries booking-engine APIs for each tracked hotel and records per-night prices for every check-in date in the next 180 days, for a 7-night stay with 2 adults. We store every observation forever. After a few months, each hotel has thousands of price points across check-in dates and observation dates — enough to compute a meaningful price band.
Computing the grade
For each hotel, on each refresh:
- Find the cheapest per-night price across all currently-known forward dates ("best price").
- Compute the percentile rank of that best price within the hotel's full history of observations.
- Assign a letter grade based on that percentile.
| Grade | Percentile of best price | Plain-English meaning |
|---|---|---|
| S | ≤ 5% | Cheaper than 95% of every price we've ever seen for this hotel. |
| A | 5-15% | Strong deal — book without overthinking. |
| B | 15-30% | Solid. Not record-low but materially below typical. |
| C | 30-60% | Around average. Wait or look elsewhere if budget matters. |
| D | > 60% | Currently more expensive than typical. Don't buy on impulse. |
Things our grades do NOT do
- They do not predict where the price is going. A "C" today could be tomorrow's "A." We don't forecast.
- They do not compare hotels to each other. An S at one hotel and an S at another mean both are statistically cheap for *themselves*, not necessarily the same dollar value.
- They do not factor in flights, transfers, or fees. Just the published per-night room rate.
- They do not include taxes or resort fees when those are billed separately at checkout. We aim to show all-inclusive total cost where available.
Freshness
All prices are 0-24 hours stale, depending on when our refresh job last ran. Booking sites' actual checkout prices may differ — that's normal, and every site you've ever searched on works this way. The grade is the stable signal; the exact dollar number floats with availability.
Open by default
The scoring code is open: see src/lib/deal-score.ts
in the public GitHub repo. If you spot a bug or want to argue for
different thresholds, open an issue.