Most freelancers start with invoices scattered across email, a notes app and a bank statement. That works until you have five clients and can't say who has paid. A simple freelancer invoice tracker in Excel fixes that: one list of clients, one list of projects, one log of invoices, and a summary that shows what's outstanding. This guide builds one step by step.
Note: this covers spreadsheet layout and formulas only. How you charge tax, what an invoice must show and how you report income depend on where you live. It is not tax or legal advice.
Step 1: A Clients sheet
Make a sheet called Clients with these columns:
| Col | Field |
|---|---|
| A | Client name |
| B | Contact person |
| C | |
| D | Payment terms (days), e.g. 15 or 30
|
| E | Currency |
| F | Notes |
Select the range and press Ctrl+T to make it an Excel Table, then name it tblClients under Table Design > Table Name. Tables grow on their own, so new clients appear in dropdowns without editing ranges.
Keep one row per client. If the same client appears as "Acme" and "Acme Pvt Ltd", your totals will split, so pick one spelling and stick to it.
Step 2: A Projects sheet
On a Projects sheet:
| Col | Field |
|---|---|
| A | Project ID, e.g. P-001
|
| B | Client (dropdown) |
| C | Project name |
| D | Billing type: Fixed or Hourly
|
| E | Rate or fixed fee |
| F | Start date |
| G | Status: Active, Paused, Done
|
For the Client dropdown, select column B and use Data > Data Validation > List with the source =INDIRECT("tblClients[Client name]"). Do the same for Status with a typed list: Active,Paused,Done.
Make this a Table too (tblProjects).
Step 3: An optional Time Log
If you bill by the hour, add a TimeLog sheet: A = date, B = project ID, C = hours, D = description. Then on the Projects sheet add column H, Hours logged:
=SUMIFS(tblTime[Hours],tblTime[Project ID],[@[Project ID]])
And column I, Billable so far:
=IF([@[Billing type]]="Hourly",[@Hours logged]*[@Rate],[@Rate])
Now each hourly project shows what you could invoice today.
Step 4: The Invoices log
This is the core of the tracker. Make an Invoices sheet:
| Col | Field |
|---|---|
| A | Invoice no. |
| B | Invoice date |
| C | Client (dropdown) |
| D | Project ID |
| E | Amount |
| F | Due date |
| G | Amount paid |
| H | Paid date |
| I | Balance |
| J | Status |
| K | Days overdue |
Fill the due date from the client's payment terms:
F2: =IF(B2="","",B2+IFERROR(INDEX(tblClients[Payment terms (days)],MATCH(C2,tblClients[Client name],0)),30))
If the client isn't found, it falls back to 30 days.
Balance:
I2: =IF(E2="","",E2-N(G2))
Status:
J2: =IF(E2="","",IF(I2<=0,"Paid",IF(TODAY()>F2,"Overdue",IF(N(G2)>0,"Part-paid","Open"))))
Days overdue:
K2: =IF(J2="Overdue",TODAY()-F2,"")
Turn it into a Table (tblInvoices) so these formulas fill down automatically for every new row.
Step 5: Highlight what needs chasing
Select the Status column and add Home > Conditional Formatting > Highlight Cells Rules > Text that Contains:
-
Overdue→ light red fill -
Part-paid→ light yellow fill -
Paid→ light green fill
For a stronger signal, select the whole table and add a formula rule =$K2>30 with bold red text. Anything more than a month late jumps out.
Step 6: A one-glance Summary sheet
Make a Summary sheet with a client list in column A (you can type it, or in Excel 365/2021 use =SORT(UNIQUE(tblInvoices[Client]))). Then:
B2 (Invoiced): =SUMIFS(tblInvoices[Amount],tblInvoices[Client],A2)
C2 (Received): =SUMIFS(tblInvoices[Amount paid],tblInvoices[Client],A2)
D2 (Outstanding): =B2-C2
E2 (Overdue): =SUMIFS(tblInvoices[Balance],tblInvoices[Client],A2,tblInvoices[Status],"Overdue")
Above the table, add three headline numbers:
Total outstanding: =SUM(tblInvoices[Balance])
Overdue invoices: =COUNTIF(tblInvoices[Status],"Overdue")
Paid this month: =SUMIFS(tblInvoices[Amount paid],tblInvoices[Paid date],">="&EOMONTH(TODAY(),-1)+1,tblInvoices[Paid date],"<="&EOMONTH(TODAY(),0))
UNIQUE and SORT need Excel 365 or Excel 2021. The other formulas work in older desktop versions too.
Step 7: A weekly 10-minute routine
The tracker only helps if it stays current. A simple habit:
- Every time you send an invoice, add a row to Invoices straight away.
- Every time money lands, fill in Amount paid and Paid date.
-
Once a week, filter Status to
Overdueand send a polite reminder to each client on the list. - Once a month, check the Summary sheet for clients who are slow to pay, and consider shorter terms or an advance for their next project.
Common mistakes
- Typing client names by hand. Use the dropdown so the SUMIFS totals match.
- Overwriting formulas. Lock the Balance, Status and Days overdue columns with Review > Protect Sheet, leaving the input columns unlocked.
- Mixing currencies in one total. If you bill in more than one currency, add a converted-amount column or keep a separate summary per currency.
- Deleting paid invoices. Keep them. Your paid history is what tells you which clients are reliable.
Wrapping up
With four sheets (Clients, Projects, Invoices and Summary) you get a freelancer invoice tracker that shows who owes you, how late they are, and what came in this month, without any paid software. Start with the Invoices log alone if that's all you need, and add the rest as your client list grows.
This article was drafted with AI tools. It's general spreadsheet guidance for Excel, not tax or legal advice.
Top comments (0)