TR Start free
HomeBlog › Guide

Hotel reservation software for small hotels: stopping double bookings, reading occupancy and tracking deposits

O Ohana360 Team • September 8, 2026 • 12 min read
Illustration of a hotel reservation screen showing a weekly occupancy calendar as a rooms by days grid

Almost every guesthouse owner who starts looking for hotel reservation software gets there through one sentence: "we sold the same room twice". A guest stands at the door on a Saturday evening, the book has one line, the portal has another. Nobody lied. The two records simply never sat side by side.

This guide treats a booking not as a notebook problem but as a five-link chain: request, confirmation, deposit, check-in, check-out. Our example is Seacliff Guesthouse, eight rooms, seasonal, with one person on the desk most of the time. (Demo data.) The book is not badly kept. The problem is not inside the book, it is everything that never reaches it.

The six points where the chain breaks

A booking book survives its first season. In the second a portal joins in, and by the third nobody trusts it on its own. The diagram below shows one season of breakage at Seacliff.

1 Request who called, which dates 2 Confirm room and rate agreed 3 Deposit prepayment taken 4 Check-in guest on site 5 Check-out the bill is closed THE SIX POINTS WHERE A PAPER BOOKING BOOK BREAKS (DEMO DATA, ONE SEASON) 1 The phone booking never reached the book A room was promised on an evening call, the book stayed at the desk, nobody wrote it up next morning: sold twice 4 clashes 2 The portal booking is not in the book A Booking.com alert landed on a phone, the person who checks the extranet was off; the room looked free all week 3 nights lost 3 Nobody can say whether the deposit came The prepayment was agreed in a chat, the receipt reached no file, and the argument started on arrival day 11 records 4 A cancelled room was never reopened The guest called off, the line in the book was never struck through, and a free room kept showing as sold 6 nights lost 5 The reservation has no room number The record carries only a room type, and which room it lands in is decided on arrival morning: clash at the door 9 records 6 The week is never visible at once Occupancy is read page by page, so the nights that stayed empty are noticed only after the season closes 1 blind season 6 double bookings in a season 9 room nights sold to nobody 11 deposits with no trail

What the six have in common is that none of them is carelessness. Each is a moment where the record never got made or never got closed. Nobody typed a wrong date; a step simply never reached anywhere.

What to record at every link

You do not close these gaps with more care. You close them by writing down in advance what gets recorded at each step. The table below is the trail a booking should leave from request to departure.

LinkRecordFields that must be filledWho, and when
1. RequestGuest cardName, phone, country, party size, special requestWhoever answered, before the call ends
2. ConfirmationReservationCheck-in, check-out, room number, channel, nightly rateThe moment a room is promised, same day
3. DepositPaymentAmount, due date, status, which stay it belongs toWhen the deposit is asked for, not when it arrives
4. Check-inReservation statusStatus set to Checked in, ID details on the guest cardThe desk, while the guest is standing there
5. Check-outStatus and remaining paymentStatus set to Checked out, balance marked PaidThe desk, as the room empties

Row two is the one everybody skips, and the skipped field is always the same: the room number. "We will find them a room later" sounds reasonable, but every clash check ever built runs on the room number. A reservation without one produces no conflict in any software. It produces one on arrival morning instead.

Tip: Build the room inventory before you enter a single booking. With an empty room list, the room field turns into free text, the occupancy calendar stays blank and the clash check never runs at all.

How a double booking happens, and how it stops

A double booking is not an attention problem, it is a concurrency problem: two people sell the same room minutes apart without seeing each other. The fix is not being more careful, it is making the second sale impossible to save. The table below shows which statuses should hold a room, which is the first question to ask of any reservation system.

