Accounts Receivable Aging
Age your unpaid invoices into buckets, see what is overdue and by how far, work out days sales outstanding, and print a chase list for whoever is collecting. Runs in your browser. Nothing is uploaded.
Version 1.0.0 · Updated Aug 6, 2026
Overview
Frequently asked questions
Is the Accounts Receivable Aging really free?
Yes. The Accounts Receivable Aging is a free download with every feature included — no trial period, no locked features and no account required.
Does my data stay private when I use the Accounts Receivable Aging?
Yes. The tool is a single HTML file that runs entirely on your computer and makes no network requests, so nothing you enter is ever uploaded or shared.
Does the Accounts Receivable Aging work offline?
Yes. Once downloaded it runs completely offline in any modern browser — no internet connection, installation or plugins needed.
Do I need Excel or any other software to use the Accounts Receivable Aging?
No. It replaces the spreadsheet template entirely: open the file in your browser (Chrome, Edge, Firefox or Safari) on Windows, Mac, Linux or a tablet, and start working.
How to use Accounts Receivable Aging
The complete in-tool guidance, reproduced here so you can read it before you download.
What this tool does
CM8-53 turns a list of unpaid invoices into an aged debtor report and a chase list. You enter one line per invoice; it works out what is still owed, how far past its due date each amount is, which customers carry the balance, and who should be contacted next and why. Everything runs inside this single file — no account, no upload, no network request — which matters, because a debtor ledger names customers and says who does not pay.
It is a chasing aid, not a ledger of record. Your accounting system remains the source of truth. What this adds is the view that most accounting systems bury: the whole book on one page, ordered by how late the money is, with a suggested next action against each line.
What to enter
One row per invoice. Do not net several invoices into a single customer line — the aging is calculated per invoice, and a customer who is up to date on new invoices while sitting on an old one is exactly the pattern the buckets are meant to expose.
- Invoice number and customer — as they appear on the invoice, so anyone reading the printed report can find the document.
- Invoice date — the date the invoice was raised. This is the date the filters and the monthly chart use.
- Due date — leave it blank and the standard payment terms are applied instead.
- Invoice amount — the full amount the customer was asked to pay, on the same basis for every line. Include tax or exclude it, but do not mix the two: the totals simply add what you enter.
- Amount paid — cash actually received and allocated to this invoice.
- Status — open, part paid, paid, disputed or written off.
- Escalation stage, last chased, times chased and owner — the chasing history. Without these the chase list can only guess, and it will tell you to make first contact with somebody you rang yesterday.
Several combinations are rejected on entry, because each of them quietly produces a wrong total: an amount paid larger than the invoice, a status of "paid in full" that does not match the amount paid, an invoice dated in the future, a chase count with no chase date, and a disputed invoice with no reason recorded.
Due dates and payment terms
Aging is measured from the due date, never from the invoice date. If an invoice carries its own due date, that date is used. If it does not, the tool derives one:
Due date used = invoice date + standard payment terms (days)
Set the terms on the Settings tab. Thirty days is a common default, but nothing here assumes it — use whatever you actually agreed, and remember that terms of "net 30" and "30 days end of month" are not the same thing. Where they differ materially, put the real due date on the invoice line rather than relying on the fallback. The register shows a Due date (used) column so you can always see which date the aging was calculated from.
Terms are not a promise. Changing the terms in the settings changes the aging of every invoice that has no due date of its own. It does not change what the customer agreed to pay, and it will not stand up in a conversation with them.
Balance outstanding
The balance is what is still to be collected on that invoice:
Balance outstanding = invoice amount − amount paid
Two statuses override the arithmetic. An invoice marked paid in full carries a balance of zero, and entry rules force the amount paid to match. An invoice marked written off also carries zero, because you have decided it is not coming in — it stays visible in the register and in the monthly chart, but it is out of every outstanding figure. A negative balance is impossible here: if a customer overpaid, record the overpayment in your accounting system, because this tool holds no cash on account.
Disputed invoices still count as outstanding. The money is owed until you agree it is not, so a dispute does not reduce the balance. It is called out separately in its own tile because chasing it is wasted effort until the query is settled.
The aging buckets
Every unpaid invoice falls into one bucket, by how many days past its due date it is today:
Days overdue = today − due date used (0 if not yet due)
- Bucket — Days past the due date — What it usually means
- Current — Not yet due — Nothing to do but make sure the invoice arrived
- 1–30 days — 1 to 30 — Ordinary slippage; a reminder normally clears it
- 31–60 days — 31 to 60 — Something is wrong — a query, a missing order number, or cash
- 61–90 days — 61 to 90 — Escalate; the recovery rate falls sharply from here
- Over 90 days — 91 and beyond — Treat as at risk and decide what you are going to do
Buckets are cut on the due date rather than the invoice date. That is the convention most credit control and audit work uses, and it is the only version that behaves sensibly when different customers are on different terms. If you have seen an aged report where a 60-day-terms customer looks worse than a 7-day one for the same lateness, it was aged from the invoice date.
Overdue value and overdue share
Overdue value = sum of balances where days overdue > 0
Overdue share = overdue value ÷ total outstanding × 100
The share matters more than the total. A book of 100,000 where a tenth is late is healthy; the same book with three quarters late is a cash flow problem that has not been noticed yet. Watch the number month by month rather than judging any single reading.
The oldest debt tile reports the largest number of days past due anywhere in the filter, with the customer it belongs to. It is the single most useful early warning in the tool, because old debt rarely improves on its own.
Days sales outstanding
Days sales outstanding expresses your receivables as the number of days of sales they represent — roughly, how long it takes you to get paid. This tool uses the simple method:
Days sales outstanding = (accounts receivable ÷ credit sales for the period) × days in the period
Enter the credit sales for the period and the number of days that figure covers on the Settings tab. Use invoiced sales on the same basis as your invoice amounts, and exclude anything sold for immediate payment — cash sales never become receivables, and including them pushes the answer down for no reason.
The period has to match. Dividing a quarter's receivables by a year's sales produces a number roughly a quarter of the truth, and it looks entirely plausible. The tool therefore compares the days your sales figure covers against the span of invoice dates in the current filter, and if the two are not close it shows a dash and tells you why instead of printing a confident wrong number. You will also see a dash when no sales figure has been entered at all. A dash is not a fault: it means the figure cannot be calculated from what the tool has been given.
The other common approach is the count-back (or exhaustion) method, which works backwards from the most recent month, subtracting each month's sales from the receivables balance and counting the days consumed until the balance runs out. Count-back reacts faster to a recent change in sales and is less distorted by seasonality; the simple method is more stable and far easier to check by hand. The two give different answers from the same data, so never compare a count-back figure with a simple one. This tool does not implement count-back, because it would need monthly sales history that the tool does not hold.
Read the result against your terms, not against zero. On 30-day terms, a result in the mid-thirties is normal collection friction. A result of 60 means the average invoice is being paid a month late, whatever your customers say.
The chase list
The chase list is every overdue invoice with a balance, oldest first, with the due date, the balance, when it was last chased, how many times, who owns it, and a suggested next action. The suggestion follows a fixed order of precedence:
- Anything at the legal or agency stage is left alone — chasing in parallel undermines whoever is handling it.
- A disputed invoice goes to dispute resolution, not to a payment chase.
- A balance below the write-off review threshold and more than 90 days late is flagged for a write-off decision.
- An invoice never chased gets first contact today.
- Three or more chases with more than 60 days late means escalate or issue a final notice.
- Otherwise, chase again if the last contact was longer ago than your chase interval.
Set the chase interval and the write-off threshold on the Settings tab. The suggestion is a rule of thumb applied to what you have entered — it knows nothing about the relationship, the size of the customer or what was promised on the phone. Update the last chased date and the chase count every time you make contact, or the list degrades into noise within a fortnight.
The customer summary underneath aggregates the same filter by customer: number of invoices, total outstanding, how much of it is overdue, the overdue share, the oldest debt in days, and the most recent chase date across all of their invoices. Use it to decide who to ring; use the chase list to decide what to say.
Disputes and write-offs
A dispute is a query holding up payment, and it needs a reason recorded before the tool will accept it. That is deliberate. Undocumented disputes are how invoices sit unpaid for a year: everyone remembers there was "an issue", nobody remembers what it was, and no one owns fixing it. Write what is wrong, what the customer wants, and who is checking it.
Write-off is a decision, not a calculation. The threshold in the settings only flags small old balances for review — it never writes anything off by itself. Whether a write-off is permitted, how it is posted, whether any tax charged on the original invoice can be recovered and what evidence you need first all depend on where you are and how you are taxed. Take advice, then record the decision here so the ledger stops showing money you are never going to see.
Currency, tax and credit notes
Choose the currency on the Settings tab; it changes formatting only. Nothing is converted. Every total adds the amounts exactly as typed, so a ledger holding invoices in two currencies produces a meaningless total. Keep one copy of the tool per currency, and use the currency note field on a line as a reminder of what the original document said.
Be consistent about tax. Aged debtor reports are normally prepared on the gross amount, because gross is what the customer owes and what you are chasing. Whichever you choose, use it on every line, including the credit sales figure behind days sales outstanding.
Credit notes have no line of their own. Apply a credit note by reducing the invoice amount it relates to and noting why, or — where a credit note settles an invoice in full — mark that invoice written off with a note explaining that it was credited rather than lost. Do not enter a credit note as a negative invoice: the aging buckets and the monthly chart would both be wrong.
Printing and sharing
Print Report produces an aged debtor report from whatever the current filter shows: the header, the six headline figures, the four charts, the chase list, the customer summary, the full ledger and your closing notes. Print to PDF to circulate it.
The scope line under the title states the filter in force and the currency. Clear the filters before issuing anything described as the whole book, and check that the credit sales figure in the settings still matches the period you have filtered to — otherwise the days sales outstanding on the report is measuring something different from the rest of the page.
Saving your work
Invoices, settings and the report header are written to this browser's local storage as you type, and the toolbar shows the time of the last save. That storage belongs to one browser on one computer: another browser, a private window, a second machine or a tool that clears site data will not have it.
Treat Export .json as the real save — one file containing everything, which Import .json restores anywhere. Export CSV gives you the ledger with every derived column for spreadsheet work, and includes every record matching the filter, not only those drawn on screen. Reset asks twice, then erases everything this tool has stored. There is no undo.
Accuracy & disclaimer
This tool ages what you enter. It cannot tell whether an invoice was ever sent, whether a payment has been allocated to the right line, whether a credit note is outstanding, or whether the customer has already paid and your ledger is behind. Reconcile against your accounting system before acting on anything here, and before showing it to a customer.
Nothing in this tool is legal, tax or accounting advice. Statutory interest on late payment, permitted recovery costs, the point at which a debt becomes unenforceable, the treatment of bad debt relief and the rules on passing personal data to a collection agency all differ by country. Establish what applies to you before you rely on any of it.
Related tools
Compare equipment investments with payback, NPV and sensitivity in a single working file.
Age your supplier bills, see what is overdue, plan a payment run and value the early settlement discounts you are about to lose. Runs entirely in your browser. Nothing is uploaded.
Work out real margins per product and customer, including the costs people forget.