A book-direct badge for your hotel's website.
A small price comparison widget beside your booking form. It shows guests your direct price with the last check's verdict, and lists the OTAs' prices only when yours is the best or the same.
- script tag to add
- 1
- verdicts it can give
- 4
- OTA prices shown when one is cheaper
- 0
Deluxe Double
Fri 16 – Sat 17 Oct · 2 guests · Breakfast included
€189 / night
Book nowBest price, right here
€189direct
- Booking.com€199
- Expedia€204
- Google · Trip.com€196
Save €7 by booking direct
Book directPrices checked 2 hours ago
What guests see
Four verdicts, in the badge's own words. It lists the OTAs only when that helps you.
Cheapest
Best price, right here
Your direct price, each OTA's price for the same stay beneath it, and how much a guest saves by booking with you.
Same price
Same price here
Your direct price, with the OTAs' matching prices beneath it. A guest loses nothing by booking with you.
Only here
Our price today
No OTA is selling the stay, so the badge shows your price on its own.
Undercut
Our price today
An OTA sells for less. The badge shows your direct price alone and names no OTA, and the undercut goes to your queue.
The badge speaks English, whatever language your site is in.
Always and never
What the badge shows, and what it never does. It sits on your site, so it only ever makes your case.
Always
- Your direct price, in your currency, written the way the guest's browser writes prices
- A Book direct button to your booking page, once you give it the address
- How long ago the prices were checked
Never
- An OTA's price when it's lower than yours: then it names no OTA at all
- Anything from inside the product: no ids, no confidence, no cost, no supplier
- An empty box: switched off, it collapses and takes no space
Installation
One script tag, where guests pick dates. Your hotel's key is on the Badge page in the portal.
<!-- StayParity badge. Put it where guests pick dates. -->
<script src="https://badge.stayparity.com/embed.js"
data-hotel="wk_aurora"
data-book-url="https://hotelaurora.gr/book"
async></script>When the guest picks dates
Your booking form can send the new dates to the badge, and it prices them. A message can change the dates and the guests, never the hotel.
// From your booking form, when the guest picks dates
const frame = document.querySelector('iframe[src^="https://badge.stayparity.com/"]');
frame.contentWindow.postMessage(
{ type: "rate-parity:stay", stay: "2026-10-16", occupancy: 2 },
"*"
);What the tag takes
- data-hotel
- Your hotel's key. Required: without it, nothing shows.
- data-book-url
- Your booking page, https only. The Book direct button goes there; without a valid address there is no button.
- data-stay
- The check-in date, as YYYY-MM-DD. Tomorrow if you leave it out.
- data-occupancy
- Guests, from 1 to 10. Two if you leave it out.
Performance and privacy
Light on your page, and walled off from it. It loads after your page and sets no cookies.
Loads after your page
The tag is async, and the badge's frame loads only as it nears the screen, so your page never waits for it.
Small
The loader is about 1 kB compressed and the badge about 5 kB more, with no web font to fetch.
No cookies, no storage
The frame is sandboxed with no cookies or storage of its own, and its requests carry no credentials.
Fits your page
It takes your page's width, grows to fit what it shows, and follows the guest's light or dark setting.
Questions
About the badge. Anything else, ask us.
- Will the badge ever show that an OTA is cheaper?
- No. When an OTA sells for less, the badge shows your direct price alone and names no OTA. The undercut goes to your queue, for you to fix.
- Which dates does it price?
- Tomorrow in the guest's own time zone, for two guests, unless the tag sets data-stay and data-occupancy or your booking form sends the dates the guest picked.
- What if nothing has been checked for those dates?
- While a check runs, it says it's checking today's prices, then shows the verdict. If no verdict comes, it says Book direct with us, with your button and no prices.