Reservation statusRoom held?Why
PendingYes, heldThe room is held while confirmation is awaited, otherwise a pending booking means nothing
ConfirmedYes, heldThe sale is settled and the room cannot be sold for those dates
Checked inYes, heldThe guest is in the room; not open to interpretation
Checked outNo, releasedThe stay is over; a new arrival must be bookable into the same room the same day
CancelledNo, releasedThe room must be resellable at once, while the record stays with its reason
No-showNo, releasedA guest who never came does not hold a room, but the record survives: it belongs in the channel scorecard

A system that misses this distinction makes one of two mistakes: it refuses to let you resell a cancelled room, so an empty room reads as sold, or it ignores pending bookings, so the same room sells twice. Both are the same book failing in opposite directions.

The occupancy calendar: what a week tells you

Reservation management has one foundational screen and it is the occupancy calendar: rooms down, days across. A week at Seacliff looks like this.

Occupancy calendar Demo data • 8 rooms • 7 nights • Seacliff Guesthouse Mon Tue Wed Thu Fri Sat Sun 101 Standard SOLD SOLD SOLD SOLD SOLD 102 Standard RESV RESV SOLD SOLD SOLD 103 Deluxe SOLD SOLD SOLD SOLD 201 Deluxe SOLD SOLD SOLD RESV RESV 202 Family SOLD SOLD SOLD 203 Suite RESV RESV RESV SOLD 301 Bungalow SOLD SOLD SOLD SOLD SOLD SOLD SOLD 302 Bungalow MAINT MAINT MAINT MAINT MAINT MAINT MAINT Occupied 4/7 5/7 4/7 3/7 5/7 6/7 6/7 Week total: 33 of 49 room nights sold, occupancy 67% THE WEEK IN FOUR NUMBERS Occupancy rate 67% Room nights sold 33 / 49 Rooms off sale 1 (maintenance) Bookings with no deposit 3 WHERE THE BOOKINGS CAME FROM Direct and phone 5 Booking.com 4 Airbnb 2 Agency 2 HOW TO READ THE GRID Occupied: the guest has checked in Reserved: confirmed, not arrived Maintenance: room is off sale

Read it from the gaps, not the total. The three empty nights in the middle of the week (Thursday at 3 of 7) are a pricing decision: holding a midweek room at weekend rates has a cost. The row that is never empty (301, the bungalow) is a signal too, in the other direction: you are turning that demand away. Five questions to ask of the grid:

What you seeWhat it meansThis week's action
A block of empty midweek nightsDemand is bunched into the weekend and midweek is unsoldSet a separate midweek rate and a minimum-stay rule
One room type never emptyYou are short of capacity in that type and refusing bookingsRecord the enquiries you turn down, then decide on the mix after a season
Reserved rows that never became arrivalsEither the guest did not come or the status was never updatedClose every arrival by evening: Checked in or No-show
A room sitting in maintenance for weeksThe denominator shrinks and occupancy reads higher than it isGive maintenance an end date and return the room to Active when it is done
Single-night gaps between staysOrphan nights nobody can sell are accumulatingAllow flexible minimum stays or price those nights to move

Open the grid at the same time every morning. The direction of travel matters as much as the number: if the second week of September is still under sixty percent, you already know October needs work today.

Calculating occupancy without fooling yourself

Occupancy is a figure that produces four answers when three people calculate it, because nobody agreed on the denominator. There is only one correct denominator: rooms available for sale times nights. A room under maintenance is not in it, and a closed season is not in it.

MeasureFormulaDemo calculationWhat it tells you
Occupancy rateRoom nights sold / (active rooms × nights)33 / (7 × 7) = 67%How much of your capacity you sold
Average daily rateRoom revenue / room nights soldThe average price of a night you soldWhat your pricing decisions actually earned
Revenue per available roomRoom revenue / (active rooms × nights)Occupancy × average daily rateOccupancy and rate combined into one number
Cancellation rate(Cancelled + no-show) / total bookingsCalculated separately per channelWhich channel's bookings actually stick

Row three is the most skipped and the most useful. High occupancy on its own is not good news: dropping the rate to fill rooms is easy, lifting revenue per available room is not. A pricing decision made without looking at both produces a property that is full and unprofitable by the end of the season.

