Build a Stripe Accounts Receivable Aging Report in Google Sheets

Stripe's dashboard tells you an invoice is open. It doesn't tell you which open invoices are the ones actually worth chasing.

What an aging report is for

An accounts receivable aging report groups unpaid invoices by how overdue they are, usually into buckets like current, 1-30 days, 31-60 days, and 60-plus days past due. It turns a flat list of open invoices into a prioritized one: a customer 90 days late on a large invoice is a different problem from one three days into their payment terms.

What each invoice row needs

  • Status, filtered to invoices that are still open, not paid, void, or uncollectible.
  • The due date, which is what the aging buckets are measured against, not the invoice creation date.
  • Amount due and amount remaining, since a partially paid invoice should age on what's still outstanding, not the original total.
  • The customer, so the report can be grouped or subtotaled by who owes it.

Building the buckets

  1. For each open invoice, calculate days past due: today's date minus the due date.
  2. Bucket that figure: 0 or negative days is current, 1-30 is the first bucket, 31-60 the next, and so on, with a final catch-all for anything older.
  3. Sum the remaining amount into each bucket per customer, and add a grand total row so the overall exposure is visible at a glance.
  4. Sort by the oldest bucket with a nonzero balance first, so the invoices most worth following up on are at the top.

Where this goes wrong

Aging off the invoice creation date instead of the due date makes every customer look later than they are if your payment terms are net 30 or longer. Aging off the original invoice total instead of the remaining balance overstates exposure on anything partially paid. And a report built once and not refreshed is accurate for exactly the day it was pulled; a customer who paid yesterday still shows as 45 days overdue today unless the sheet is kept current.

Aging invoices vs. reconciling payouts

An aging report tracks what customers still owe. It's a different question from tying a payout to the transactions behind it. See how to reconcile Stripe payouts in Google Sheets for that case, or how to build a Stripe MRR report in Google Sheets for a recurring-revenue view of the same subscriber base.

Keep the invoice data current automatically

Stripe Exporter's invoices report includes status, due date, amount due, and amount remaining, refreshed manually, hourly, daily, or weekly, so an aging report built on top of it reflects what's actually still owed. It's built by Cody Labs and is not affiliated with Stripe.

See Stripe Exporter