Pricing Engine
A hotelier wants to charge ₹3,200 on weeknights, ₹4,500 on weekends, ₹7,500 on Diwali week, ₹2,800 if the booking is for 7+ nights, and ₹3,500 if the booking is made <24 hours before check-in. The pricing engine evaluates these rules in a deterministic order so the owner always knows which price will show.
The model — base + modifiers
Every room type has one immutable base rate. Everything else is a stacking modifier evaluated by an explicit precedence order. Higher precedence wins.
| Priority | Rule | Type | Example |
|---|---|---|---|
| 1 (highest) | Date-specific override | Absolute | Dec 30: flat ₹7,500 |
| 2 | Seasonal range | Absolute or % | Dec 24 – Jan 2: ₹6,500 |
| 3 | Day-of-week | Absolute | Fri & Sat: ₹4,800 |
| 4 | Length-of-stay discount | % | 7+ nights: −10 % |
| 5 | Early-bird / Last-minute | % | Book <24 h before: ₹3,500 |
| fallback | Base rate | — | ₹3,200 |
Rate calendar UI
Bulk rate update · UI
Rate plan editor
rp_01HX2P3Q… · created 12 Mar 2026All derived plans (Non-refundable, Member-only) recompute automatically when you save changes here.
Defining a seasonal range
Click "Add rule" on the rates page
Choose rule type: Seasonal range.
Pick date range
Inclusive on both ends. e.g. Dec 24 → Jan 2.
Set the new rate
Either an absolute price or a percentage on top of base. Validate against min-rate floors.
Optional: minimum length-of-stay
e.g. "Min 3 nights during this range".
Optional: minimum advance days
e.g. "Must book 7 days in advance to lock this rate".
Save
Rule is now visible on calendar. Two rules of equal priority on same date trigger a warning.
Price calculation — worked example
· Night 1 (Sun 27 Dec) → seasonal override ₹6,500
· Night 2 (Mon 28 Dec) → seasonal override ₹6,500
· Night 3 (Tue 29 Dec) → seasonal override ₹6,500
→ Room subtotal = ₹19,500
+ GST @ 12 % = ₹2,340
+ City tax 2 % = ₹390
Total payable = ₹22,230
Tax handling
| Room tariff per night | GST rate (India, 2026) |
|---|---|
| Up to ₹7,500 | 12 % |
| Above ₹7,500 | 18 % |
The engine looks at the per-night rate (post all modifiers) to pick the GST bracket. Owners can override with their CA-issued bracket if their property has special exemptions.
Special rate plans
Non-refundable
Same dates, 10–15 % cheaper, locked at booking. Skips refund policy entirely.
Pay-at-property
No online payment; guest pays at check-in. Owner can require a credit-card guarantee even so.
Member-only
Discount visible only to logged-in public users with at least 1 prior stay.
Promo code
Owner generates a code (e.g. SUMMER25) with discount % + validity dates + max uses.
Channel-specific
Different headline rate on Booking.com vs direct site. Useful for rate-parity strategy.
Group rate
For ≥4 rooms in one booking. Triggers manager approval if discount > 15 %.
Bulk update — paste from spreadsheet
Power users want to paste an Excel column into the rate calendar. The bulk edit modal accepts:
- Date range + flat rate
- CSV-style paste:
2026-12-24, 6500rows - "Apply weekend +20 % from now until end of year"
Rate floors & ceilings
Owner can configure a min rate and max rate per room type. Any rule (or any future yield-management automation) that would push outside this range is blocked with an explanation. Prevents accidental ₹100/night listings.
API — quote request
{
"property_id": "prp_01HX…",
"room_type_id": "rt_01HX…",
"check_in": "2026-12-27",
"check_out": "2026-12-30",
"guests": { "adults": 2, "children": 1 },
"promo_code": null
}
// Response
{
"nights": 3,
"line_items": [
{ "date": "2026-12-27", "rule": "seasonal:diwali_xmas", "amount": 6500 },
{ "date": "2026-12-28", "rule": "seasonal:diwali_xmas", "amount": 6500 },
{ "date": "2026-12-29", "rule": "seasonal:diwali_xmas", "amount": 6500 }
],
"room_subtotal": 19500,
"taxes": [
{ "label": "GST @ 12 %", "amount": 2340 },
{ "label": "City tax @ 2 %", "amount": 390 }
],
"total": 22230,
"currency": "INR",
"quote_id": "qt_01HX…",
"expires_at": "2026-05-25T18:30:00Z"
}