Note: Do not delete cancellations and no-shows, change their status. A deleted cancellation destroys the most valuable figure in the channel scorecard: how many bookings from each channel turn into an actual guest.

Deposit discipline: track the record, not the money

Most deposit arguments are not about the amount, they are about the absence of a record. The four rules below make two different people behave the same way.

RuleWhyHow it works in practice
The record opens when you ask, not when you are paidA record created before payment stays visible when payment never comesOpen the payment line as Pending with the confirmation date as its due date
Deposit and balance are separate linesOne line hides how much of a part payment actually arrivedTwo payments: Deposit and Balance, both on the guest
An overdue deposit is chased the same dayA booking whose deposit never came is really an empty roomOpen the overdue list every morning and release the room
The status changes the minute money landsA payment not marked Paid gets asked for a second timeOne click to Paid on the list, with the receipt filed on the guest card

The long version of making follow-up the system's job rather than a person's is in the automated reminders guide. If confirmations and deposit chasing happen mostly over WhatsApp, the method for turning those conversations into records is in the WhatsApp customer management guide.

The first 7 days: a setup plan

The most common way this migration fails is trying to move every past season at once. Half an hour a day for seven days is enough.

DayWhat to doWhat you have at the end of it
1Enter the rooms: number, type, floor, capacity, default nightly rateThe inventory the clash check and the calendar both rest on
2Verify room states: flag anything under maintenance or off saleA correct denominator for every occupancy figure
3Enter only future reservations; do not migrate past seasonsA real occupancy calendar and an undisputed today
4Open outstanding deposits as payments: amount, due date, statusA visible list of bookings whose deposit never arrived
5Build the channel habit: portal notifications get entered the same dayThe first day the channel scorecard means anything
6Set the morning rhythm: today's arrivals, departures and overdue paymentsA start to the day nobody has to remember
7Put the weekly occupancy review in the calendar and do the first oneEmpty nights noticed before the season ends, not after

On day eight, every new booking comes out of the system. Running the book in parallel helps in week one and hurts in week two: nobody writes the same thing down twice, and when they do, one copy goes stale, which is exactly where double bookings are born.

How Booking360 works in Ohana360

Booking360 owns the request, confirmation, check-in and check-out links of this chain. Here is what it does, without inflation, and what it does not do, without hiding it. This is the most important section of the guide.

Want to see the flow in 86 seconds?

Getting occupancy in practice

The bottom row of the calendar gives you the day; the week and the month you total yourself. It is a fifteen-minute job a month:

  1. Fix the denominator once. Count the rooms whose status is Active on the Rooms list; maintenance and closed rooms do not belong in it.
  2. Take room nights sold from the list. On Reservations, filter by check-in date, leave Cancelled and No-show out, make the Nights column visible and export to Excel or CSV.
  3. Divide, then put rate next to it. Nights sold over active rooms times nights is your occupancy. The Total column in the same export gives you average daily rate and revenue per available room.

Why say this so bluntly? Because "automatic occupancy reporting" is a phrase used very freely, and discovering after purchase that it is not there costs far more than knowing up front. What Booking360 genuinely solves is not the arithmetic of a percentage, it is that the same room cannot be sold twice: the reservation carries a room number, the clash is blocked at entry, and the calendar stays the single source of truth.

Which reports to build

There is an honest boundary here too. On the hospitality side the report builder covers Guests, Reservations and Rooms; Payments is not a report builder object. Payment analysis happens through the list view and export instead.

#ReportObjectGroup byMeasure / filter
1Reservation revenue by channelReservationsChannelSum of total (ready-made)
2Guests by countryGuestsCountryRecord count (ready-made)
3Rooms by typeRoomsRoom typeRecord count (ready-made)
4Nights sold by monthReservationsCheck-in (calendar month)Sum of nights, gives your season curve
5Reservations by statusReservationsStatusRecord count, gives your cancellation rate
6Revenue by room typeReservationsRoom typeSum of total, shows which type earns
7Guests by lifecycle statusGuestsStatusRecord count, shows your returning share
8Overdue paymentsPayments (list)-Filter: Status = Pending and past due, then export

