Home Renovation Budget
Made for anyone doing up a house.
Plan a budget for every job room by room, record what you actually pay and to whom, and see at a glance what is left and which rooms have run over. The summary carries a chart that redraws itself as you type.
- Tabs
- 4
- Columns
- 31
- Fill themselves in
- 23
£7one 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.
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 940 rows.
Rooms
| Column | Type | Worked out as |
|---|---|---|
| Room | text | |
| Floor | choice (list) | |
| Priority | choice (list) | |
| Target Finish | date | |
| Budgeted | currency | IF(ISBLANK([room_name]), "", SUMIF([Jobs!room], [room_name], [Jobs!budget])) |
| Spent | currency | IF(ISBLANK([room_name]), "", SUMIF([Payments!room], [room_name], [Payments!amount])) |
| Left | currency | IF(ISBLANK([room_name]), "", SUMIF([Jobs!room], [room_name], [Jobs!budget]) - SUMIF([Payments!room], [room_name], [Payments!amount])) |
| Budget Used | percent | IF(ISBLANK([room_name]), "", IFERROR(SUMIF([Payments!room], [room_name], [Payments!amount]) / SUMIF([Jobs!room], [room_name], [Jobs!budget]), 0)) |
| Over By | currency | IF(ISBLANK([room_name]), "", MAX(0, SUMIF([Payments!room], [room_name], [Payments!amount]) - SUMIF([Jobs!room], [room_name], [Jobs!budget]))) |
| Status | text | IF(ISBLANK([room_name]), "", IF(SUMIF([Payments!room], [room_name], [Payments!amount]) > SUMIF([Jobs!room], [room_name], [Jobs!budget]), "Over budget", "Within budget")) |
Jobs
| Column | Type | Worked out as |
|---|---|---|
| Job | text | |
| Room | choice (from Rooms › room_name) | |
| Category | choice (list) | |
| Contractor | text | |
| Budgeted | currency | |
| Stage | choice (list) | |
| Due | date | |
| Spent | currency | IF(ISBLANK([job_name]), "", SUMIF([Payments!job], [job_name], [Payments!amount])) |
| Left | currency | IF(OR(ISBLANK([job_name]), ISBLANK([budget])), "", [budget] - SUMIF([Payments!job], [job_name], [Payments!amount])) |
| Budget Used | percent | IF(OR(ISBLANK([job_name]), ISBLANK([budget])), "", IFERROR(SUMIF([Payments!job], [job_name], [Payments!amount]) / [budget], 0)) |
| Budget Status | text | IF(OR(ISBLANK([job_name]), ISBLANK([budget])), "", IF(SUMIF([Payments!job], [job_name], [Payments!amount]) > [budget], "Over", IF(SUMIF([Payments!job], [job_name], [Payments!amount]) = [budget], "On budget", "Within"))) |
Payments
| Column | Type |
|---|---|
| Date Paid | date |
| Paid To | text |
| Room | choice (from Rooms › room_name) |
| Job | choice (from Jobs › job_name) |
| Category | choice (list) |
| Amount | currency |
| Method | choice (list) |
| Invoice Ref | text |
| Deposit | bool |
| Notes | text |
Budget Summary
| Measure | Worked out as |
|---|---|
| Total budget | SUM([Jobs!budget]) |
| Total spent so far | SUM([Payments!amount]) |
| Budget left | SUM([Jobs!budget]) - SUM([Payments!amount]) |
| Share of budget spent | IFERROR(SUM([Payments!amount]) / SUM([Jobs!budget]), 0) |
| Rooms over budget | COUNTIF([Rooms!status], "Over budget") |
| Jobs over budget | COUNTIF([Jobs!budget_status], "Over") |
| Total overspend across rooms | SUM([Rooms!over_by]) |
| Worst room for overspend | IF(MAX([Rooms!over_by]) = 0, "None yet", IFERROR(INDEX([Rooms!room_name], MATCH(MAX([Rooms!over_by]), [Rooms!over_by], 0)), "None yet")) |
| Spent in the last 30 days | SUMIFS([Payments!amount], [Payments!paid_on], ">=" & (TODAY() - 30)) |
| Payments recorded | COUNT([Payments!amount]) |
| Largest single payment | IFERROR(MAX([Payments!amount]), 0) |
| Spending not matched to a job | SUM([Payments!amount]) - SUMIF([Payments!job], "<>", [Payments!amount]) |
| Jobs still to start | COUNTIF([Jobs!stage], "Not started") |






