Skip to main content
Tools

Free receivables tool

AR aging report

List each unpaid invoice with its due date and the balance still owed on your report date, then see exactly how much each customer owes in the current, 1–30, 31–60, 61–90 and 91+ day buckets.

Invoices stay in this tab. Nothing you type is saved, added to the URL or sent anywhere.

Report snapshot

Enter each balance as it stood on the report date, after the payments and credits applied through that date. Changing the report date re-ages the same balances; it does not work out what had been paid on an earlier date.

Ages count calendar days from each due date to this date. Due on or after it is Current.

Three-letter code such as USD or EUR. One currency per report.

Invoices

One entry per invoice. Customers are grouped by customer ID, never by name. Enter 0 for a paid invoice: it stays listed but is left out of the open totals. Credits and overpayments (negative balances) are not supported.

  1. Invoice 1

Import from a CSV file

Bring in an invoice list saved from a spreadsheet in this page's template. The whole file is checked before anything on the page changes.

Nothing changes until you review the file and choose Apply. The file never leaves this browser tab.

CSV template

The first line must be exactly:

ar_aging_v1,as_of,currency,customer_id,customer_name,invoice_id,invoice_date,due_date,balance

Then one line per invoice, starting with the word invoice and repeating the same report date and currency. Dates are YYYY-MM-DD. Balances are plain numbers with a dot for decimals and no thousands separators, such as 1250.00; enter 0 for a settled invoice.

invoice,2026-09-28,USD,C-100,Northwind Studio,INV-1041,2026-08-29,2026-09-28,1250.00
invoice,2026-09-28,USD,C-300,Maple Dental,INV-1033,2026-08-20,2026-09-19,0.00

A file may also end with the columns days_past_due, bucket. Their values are ignored: ages and buckets are always recalculated from the dates.

Text starting with =, +, - or @ is saved with a leading apostrophe so spreadsheets show it as text. Import removes that apostrophe again.

Up to 500 invoices and 1,024 KB per file.

Aging summary

Enter a report date, a currency and at least one invoice to see the aging summary.

Print or export

Print the report exactly as summarized here, or download one CSV row per invoice with its days past due and age bucket. The CSV imports back into this tool.

Enter a report date, a currency and valid invoices before printing or downloading. An incomplete report cannot be exported.

AR aging report questions

How are the aging buckets calculated?

Each invoice's age is the number of calendar days from its due date to the report date. An invoice due on or after the report date is Current; the rest fall into 1–30, 31–60, 61–90 or 91+ days past due. Balances are added up exactly per bucket and per customer, so the rows always sum to the total.

Which balance should I enter for each invoice?

The amount still owed on the report date, after the payments and credits applied up to that date. The tool does not know your payment history, so moving the report date re-ages the same balances rather than recalculating what was owed back then.

What about credit memos and overpayments?

A negative balance is rejected instead of being netted against other invoices, because an unapplied credit is not an aged receivable. Apply the credit to the invoice it settles, or track it separately. Enter 0 for a fully paid invoice to keep it listed without counting it.

Is my invoice data saved or uploaded?

No. The report exists only in this browser tab and is gone when you close it. Nothing is saved, put in the page address or sent to a server.

Age receivables straight from your books

Beancount.io keeps every invoice and payment in a plain-text ledger, so open balances by customer are always one query away.