Row eight is deliberately different: it is a saved list view, not a report. Save the filter and favourite the list, and you get a one-click deposit queue every morning, which for most small properties is more useful than a dashboard.

Appointment booking is the closest cousin of hotel reservation, so it helps to read the same calendar discipline from another trade: the patient management guide covers the same clash problem in a different business. The finance-side sibling of deposit and balance tracking is the invoice and payment tracking guide. Current numbers are on the pricing page, and you can request a demo to try it with your own rooms.

Frequently asked questions

What does hotel reservation software do that a booking book does not?
It keeps four questions answerable at any moment: which rooms are occupied tonight, who arrives tomorrow, which booking has no deposit against it, and how the next two weeks look. A paper book can hold all of that, on one condition: every line gets written the same day by the same hand. The real difference is not the report, it is that you cannot write a second booking into a room that is already sold. A book allows it; a record with a room number and a date range does not, so the clash surfaces at entry instead of on arrival morning.
Is there a channel manager for Booking.com and Airbnb?
No. Booking360 has no channel manager and no OTA sync; bookings that arrive through a portal are entered by you. Channel is a picklist on the reservation record: Direct, Website, Phone, Booking.com, Airbnb, Expedia, Agency, Walk-in. You get two things in exchange: the calendar stays the single source of truth rather than one of two systems that disagree, and the Reservation Revenue by Channel report shows which channel actually earns. In return you have to build one habit, which is entering the portal notification the same day it arrives.
How exactly does the double-booking guard work?
When a reservation is saved, the room number is checked together with the check-in and check-out dates. If a live reservation already covers overlapping dates in that room, the save is blocked with a warning. Cancelled, No-show and Checked-out reservations are excluded from the check, so a room freed by a cancellation can be resold immediately. One condition applies: the reservation needs a room number. A reservation saved with the room field empty is not checked and does not appear on the occupancy calendar either, though the calendar shows a separate warning strip counting those records.
How do I work out occupancy, ADR and RevPAR?
Occupancy is room nights sold divided by rooms available times nights. If one of eight rooms is under maintenance, the denominator is seven, not eight; a calculation that ignores that reports you as emptier than you are. The bottom row of the occupancy calendar gives it night by night (rooms occupied over active rooms), and for a week or a month you export the Reservations list with the Nights column and total it. The same export gives you average daily rate (room revenue divided by room nights sold) and revenue per available room (room revenue divided by total room nights).
Where do deposits and prepayments live?
On the payment record. A payment links to the guest and carries an amount, a due date and a status: Pending, Invoiced, Paid. Open the deposit as its own payment line, name it Deposit, put the confirmation date in the due field, and make the balance a second line. Overdue unpaid lines show in red on the list, and the Reservations Needing Attention section on the home page lifts any reservation with an overdue payment to the top. The honest limit: a payment links to the guest, not to a single reservation, so when one guest has two stays you tell them apart by what you write in the payment name.
Is a spreadsheet enough for a five-room guesthouse?
Often yes, for exactly one season. The pressure does not come from room count, it comes from how many people can take a booking and how many channels feed you. One person answering one phone can run five rooms on a grid. The moment a second person answers the phone, or a portal starts sending bookings while nobody is at the desk, the sheet has two authors and no arbitration, and that is where double bookings come from. Before buying anything, ask a smaller question: can a booking be entered from a phone, at the moment the call happens, by whoever took it?

Never sell the same room twice

Bookings carry a room number, clashes are blocked at entry, and two weeks of occupancy fit on one screen. Today's arrivals and every overdue deposit are waiting when you open up.

Read next