Skip to content
For developers & partners

Turn our hotel price data into your product.

We scan tens of thousands of hotels every four hours and keep a real price history on every one of them. That data is available via API — here's exactly what's in it.

20.1M+Price observations
43,611+Hotels tracked
48Destinations
4hrsScan frequency

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.

Core

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.

Core

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.

Curated

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.

Enrichment

Ratings & climate

440 hotels cross-referenced with TripAdvisor ratings, plus climate normals for every destination — pair a cheap month with a warm one.

Reporting

Monthly price index report

A press-ready UK holiday hotel price index: biggest movers, cheapest destinations, and quotable stats, regenerated monthly from live data.

Media

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.

1

Re-checked every 4 hours

Not a daily snapshot — genuine intraday movement, day and night.

2

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.

3

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.

4

Outlier-gated

A price far below anything ever seen for that hotel is usually a scrape glitch — rejected, not surfaced as a "deal".

5

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.

// GET /api/public/price-tracker/crete
{
  "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.