Hotel Booking Spreadsheet: A Free Google Sheets Template for Small Guesthouses (With Double-Booking Check)
Build a free hotel booking spreadsheet in Google Sheets or Excel, with columns for OTA, Messenger and walk-in bookings, plus a formula that flags double bookings.

A lot of small guesthouses in the Philippines start with a notebook at the front desk. The notebook works until you have a second person taking bookings, or a second OTA, or a long weekend where someone writes "Rm 3 – Sat" and nobody can tell which Saturday.
The next step is almost always a spreadsheet. It's free, it's on your phone, and your family already knows how to use Google Sheets.
This guide shows you how to build a hotel booking spreadsheet that actually works for a small property: one that handles Booking.com, Agoda, Airbnb, Messenger and walk-in bookings in the same place, and warns you when two bookings overlap on the same room. Most free templates online leave that last part out, and it's the one that matters.
You can build it in about 20 minutes.
Use Google Sheets, not Excel on one laptop
If more than one person takes bookings, use Google Sheets. Your spouse can check availability from the market, your staff can add a walk-in from the front desk, and everyone sees the same version.
An Excel file on one laptop gives you a second problem: copies. "Booking FINAL.xlsx" on the laptop and "Booking FINAL (1).xlsx" on someone's phone will disagree sooner or later.
Tab 1: Reservations (one row per booking)
This is your master list. Every booking from every source goes here, one row each.
| Column | What to put | Example |
|---|---|---|
| A | Booking ID | BK-0142 |
| B | Guest name | Maria Santos |
| C | Contact | 0917 xxx xxxx / Messenger name |
| D | Room | Room 3 |
| E | Check-in | 2026-12-27 |
| F | Check-out | 2026-12-29 |
| G | Nights | =F2-E2 |
| H | Source | Booking.com / Agoda / Airbnb / Messenger / Walk-in / Phone |
| I | Status | Confirmed / Pending deposit / Cancelled / Checked out |
| J | Total amount | 3,000 |
| K | Amount paid | 1,500 |
| L | Balance | =J2-K2 |
| M | Payment method | GCash / Bank / Cash / Paid via OTA |
| N | Notes | Late arrival, extra bed |
| O | Conflict check | (formula below) |
A few rules that save you later:
- Check-out is the day they leave, not their last night. A guest staying the nights of the 27th and 28th has check-out on the 29th. This is how every OTA records it, and the formulas depend on it.
- Use real dates, not text. Format columns E and F as dates. "Dec 27" typed as text will break everything.
- Use the same room names everywhere. "Room 3", "Rm3" and "3" are three different rooms to a formula. Better: make column D a dropdown (Data → Data validation → Dropdown) with your exact room list.
- Never delete a cancelled booking. Change the status to Cancelled. You'll want the history when a guest says "but I booked."
The double-booking check (the formula that earns its keep)
In cell O2, paste this and drag it down the column:
=IF(I2="Cancelled","",IF(COUNTIFS($D:$D,D2,$E:$E,"<"&F2,$F:$F,">"&E2,$I:$I,"<>Cancelled")>1,"DOUBLE BOOKED",""))
What it does in plain words: for this booking, count every non-cancelled booking in the same room whose dates overlap. Two bookings overlap when one starts before the other ends and ends after the other starts. The count always includes the booking itself, so anything above 1 means there's a conflict.
Then add conditional formatting so it's impossible to miss: select column O → Format → Conditional formatting → "Text contains" → DOUBLE → red fill.
Now when your staff types in a walk-in for Room 3 on a night that Agoda already sold, the row turns red right away instead of when two guests show up at the gate.
Tab 2: Calendar (the view you'll actually look at)
A list of rows is good for recording. It's bad for answering "may available pa ba this weekend?" in 10 seconds. For that you want a grid.
- Create a second tab called Calendar.
- In column A, starting at A2, list your rooms (Room 1, Room 2…).
- In B1, type the first date you want to show. In C1, type
=B1+1and drag right for 60–90 days. - In B2, paste:
=IF(COUNTIFS(Reservations!$D:$D,$A2,Reservations!$E:$E,"<="&B$1,Reservations!$F:$F,">"&B$1,Reservations!$I:$I,"<>Cancelled")>0,"■","")
- Drag it across and down to fill the grid.
- Add conditional formatting: "Is not empty" → fill color.
Each filled cell means that room is occupied that night. Empty means available. Freeze row 1 and column A (View → Freeze) so it stays readable on a phone.
If you want the guest's name in the cell instead of a block, you can do it with FILTER or INDEX/MATCH, but those formulas get fragile. For most small properties, the block is enough. You glance at the grid, then look up the details in Tab 1.
Optional Tab 3: Monthly summary
If you want a quick sense of the month without a separate accounting file:
- Room nights sold:
=SUMIFS(Reservations!G:G, Reservations!E:E, ">="&DATE(2026,12,1), Reservations!E:E, "<"&DATE(2027,1,1), Reservations!I:I, "<>Cancelled") - Revenue booked: the same, but summing column J
- Unpaid balances:
=SUMIFS(Reservations!L:L, Reservations!I:I, "Confirmed")
One caveat: these count bookings by check-in date, so a stay that crosses into the next month counts in the month it started. That's fine for a rough picture. Just don't use it for your BIR filings.
Where this spreadsheet will start to break
I'm not going to pretend a spreadsheet can't run a guesthouse. Plenty of 3–5 room properties run on one for years. But you should know where the cracks show up, so you notice them before a guest does.
1. It only knows what someone typed in. The double-booking formula catches conflicts inside the sheet. It can't see the Agoda booking that came in at 2 a.m. and hasn't been entered yet. Your sheet is only as current as the last time someone checked every extranet.
2. Someone will sort it wrong. Sooner or later a helpful staff member sorts one column without the others, and every guest gets shuffled to the wrong room. Google Sheets' version history (File → Version history) can save you. Learn where it is before you need it.
3. Phones make it clumsy. A wide spreadsheet on a 6-inch screen means lots of pinching and scrolling. People start skipping columns, usually the payment ones.
4. No receipts, no guest history, no "who changed this." You can't print a receipt from a row. You can't easily see that this guest stayed three times last year. And when a booking's dates change, the sheet doesn't record who changed it or when.
5. It depends on discipline you won't always have. In February, everyone updates the sheet. During Holy Week or the Sinulog weekend, when you're also cleaning rooms and answering 40 Messenger inquiries, the sheet falls behind. That's exactly when it matters most.
We wrote more about this in The Spreadsheet Isn't Your Biggest Problem. Your Memory Is.
Signs you've outgrown the spreadsheet
You don't need software just because software exists. But it's time to look when two or more of these are true:
- You're on two or more OTAs and update each extranet by hand
- More than one person takes bookings
- You've had a near miss (or a real double booking) in the last six months
- You can't tell who still owes you money without scrolling and adding up in your head
- You're afraid to take a day off because nobody else understands the sheet
If none of these sound like you, keep the spreadsheet. It's a good tool. Just add the daily routine from How to Track Room Availability When Bookings Come From Everywhere, which matters more than the file itself. If payment tracking is where the sheet is failing you, see How to Track Guest Payments and Deposits.
What the next step looks like
For a small property, "outgrowing the spreadsheet" doesn't have to mean a ₱5,000-a-month hotel system.
GoOverbooked started as the replacement for exactly this kind of sheet at a 9-room guesthouse in Bantayan. It has the same basic idea, a reservations list plus a room calendar, but it blocks a room automatically when it's booked, tracks payments and balances per booking, prints receipts, and gives staff their own login. The core app is free with no trial period.
If your spreadsheet is starting to feel like a second job, you can try the GoOverbooked demo with sample data and no signup, and see if it's simpler than what you have now. If it isn't, the template above will serve you fine.
Free to start
Run your hotel without the headaches.
Try the live demo in 30 seconds. No signup needed.



