Templates › Business and freelance
Freelance Invoice & VAT Tracker
Made for freelancers and sole traders who invoice and are VAT registered.
Tracks every invoice sent, what is outstanding, what is overdue, and how much VAT is due this quarter, with a reusable client list. The summary carries a chart that redraws itself as you type.
- Tabs
- 3
- Columns
- 25
- Fill themselves in
- 22
£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 460 rows.
Clients
| Column | Type | Worked out as |
|---|---|---|
| Client | text | |
| Contact | text | |
| text | ||
| Payment Terms (Days) | number | |
| Day Rate | currency | |
| Status | choice (list) | |
| Total Invoiced (Net) | currency | IF(ISBLANK([client_name]), "", SUMIF([Invoices!client], [client_name], [Invoices!net])) |
| Outstanding | currency | IF(ISBLANK([client_name]), "", SUMIFS([Invoices!gross_amount], [Invoices!client], [client_name], [Invoices!payment_status], "Unpaid") + SUMIFS([Invoices!gross_amount], [Invoices!client], [client_name], [Invoices!payment_status], "Part Paid")) |
| Notes | text |
Invoices
| Column | Type | Worked out as |
|---|---|---|
| Invoice No | text | |
| Invoice Date | date | |
| Client | choice (from Clients › client_name) | |
| Work Description | text | |
| Category | choice (list) | |
| Net Amount | currency | |
| VAT Rate | percent | |
| VAT | currency | IF(ISBLANK([net]), "", ROUND([net] * [vat_rate], 2)) |
| Gross Total | currency | IF(ISBLANK([net]), "", ROUND([net] + [net] * [vat_rate], 2)) |
| Due Date | date | IF(ISBLANK([invoice_date]), "", [invoice_date] + IFERROR(INDEX([Clients!payment_terms_days], MATCH([client], [Clients!client_name], 0)), 30)) |
| Status | choice (list) | |
| Date Paid | date | |
| Amount Received | currency | |
| Balance Due | currency | IF(ISBLANK([net]), "", IF([payment_status] = "Written Off", 0, ROUND([net] + [net] * [vat_rate] - IF(ISBLANK([amount_received]), 0, [amount_received]), 2))) |
| Days Overdue | number | IF(ISBLANK([invoice_date]), "", IF(OR([payment_status] = "Paid", [payment_status] = "Written Off"), 0, MAX(0, TODAY() - ([invoice_date] + IFERROR(INDEX([Clients!payment_terms_days], MATCH([client], [Clients!client_name], 0)), 30))))) |
| VAT Quarter | text | IF(ISBLANK([invoice_date]), "", YEAR([invoice_date]) & " Q" & ROUNDUP(MONTH([invoice_date]) / 3, 0)) |
Summary
| Measure | Worked out as |
|---|---|
| Invoices raised (all time) | COUNTA([Invoices!invoice_no]) |
| Total invoiced this year (net) | SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q1", [Invoices!net]) + SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q2", [Invoices!net]) + SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q3", [Invoices!net]) + SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q4", [Invoices!net]) |
| Total received (all time) | SUM([Invoices!amount_received]) |
| Outstanding balance (gross) | SUM([Invoices!balance_due]) |
| Unpaid invoices | COUNTIF([Invoices!payment_status], "Unpaid") + COUNTIF([Invoices!payment_status], "Part Paid") |
| Overdue invoices | COUNTIF([Invoices!days_overdue], ">0") |
| Overdue amount (gross) | SUMIF([Invoices!days_overdue], ">0", [Invoices!balance_due]) |
| Worst overdue (days) | IFERROR(MAX([Invoices!days_overdue]), 0) |
| Current VAT quarter | YEAR(TODAY()) & " Q" & ROUNDUP(MONTH(TODAY()) / 3, 0) |
| VAT charged this quarter | SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q" & ROUNDUP(MONTH(TODAY()) / 3, 0), [Invoices!vat_amount]) |
| VAT on payments received this quarter | SUMIFS([Invoices!vat_amount], [Invoices!date_paid], ">=" & DATE(YEAR(TODAY()), (ROUNDUP(MONTH(TODAY()) / 3, 0) - 1) * 3 + 1, 1), [Invoices!date_paid], "<=" & TODAY(), [Invoices!payment_status], "Paid") |
| Net invoiced this quarter | SUMIF([Invoices!quarter], YEAR(TODAY()) & " Q" & ROUNDUP(MONTH(TODAY()) / 3, 0), [Invoices!net]) |
| Average invoice value (net) | IFERROR(SUM([Invoices!net]) / COUNT([Invoices!net]), 0) |
| Active clients | COUNTIF([Clients!status], "Active") |






