Freelance invoice tracker & aging spreadsheet
By Nydaymuse · Updated
What should a freelance invoice tracker include?
Use one row per invoice with its ID, client, issue date, due date, amount, currency, payments received, and remaining balance. Calculate days overdue from the due date for open invoices, then group the remaining balances into aging buckets. Keep totals separate by currency and record the next follow-up for each unpaid invoice.
A freelance invoice spreadsheet is not a tax filing. It is a living list of what you billed, what is open, and what is late — so you can answer “what hits my account this week?” without opening seventeen email threads.
You can build one from scratch in any sheet app. Or you can use a ready workbook like Ops ($12) that also holds client context. Either way, the structure below is what stops aging from becoming a surprise.
Minimum columns (do not skip these)
| Column | Why it exists |
|---|---|
| Invoice ID | Unique reference for email and bank notes. |
| Client | Who owes you — filter and sort by relationship. |
| Issue date | When you sent it; keep separate from the due date used for overdue aging. |
| Due date | Contractual deadline — aging starts here. |
| Amount / currency | Exact number; avoid mixing currencies in one total. |
| Payments received | Total received against this invoice, including partial payments. |
| Open balance | Invoice amount less payments received; use this balance in overdue totals. |
| Status | Draft / Sent / Partial / Paid / Written off. |
| Paid date | Closes the loop; feeds cash timing. |
| Days overdue | For an open, issued invoice: the greater of zero and today minus due date. |
Optional but useful: project name, payment method, PO number, late-fee flag, and a “last chased” date so you know when you last sent a reminder.
Aging buckets freelancers actually use
Choose non-overlapping buckets that help you plan follow-ups. This example uses short windows; it is a suggested tracker layout, not a description of every Ops workbook or Aging Lite bucket:
- Current — due today or later
- 1–7 days — first reminder window
- 8–14 days — second nudge
- 15–30 days — review replies and request a payment date
- 31+ days — review unresolved balances and billing contacts
Sum open amounts by bucket on a dashboard row. That single view is cash clarity: not “I think they will pay,” but “$X is 15+ days late.”
Worked example: aging a partial payment
Suppose a $900 invoice was due on June 10 and the client has paid $300. On June 20, its open balance is $600 and it is 10 days overdue. Put $600 in the 8–14 day bucket, keep $300 in payments received, and leave the invoice status as Partial. A second invoice due June 25 belongs in Current on that same review date.
Exclude drafts and closed invoices from the open aging view. If a due date is missing, flag the row for review instead of treating it as current or calculating from an empty cell.
Habit: Update status the same day money lands. A tracker that is three days stale is how late invoices hide.
Cash view vs invoice list
An invoice list answers “what is unpaid?” A cash view answers “what is likely to arrive, and when?” You get there by combining:
- Open invoices sorted by due date
- Expected pay week (or “unknown”)
- Known client behavior (always 10 days late vs usually on time)
Client behavior belongs next to the money — not in a separate notebook you never open. That is why Ops pairs a money sheet with a client sheet instead of leaving notes buried in chat.
DIY checklist (one evening)
- Create one “Invoices” tab with the columns above.
- Add a “Status” dropdown so filters stay clean.
- Add
Days overdueas a formula, not a manual number. - Add a summary block: total open, total 15+, total paid this month.
- Create a “Clients” tab: rate, terms (net-15/30), preferred payment link, notes.
- Every Friday: filter unpaid, send reminders, update “last chased.”
For reminder wording, see late payment email templates for freelancers or free Nudge (8-page PDF + subject swipe file). To prepare an invoice, free Slip provides a one-page Excel/Sheets layout plus an offline HTML lite version for Print / Save as PDF.
When a ready workbook is worth $12
Build your own if you enjoy sheet design and will maintain it. Buy a workbook if you have already lost a weekend to formatting and still do not trust the totals. Ops is a one-time download — freelance money & client workbook — aimed at solo operators who want aging and client context without SaaS lock-in. Same $12 SKU: the ZIP now also includes an overdue lite HTML tool with CSV import and Print for quick chase lists.
Ops date-validation update: October 13, 2026
The current Ops ZIP flags missing or invalid dates as Check date. An affected unpaid invoice keeps its outstanding balance but does not enter overdue or aging totals until its date is corrected. In the workbook, enter a real spreadsheet date in Overdue!U8 for a fixed As-of date, or select Use today in W8. A visible date warning means overdue totals are incomplete.
The included HTML companion rejects impossible calendar dates on CSV import rather than silently shifting them into another month. Its CSV imports client, amount, due and optional invoice number; set Paid manually. Use the workbook for Amount paid and partial-payment balances.
Read README.md first for formula-preserving sample clearing, the prepared 70 invoice rows, date checks and original-PDF limitations. Workbook formulas were checked by native LibreOffice recalculation. HTML date and aging logic was tested under Node with a lightweight DOM stub. Native Excel, Google Sheets, real-browser interaction, Save/Load and end-to-end printing were not tested for this release. Validate a copy before using real records.
Ops — freelance money & client workbook
$12 on Gumroad. Invoice aging, cash-oriented layout, client sheet — plus overdue lite HTML (CSV import + Print) in the ZIP. Also listed on LaunchFree and Spotlitely.
Also: LaunchFree Spotlitely
Invoice tracker questions
Should invoice aging start from the issue date or due date?
For the overdue view in this guide, use the due date. An invoice issued on June 1 and due on June 15 is not overdue on June 10. Keep the issue date as a separate field so the two measures are not confused.
How do partial payments affect overdue totals?
Subtract recorded payments from the original invoice amount and age the remaining balance. A $900 invoice with $300 received contributes $600 to the open balance, not $900. Keep payment dates and references so you can reconcile the record.
Can I combine invoices in different currencies in one total?
Keep separate totals by currency in a basic tracker. Adding 500 USD to 500 EUR and displaying 1,000 without a currency label does not describe a usable balance.