Home / Sheets questions cookbook / Accounts receivable aging
Google Sheets · Question cookbook

How to Build an Accounts Receivable Aging Report in Google Sheets

Who owes you, and how late they are: unpaid invoices sorted into the usual buckets, with a count and amount for each.

By · Published November 8, 2026

The short answer: add a days-past-due column, =IF(F2<>"", "", $I$1-D2), then total each bucket with SUMIFS. In the sample data, $222,876 was unpaid on October 31, 2026, and $92,840 of it was past due.

The sample data

ABCDEF
1InvoiceCustomerInvoice dateDue dateAmountPaid date
2INV-26001Tin Roof Kitchen2026-01-012026-01-312882026-01-30
3INV-26002Corner Coffee House2026-01-012026-01-3116062026-01-19
4INV-26003Corner Coffee House2026-01-012026-01-3111442026-02-02
5INV-26004Foxglove Café2026-01-012026-01-311922026-02-03
6INV-26005Mill Pond Bistro2026-01-012026-01-3112402026-03-16
…2,089 more rows
Invoices

Sample data: a tab named Invoices with 2,094 invoices issued in 2026 on Net 30 terms, as of October 31, 2026, one row per invoice. Paid date is blank while the invoice is unpaid. Download invoices.csv and import it (File → Import) to follow along. The business is fictional.

The classic way: a days-past-due column, then SUMIFS by bucket

The Invoices tab has Invoice (A), Customer (B), Invoice date (C), Due date (D), Amount (E) and Paid date (F, blank while unpaid). Put the as-of date in I1: =DATE(2026,10,31), or =TODAY() for a live report.

Type Days past due in G1 and, in G2 copied down, the days since the due date for unpaid invoices only:

=IF(OR(A2="", F2<>""), "", $I$1-D2)

Zero or negative means not yet due. Now on a summary tab, one row per bucket. Count and amount for each:

Current:      =COUNTIFS(Invoices!$G:$G, "<=0")                         =SUMIFS(Invoices!$E:$E, Invoices!$G:$G, "<=0")
1-30 days:    =COUNTIFS(Invoices!$G:$G, ">=1", Invoices!$G:$G, "<=30")    =SUMIFS(Invoices!$E:$E, Invoices!$G:$G, ">=1", Invoices!$G:$G, "<=30")
31-60 days:   =COUNTIFS(Invoices!$G:$G, ">=31", Invoices!$G:$G, "<=60")   =SUMIFS(Invoices!$E:$E, Invoices!$G:$G, ">=31", Invoices!$G:$G, "<=60")
61-90 days:   =COUNTIFS(Invoices!$G:$G, ">=61", Invoices!$G:$G, "<=90")   =SUMIFS(Invoices!$E:$E, Invoices!$G:$G, ">=61", Invoices!$G:$G, "<=90")
Over 90 days: =COUNTIFS(Invoices!$G:$G, ">90")                          =SUMIFS(Invoices!$E:$E, Invoices!$G:$G, ">90")

Paid invoices have a blank in G, and the number conditions skip blanks and the heading, so only unpaid invoices are counted. The Total open row sums both columns.

Example on sample data
fx=SUMIFS(Invoices!$E:$E, Invoices!$G:$G, ">=1", Invoices!$G:$G, "<=30")
ABC
1BucketInvoicesAmount
2Current210$130,036
31-30 days67$42,298
431-60 days31$20,834
561-90 days12$8,608
6Over 90 days37$21,100
7Total open357$222,876
SummaryInvoices

Computed from the sample CSV above. Cells formatted as currency and percent.

Who is in the over-90 bucket? =QUERY(Invoices!A:G, "select B, count(A), sum(E) where G > 90 group by B order by sum(E) desc label count(A) 'Invoices', sum(E) 'Amount'", 1) lists the customers behind the oldest debt, worst first. That list is the collections call sheet.

Gotchas

The one-cell way: =QUIRIZ

With the Quiriz add-on for Google Sheets, you type the question instead of building the formula. =QUIRIZ does not read the cells around it: it answers from the datasets in your Quiriz account. For this example, upload invoices.csv as a dataset, or connect QuickBooks. You can also add a Google Sheet itself as a dataset that refreshes on a schedule. Then, in any empty cell:

=QUIRIZ("unpaid invoices by aging bucket as of October 31, 2026, by days past the due date: current, 1-30, 31-60, 61-90 and over 90 days, with invoice count and amount and a total row", "table")

The "table" mode spills the answer down and to the right from that cell, header row first:

Example on sample data
fx=QUIRIZ("unpaid invoices by aging bucket as of October 31, 2026, by days past the due date: current, 1-30, 31-60, 61-90 and over 90 days, with invoice count and amount and a total row", "table")
ABC
1BucketInvoicesAmount
2Current210$130,036
31-30 days67$42,298
431-60 days31$20,834
561-90 days12$8,608
6Over 90 days37$21,100
7Total open357$222,876
Sheet1

Same figures as the formula result above, from the same sample data. The spilled cells are plain numbers, so you can format them, total them or chart them; here they are formatted as currency and percent. Column headings are written with each answer and may be worded differently.

Want one number instead of a table? The "short" mode returns a single value you can format and point other formulas at:

=QUIRIZ("total past-due receivables as of October 31, 2026", "short")
Example on sample data
fx=QUIRIZ("total past-due receivables as of October 31, 2026", "short")
A
192840

The cell holds 92840; formatted as currency it reads $92,840.

The other modes: "verbose" (the default) answers in a sentence, "bullets" writes two to four points one per cell, and "notes" adds how the figure was calculated. Install Quiriz for Google Sheets and try the question on your own data.

Ask the question, get the table

Quiriz answers business questions in a Google Sheets cell, from your imported files, scheduled Google Sheets and connected tools. Free to start.

Install for Google Sheets →

Free on the Google Workspace Marketplace. Or try it on sample data first, no signup.

Frequently asked questions

How do I calculate days past due in Google Sheets?
Subtract the due date from today: =TODAY()-D2. Wrap it so paid invoices stay blank: =IF(F2<>"", "", TODAY()-D2). Zero or negative means the invoice is not due yet.
What are the standard AR aging buckets?
Current (not yet due), 1-30, 31-60, 61-90 and over 90 days past due. Some businesses age from the invoice date instead; use whichever your accounting system uses so the totals reconcile.
How do I list the customers with overdue invoices?
Use QUERY on the invoices with a days-past-due column: =QUERY(Invoices!A:G, "select B, sum(E) where G > 0 group by B order by sum(E) desc", 1).