Short Let & Holiday Rental Tracker
Made for hosts running short lets.
A booking log with monthly occupancy, income and net after platform fees and cleaning. The summary carries a chart that redraws itself as you type.
Of the 26 columns, you fill in 11 and the other 15 work themselves out, and all 17 figures on the summary do too. There is room for 348 rows of your own.
£4.99one payment, yours to keep
- Opens in Excel, Google Sheets and Numbers
- Delivered straight away
- No macros, nothing to install
- Change it free before you buy
Payment is handled by Stripe. Your card details go to them and never to us. Sales are final, which is why every tab, column and calculation is shown on this page first.
Already have a spreadsheet of your own? Check it for mistakes, free.
- A new row is typed into the Bookings tab, one cell at a time, in the white cells a person fills in.
- The shaded cells in that row fill themselves in.
- The figures on the What I Really Make tab change to include the new row.
- The chart, Income by platform, redraws with it.
Everything inside, before you pay
This is the whole design: every tab, every column and how each calculated one is worked out. White cells are yours to fill in; the shaded ones work themselves out and are locked so a formula cannot be overwritten by accident. There is room for 348 rows. Open any tab to see its columns.
Bookings
14 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Booking Ref | Type any text. | |
| Guest | Type any text. | |
| Platform | Pick one: Airbnb, Booking.com, Vrbo, Direct, Returning Guest or Other. | |
| Check In | Type a date. | |
| Check Out | Type a date. | |
| Nights | Fills itself in. | The Check Out minus the Check In. The formulaIF(OR(ISBLANK([check_in]),ISBLANK([check_out])),"",[check_out]-[check_in]) |
| Guest Paid | The full amount the guest paid for the stay, before any fee is taken off.Type an amount in £. | |
| Platform Fee | Type an amount in £. | |
| Cleaning Cost | Type an amount in £. | |
| Other Costs | Laundry, consumables, welcome basket, anything else tied to this stay.Type an amount in £. | |
| Net To Me | Fills itself in. | Worked out from this row's Guest Paid, Platform Fee, Cleaning Cost and Other Costs. The formulaIF(ISBLANK([gross_paid]),"",[gross_paid]-IF(ISBLANK([platform_fee]),0,[platform_fee])-IF(ISBLANK([cleaning_cost]),0,[cleaning_cost])-IF(ISBLANK([other_costs]),0,[other_costs])) |
| Net Per Night | Fills itself in. | Worked out from this row's Guest Paid, Check In, Check Out, Net To Me and Nights. The formulaIF(OR(ISBLANK([gross_paid]),ISBLANK([check_in]),ISBLANK([check_out])),"",IFERROR([net]/[nights],0)) |
| Month | Taken from the check in date, so a stay that crosses a month counts in the month it started.Fills itself in. | Worked out from this row's Check In. The formulaIF(ISBLANK([check_in]),"",TEXT([check_in],"YYYY-MM")) |
| Year | Fills itself in. | Worked out from this row's Check In. The formulaIF(ISBLANK([check_in]),"",YEAR([check_in])) |
By Month
12 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Month Starting | Use the first day of the month, for example 01/09/2026.Type a date. | |
| Nights Available | Nights the place was actually open to let. Drop the days you blocked off for yourself.Type a number. | |
| Month Key | Used to match bookings to this month.Fills itself in. | Worked out from this row's Month Starting. The formulaIF(ISBLANK([month_start]),"",TEXT([month_start],"YYYY-MM")) |
| Bookings | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month on Bookings. The formulaIF(ISBLANK([month_start]),"",COUNTIF([Bookings!stay_month],[month_key])) |
| Nights Booked | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month and Nights on Bookings. The formulaIF(ISBLANK([month_start]),"",SUMIF([Bookings!stay_month],[month_key],[Bookings!nights])) |
| Occupancy | Fills itself in. | Worked out from this row's Month Starting, Nights Booked and Nights Available. The formulaIF(ISBLANK([month_start]),"",IFERROR([nights_booked]/[nights_available],0)) |
| Guests Paid | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month and Guest Paid on Bookings. The formulaIF(ISBLANK([month_start]),"",SUMIF([Bookings!stay_month],[month_key],[Bookings!gross_paid])) |
| Platform Fees | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month and Platform Fee on Bookings. The formulaIF(ISBLANK([month_start]),"",SUMIF([Bookings!stay_month],[month_key],[Bookings!platform_fee])) |
| Cleaning | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month and Cleaning Cost on Bookings. The formulaIF(ISBLANK([month_start]),"",SUMIF([Bookings!stay_month],[month_key],[Bookings!cleaning_cost])) |
| Other Costs | Fills itself in. | Worked out from this row's Month Starting and Month Key, using Month and Other Costs on Bookings. The formulaIF(ISBLANK([month_start]),"",SUMIF([Bookings!stay_month],[month_key],[Bookings!other_costs])) |
| Net Income | Fills itself in. | Worked out from this row's Month Starting, Guests Paid, Platform Fees, Cleaning and Other Costs. The formulaIF(ISBLANK([month_start]),"",[gross_income]-[fees]-[cleaning]-[other]) |
| Net Per Night Let | Fills itself in. | Worked out from this row's Month Starting, Net Income and Nights Booked. The formulaIF(ISBLANK([month_start]),"",IFERROR([net_income]/[nights_booked],0)) |
What I Really Make
17 figures
| Figure | Worked out as |
|---|---|
| Bookings recorded | The number of rows on Bookings with Booking Ref filled in. The formulaCOUNTA([Bookings!booking_ref]) |
| Nights let | The total of Nights on Bookings. The formulaSUM([Bookings!nights]) |
| Total guests paid | The total of Guest Paid on Bookings. The formulaSUM([Bookings!gross_paid]) |
| Platform fees paid | The total of Platform Fee on Bookings. The formulaSUM([Bookings!platform_fee]) |
| Cleaning paid | The total of Cleaning Cost on Bookings. The formulaSUM([Bookings!cleaning_cost]) |
| Other costs | The total of Other Costs on Bookings. The formulaSUM([Bookings!other_costs]) |
| Net after all costs | Worked out from Guest Paid, Platform Fee, Cleaning Cost and Other Costs on Bookings. The formulaSUM([Bookings!gross_paid])-SUM([Bookings!platform_fee])-SUM([Bookings!cleaning_cost])-SUM([Bookings!other_costs]) |
| Costs as a share of income | Worked out from Platform Fee, Cleaning Cost, Other Costs and Guest Paid on Bookings. The formulaIFERROR((SUM([Bookings!platform_fee])+SUM([Bookings!cleaning_cost])+SUM([Bookings!other_costs]))/SUM([Bookings!gross_paid]),0) |
| Average nightly rate | Worked out from Guest Paid and Nights on Bookings. The formulaIFERROR(SUM([Bookings!gross_paid])/SUM([Bookings!nights]),0) |
| Average net per night let | Worked out from Guest Paid, Platform Fee, Cleaning Cost, Other Costs and Nights on Bookings. The formulaIFERROR((SUM([Bookings!gross_paid])-SUM([Bookings!platform_fee])-SUM([Bookings!cleaning_cost])-SUM([Bookings!other_costs]))/SUM([Bookings!nights]),0) |
| Average nights per booking | Worked out from Nights and Booking Ref on Bookings. The formulaIFERROR(SUM([Bookings!nights])/COUNTA([Bookings!booking_ref]),0) |
| Occupancy across the months listed | Nights let divided by nights available on the By Month tab. Worked out from Nights Booked and Nights Available on By Month. The formulaIFERROR(SUM([By Month!nights_booked])/SUM([By Month!nights_available]),0) |
| Best month for net income | The largest Net Income on By Month. The formulaMAX([By Month!net_income]) |
| Average net income per month | Worked out from Net Income and Nights Available on By Month. The formulaIFERROR(SUM([By Month!net_income])/COUNT([By Month!nights_available]),0) |
| Guests paid this year | Worked out from Year and Guest Paid on Bookings. The formulaSUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!gross_paid]) |
| Net this year | Worked out from Year, Guest Paid, Platform Fee, Cleaning Cost and Other Costs on Bookings. The formulaSUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!gross_paid])-SUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!platform_fee])-SUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!cleaning_cost])-SUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!other_costs]) |
| Nights let this year | Worked out from Year and Nights on Bookings. The formulaSUMIF([Bookings!stay_year],YEAR(TODAY()),[Bookings!nights]) |