Competitor Rate Grid
Rebuild the grid every revenue manager reads each morning — your hotel and its competitor set side by side for a stay — using live Booking.com rates. One call per property, current prices, no scraper.

What you'll build
A single self-contained HTML page — no framework, no build step: one row per property, the cheapest available rate for the stay in each cell, your own hotel pinned to the top, and colour coding for where you sit against the set. Room type, board and cancellation come along for free.
Set this up first
RequiredThe endpoints don't take free text — they take your identifiers. This recipe assumes the things below already exist on your account; while one of them is missing the call answers empty, not with an error. Each point links to the recipe that walks it.
- 01
Register the hotel in your dashboard
Veetal resolves the property against Booking.com and assigns it a slug — and that slug, not the hotel name, is what every accommodation endpoint takes.
Guide: Add your hotel and the comp set you price against → - 02
Fill in its comp set
Up to ten competitors on the accommodation detail. Without them this recipe prints your own price list instead of a comparison, and the competitors block comes back empty.
How it works
- 01
Get your API key
Create your account and copy your key. Start free with 100 API credits.
- 02
List your comp set
Read the competitors configured for your hotel — that gives you your own slug plus every rival you track.
- 03
One live call per hotel
Ask Booking.com for the stay, hotel by hotel. Take the cheapest room from each response and you have the grid. Live calls take seconds and consume credits, so keep the set tight.
The call
One call returns every room on sale for that stay, with price per night, board and cancellation. Repeat it for each hotel in your set to fill the grid.
# 1) Your comp set for this hotel
curl "https://api.veetal.app/v2/account/accommodation/YOUR_HOTEL_ID/competitors" \
-H "veetal-api-key: YOUR_API_KEY"
# 2) Live Booking.com rates, one call per hotel in the set
curl "https://api.veetal.app/v2/real-time/accommodation/YOUR_HOTEL_SLUG/rate/booking/2026-09-15/2026-09-17/2" \
-H "veetal-api-key: YOUR_API_KEY"Build it with AI
Connect the MCP →Paste this prompt into an assistant with the Veetal MCP connected and it builds the whole app against your data — no front-end work.
Use my Veetal Connect data to build a competitor rate grid for my hotel,
for a stay I choose, using live Booking.com rates.
I want the view a revenue manager reads every morning: my hotel against the
hotels I compete with, and what each of them is charging right now for that
stay. Work out what data you need and fetch it.
Build it as a single self-contained HTML page — plain HTML and CSS, no
frameworks, no build step, no external requests:
- One row per property: my hotel pinned to the top and visually separated,
then every competitor.
- For each property, the cheapest available rate for the stay, plus the room
type, board and whether it is refundable.
- Colour each row by where it sits against the set: cheapest, mid, priciest.
- A summary line: the set's median rate, my position in the ranking, and the
gap to the cheapest competitor in money and percent.
- Show how many rooms are left when the data says so — a low count next to a
high price is a different signal than a high price alone.
- Leave a property visibly empty when it returns no availability, and never
invent a price.
- Because these are live calls, show progress as each hotel comes back rather
than a single long spinner.
Clean and readable at a glance, works in light and dark. Use only real values
from my data.Questions
Where do the competitors come from?
From the competitor set configured on your account for that hotel. One call returns your rivals, and each one carries the slug you then use for its rate call.
Why live rates instead of the stored feed?
Because this is the price on Booking.com right now, which is what you act on when you reprice today. The stored Feed layer is cheaper for reading long histories, but it is refreshed on a schedule.
How many credits does a grid cost?
One live call per property. A set of six hotels is six calls for one stay — keep the set tight and cache the answer rather than refetching on every page load.
Why does a hotel come back empty?
No availability for that stay, or the stay is below its minimum nights. The recipe leaves the row visibly blank on purpose instead of carrying over an older price.
Build your own
Start free with 100 API credits. No credit card, no sales call.