Bill Payment Tracker
Made for households with a lot of direct debits.
A list of every regular bill, a monthly tick off log for each payment, and a summary showing what is still to pay this month. The summary carries a chart that redraws itself as you type.
- Tabs
- 3
- Columns
- 20
- Fill themselves in
- 18
£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 980 rows.
Bills
| Column | Type | Worked out as |
|---|---|---|
| Bill | text | |
| Paid To | text | |
| Amount | currency | |
| Due Day | number | |
| How It Is Paid | choice (list) | |
| Category | choice (list) | |
| Status | choice (list) | |
| Next Due | date | IF(ISBLANK([due_day]), "", IF(DATE(YEAR(TODAY()), MONTH(TODAY()), [due_day]) < TODAY(), EDATE(DATE(YEAR(TODAY()), MONTH(TODAY()), [due_day]), 1), DATE(YEAR(TODAY()), MONTH(TODAY()), [due_day]))) |
| This Month | text | IF(ISBLANK([bill_name]), "", IF([active] = "Ended", "Ended", IF(COUNTIFS([Payments!bill], [bill_name], [Payments!month_key], TEXT(TODAY(), "YYYY-MM"), [Payments!status], "Paid") > 0, "Paid", "Still to pay"))) |
| Still To Pay | currency | IF(OR(ISBLANK([bill_name]), ISBLANK([amount])), "", IF([active] = "Ended", 0, IF(COUNTIFS([Payments!bill], [bill_name], [Payments!month_key], TEXT(TODAY(), "YYYY-MM"), [Payments!status], "Paid") > 0, 0, [amount]))) |
| Cost A Year | currency | IF(ISBLANK([amount]), "", ROUND([amount] * 12, 2)) |
Payments
| Column | Type | Worked out as |
|---|---|---|
| Due Date | date | |
| Bill | choice (from Bills › bill_name) | |
| Amount | currency | |
| Status | choice (list) | |
| Date Paid | date | |
| Notes | text | |
| Month | text | IF(ISBLANK([due_date]), "", TEXT([due_date], "YYYY-MM")) |
| Days Late | number | IF(OR(ISBLANK([due_date]), ISBLANK([date_paid])), "", MAX(0, [date_paid] - [due_date])) |
| Vs Expected | currency | IF(OR(ISBLANK([bill]), ISBLANK([amount])), "", ROUND([amount] - IFERROR(INDEX([Bills!amount], MATCH([bill], [Bills!bill_name], 0)), 0), 2)) |
This Month
| Measure | Worked out as |
|---|---|
| Total monthly outgoings | SUMIF([Bills!active], "Active", [Bills!amount]) |
| Still to pay this month | SUM([Bills!outstanding_this_month]) |
| Bills still to pay | COUNTIF([Bills!paid_this_month], "Still to pay") |
| Paid so far this month | SUMIFS([Payments!amount], [Payments!month_key], TEXT(TODAY(), "YYYY-MM"), [Payments!status], "Paid") |
| Share of the month paid | IFERROR(SUMIFS([Payments!amount], [Payments!month_key], TEXT(TODAY(), "YYYY-MM"), [Payments!status], "Paid") / SUMIF([Bills!active], "Active", [Bills!amount]), 0) |
| Bills counted as missed | COUNTIF([Payments!status], "Missed") |
| Next bill due | IFERROR(MIN([Bills!next_due]), "") |
| Largest single bill | IFERROR(MAX([Bills!amount]), 0) |
| Active bills on the list | COUNTIF([Bills!active], "Active") |
| Cost over a full year | SUMIF([Bills!active], "Active", [Bills!amount]) * 12 |
| Paid last month | SUMIFS([Payments!amount], [Payments!month_key], TEXT(EDATE(TODAY(), -1), "YYYY-MM"), [Payments!status], "Paid") |






