What's actually in the data
Every dataset below is built from our own scans — nothing purchased or scraped from a third-party aggregator. It's been running continuously since March 2026.
Per-hotel price history
576,092+ baseline records across 43,611+ hotels — each hotel compared against its own rolling average by month and lead time, not a generic market rate.
Destination price indices
Typical nightly rate, week-on-week and month-on-month movement, and seasonality curves for 48 destinations, updated on every scan cycle.
Live deal feeds
Three ranked feeds updated continuously: Top Deals (any quality hotel with a genuine drop), The Upgrade (5★ hotels below their own rate), and The All-Inclusive Edit.
Ratings & climate
440 hotels cross-referenced with TripAdvisor ratings, plus climate normals for every destination — pair a cheap month with a warm one.
Monthly price index report
A press-ready UK holiday hotel price index: biggest movers, cheapest destinations, and quotable stats, regenerated monthly from live data.
Real hotel photography
Every tracked hotel has a real photo from the booking source — useful for building your own cards, widgets or editorial pieces without stock imagery.
Why the numbers hold up
The same five checks power every public page on the site — nothing different for the API.
Re-checked every 4 hours
Not a daily snapshot — genuine intraday movement, day and night.
Compared to each hotel's own history
Never a made-up "usual price" — a rolling record of real prices observed for that hotel, that month, that lead time.
Tax-normalised
Some sources quote pre-tax (Agoda does); we add an estimate of the tax to get a like-for-like, tax-inclusive figure before comparing, so that figure is an estimate and not a quote.
Outlier-gated
A price far below anything ever seen for that hotel is usually a scrape glitch — rejected, not surfaced as a "deal".
Savings capped at a believable ceiling
A number that looks unbelievable doesn't help anyone — displayed savings are capped even when the raw maths says more.
Example requests
A flavour of what's available. Full parameter reference and additional endpoints are provided once you have a key.
GET /api/public/price-tracker/:destination
Live price snapshot for one destination — typical nightly rate, week-on-week trend, a 21-day sparkline, and the cheapest month ahead.
{
"name": "Crete", "country": "Greece",
"current": { "avg_p20": 57, "min_p20": 41, "samples": 1640 },
"trend": { "dir": "up", "pct": 8 },
"cheapestMonths": [{ "month": "2026-10", "p20": 41 }],
"sparkline": [ { "d": "2026-06-16", "p20": 62 }, /* ...21 days */ ]
}
GET /api/public/top-deals
The current curated deal feed — real hotel, real photo, real saving vs that hotel's own baseline, plus the destination price index and site-wide stats.
GET /api/upgrade · GET /api/all-inclusive
The two specialised feeds: 5★ hotels below their own rate, and all-inclusive resorts below their own rate. Same response shape as top-deals.
GET /api/public/price-index-report
The monthly press-ready index: month-on-month movement per destination, biggest fallers/risers, and ready-to-quote sentences.
GET /go/check?hotel=&destination=&checkin=&checkout=&adults=2&via=
For assistants and tools: a booking link with the guest’s dates filled in. The hotel must match one we track in that destination; otherwise the visitor lands on the destination page, never on a different hotel. No key needed. Set via to your tool’s name so we can see what is sent our way.
For AI assistants: MCP server and agent API
No key, read-only. Answers rather than data: whether a hotel price is high or low for that hotel and month, when a destination is cheapest, and current deals. Results include the page they came from and, where we can build one, a booking link with the dates filled in. Destination results have one per month: a booking-site search for the destination, two adults, 7 nights from the 15th (or from today once the 15th has passed).
MCP · https://hotelmonitor.co.uk/mcp
Streamable HTTP, stateless (version 1.2.0). Tools: check_hotel_price (Check a hotel price), get_destination_prices (Destination prices by month), find_hotel_deals (Find hotel deals). All three are read-only. To add it to Claude or ChatGPT, add a custom connector with that URL; no sign-in is needed.
REST · GET /api/agent/v1/price-check · /destination/{slug} · /deals
The same answers as plain JSON, described in /openapi.json (OpenAPI 3.1).
Limits, via and errors
Per client, MCP and REST sharing one count: 60 requests a minute and 2,000 a day. A client is its IP address (IPv6 by its /64) plus its user agent. Over either limit you get 429 with Retry-After; X-RateLimit-* describe the per-minute window and RateLimit-Policy states both. Pass an optional via (lower-case letters, digits, - or _, up to 32) with your app’s name and it is carried into booking links; otherwise agent_mcp or agent_api is used. An unknown destination returns unknown_destination with suggestions and the full valid_destinations list.
What the numbers are
Tax-inclusive nightly prices from our own scans (the Agoda share is an estimate of tax). Destination figures are the cheapest-fifth rate for two adults, the same as our month pages. They are past observations, not live quotes, so the final total is confirmed on the booking site. If we do not have enough scans of a hotel for that month, the answer says so instead of guessing. Booking links are affiliate links; we may earn a commission at no extra cost to the person booking.
Access
There's no self-serve signup — every request is read by a person, and you'll get a real reply, not an autoresponder.
Free keys for the data API (/api/public/*; this is separate from the agent API above) are rate-limited (currently 60 requests an hour per key) and meant for evaluation, a hobby project, or a small integration. If you need more, say so in the form below and we'll sort out a higher limit.
Request API access
Tell us a little about what you're building and we'll email you a test key.
By submitting you agree to be contacted about your request. We don't use this for marketing. See our privacy policy.