Rental Property Income & Costs
Made for landlords with one to ten properties.
A workbook for a small portfolio: one row per property with its rent and mortgage, one row per payment in or out against a property, and a summary showing income, costs and the position for each property and overall. The summary carries a chart that redraws itself as you type.
Of the 21 columns, you fill in 13 and the other 8 work themselves out, and all 19 figures on the summary do too. There is room for 1,240 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 Payments 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 Summary tab change to include the new row.
- The chart, Money out by category, 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 1,240 rows. Open any tab to see its columns.
Properties
11 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Property Ref | A short code you will recognise. Payments are matched to a property by this code, so keep each one unique.Type any text. | |
| Address | Type any text. | |
| Type | Pick one: Flat, Maisonette, Terraced house, Semi detached house, Detached house, Bungalow or Room in HMO. | |
| Status | Pick one: Let, Vacant, Notice given or Under refurbishment. | |
| Monthly Rent | Type an amount in £. | |
| Monthly Mortgage | Type an amount in £. | |
| Monthly Surplus | Fills itself in. | The Monthly Rent minus the Monthly Mortgage. The formulaIF(ISBLANK([monthly_rent]), "", [monthly_rent] - [monthly_mortgage]) |
| Money In To Date | Fills itself in. | The total of Money In on Payments where Property matches this row's Property Ref. The formulaIF(ISBLANK([property_ref]), "", SUMIF([Payments!property], [property_ref], [Payments!money_in])) |
| Money Out To Date | Fills itself in. | The total of Money Out on Payments where Property matches this row's Property Ref. The formulaIF(ISBLANK([property_ref]), "", SUMIF([Payments!property], [property_ref], [Payments!money_out])) |
| Position | Fills itself in. | Worked out from this row's Property Ref, using Property, Money In and Money Out on Payments. The formulaIF(ISBLANK([property_ref]), "", SUMIF([Payments!property], [property_ref], [Payments!money_in]) - SUMIF([Payments!property], [property_ref], [Payments!money_out])) |
| Payments Logged | Fills itself in. | The number of rows on Payments where Property matches this row's Property Ref. The formulaIF(ISBLANK([property_ref]), "", COUNTIF([Payments!property], [property_ref])) |
Payments
10 columns
| Column | What goes in it | Worked out as |
|---|---|---|
| Date | Type a date. | |
| Property | Pick a property code from the Properties tab. A payment with no property will not count towards any property position.Pick one of the Property Ref entries on Properties. | |
| Category | Pick one: Rent, Other income, Mortgage, Insurance, Repairs, Maintenance, Letting fees, Service charge, Utilities or Other costs. | |
| Description | Type any text. | |
| Method | Pick one: Bank transfer, Standing order, Direct debit, Card, Cash or Cheque. | |
| Money In | Type an amount in £. | |
| Money Out | Type an amount in £. | |
| Net | Fills itself in. | The Money In minus the Money Out. The formulaIF(AND(ISBLANK([money_in]), ISBLANK([money_out])), "", [money_in] - [money_out]) |
| Year | Fills itself in. | Worked out from this row's Date. The formulaIF(ISBLANK([date]), "", YEAR([date])) |
| Month No | Fills itself in. | Worked out from this row's Date. The formulaIF(ISBLANK([date]), "", MONTH([date])) |
Summary
19 figures
| Figure | Worked out as |
|---|---|
| Properties on the books | The number of rows on Properties with Property Ref filled in. The formulaCOUNTA([Properties!property_ref]) |
| Properties currently let | The number of rows on Properties where Status is “Let”. The formulaCOUNTIF([Properties!status], "Let") |
| Total monthly rent expected | Adds the rent on every property, including any that are empty at the moment. The total of Monthly Rent on Properties. The formulaSUM([Properties!monthly_rent]) |
| Total monthly mortgage | The total of Monthly Mortgage on Properties. The formulaSUM([Properties!monthly_mortgage]) |
| Monthly surplus before costs | Worked out from Monthly Rent and Monthly Mortgage on Properties. The formulaSUM([Properties!monthly_rent]) - SUM([Properties!monthly_mortgage]) |
| Average monthly rent per property | The average of Monthly Rent on Properties. The formulaIFERROR(AVERAGE([Properties!monthly_rent]), 0) |
| Total money in, all time | The total of Money In on Payments. The formulaSUM([Payments!money_in]) |
| Total money out, all time | The total of Money Out on Payments. The formulaSUM([Payments!money_out]) |
| Overall position, all time | Worked out from Money In and Money Out on Payments. The formulaSUM([Payments!money_in]) - SUM([Payments!money_out]) |
| Money in this year | Worked out from Money In and Year on Payments. The formulaSUMIFS([Payments!money_in], [Payments!txn_year], YEAR(TODAY())) |
| Money out this year | Worked out from Money Out and Year on Payments. The formulaSUMIFS([Payments!money_out], [Payments!txn_year], YEAR(TODAY())) |
| Position this year | Worked out from Money In, Year and Money Out on Payments. The formulaSUMIFS([Payments!money_in], [Payments!txn_year], YEAR(TODAY())) - SUMIFS([Payments!money_out], [Payments!txn_year], YEAR(TODAY())) |
| Position this month | Worked out from Money In, Year, Month No and Money Out on Payments. The formulaSUMIFS([Payments!money_in], [Payments!txn_year], YEAR(TODAY()), [Payments!txn_month], MONTH(TODAY())) - SUMIFS([Payments!money_out], [Payments!txn_year], YEAR(TODAY()), [Payments!txn_month], MONTH(TODAY())) |
| Repairs and maintenance this year | Worked out from Money Out, Category and Year on Payments. The formulaSUMIFS([Payments!money_out], [Payments!category], "Repairs", [Payments!txn_year], YEAR(TODAY())) + SUMIFS([Payments!money_out], [Payments!category], "Maintenance", [Payments!txn_year], YEAR(TODAY())) |
| Costs as a share of money in | Worked out from Money Out and Money In on Payments. The formulaIFERROR(SUM([Payments!money_out]) / SUM([Payments!money_in]), 0) |
| Strongest property by position | Worked out from Property Ref and Position on Properties. The formulaIFERROR(INDEX([Properties!property_ref], MATCH(MAX([Properties!net_position]), [Properties!net_position], 0)), "") |
| Weakest property by position | Worked out from Property Ref and Position on Properties. The formulaIFERROR(INDEX([Properties!property_ref], MATCH(MIN([Properties!net_position]), [Properties!net_position], 0)), "") |
| Payments logged with no property | Anything counted here is missing from every property position. Fill in the property column to clear it. The number of rows on Payments where Property is “” and Date is not blank. The formulaCOUNTIFS([Payments!property], "", [Payments!date], "<>") |
| Payments logged in total | The number of rows on Payments with Net filled in. The formulaCOUNT([Payments!net]) |