Close RecipesRecipesSubmitAbout

← All recipes

Weekly AR aging digest from QuickBooks Online (Make)

Every week, get a draft email with open invoices grouped by customer and aged into Current, 1-30, 31-60, 61-90, and 90+ day buckets, sorted by who owes the most.

Tested on 2026-10-16 in MakeMakeAccounts receivableAdvancedHuman check: Low
Tools
Make: QuickBooks Online, Microsoft 365 Email (Outlook)
Time saved
~1-2 hrs/month (estimate)
Difficulty
Advanced

Steps

  1. Add QuickBooks Online → 'Search for Invoices' with the query select * from Invoice where Balance > '0' MAXRESULTS 1000.
  2. Add an Array aggregator (source: the search) that collects one item per invoice: DocNumber, Customer = {{1.CustomerRef.name}}, DueDate = {{formatDate(1.DueDate; "YYYY-MM-DD")}}, Balance, and Days past due = {{round((formatDate(parseDate(formatDate(now; "YYYY-MM-DD"); "YYYY-MM-DD"); "X") - formatDate(1.DueDate; "X")) / 86400)}}.
  3. In the same aggregator, add a Bucket field with nested if() on that days value: <= 0 Current, <= 30 1-30, <= 60 31-60, <= 90 61-90, otherwise 90+. Also add a CustBucket field of customer name, a pipe, and the bucket (e.g. Acme|31-60) for the per-customer sums.
  4. Add an Iterator over the distinct customers: {{distinct(map(2.array; "Customer"))}}.
  5. Add an Array aggregator (source: that iterator) with Total = {{sum(map(2.array; "Balance"; "Customer"; 3.value))}} and one sum per bucket, e.g. {{sum(map(2.array; "Balance"; "CustBucket"; join(add(emptyarray; 3.value; "Current"); "|")))}}, repeated for 1-30, 31-60, 61-90, and 90+.
  6. Add an Iterator over the customers sorted by total, highest first: {{sort(4.array; "desc"; "Total")}}.
  7. Add a Text aggregator that builds one HTML table row per customer (name, each bucket, and total), formatting every amount as {{formatNumber(5.Total; 2; "."; ",")}}.
  8. Add Microsoft 365 Email → 'Create a Draft Email' addressed to yourself, content type HTML, subject AR aging – {{formatDate(now; "YYYY-MM-DD")}}, with bucket totals (e.g. {{formatNumber(sum(map(4.array; "cur")); 2; "."; ",")}}), the grand total {{formatNumber(sum(map(2.array; "Balance")); 2; "."; ",")}}, and the table rows. Keep it as a draft.

Tips

Tested: Tested against a QuickBooks Online sandbox company with 20 open invoices: every aging bucket, the grand total, and each customer's amounts matched QuickBooks' own A/R Aging Summary exactly; a draft was created, not sent.

Keep a human check here: Low risk

This is a draft summary to you. Compare the total against QuickBooks' A/R Aging Summary before you act on it or share it.

Steps are based on the vendor docs as of Oct 2026; verify module names in your account. Apps rename triggers and actions sometimes. Try it with test data or a sandbox company first.

Build it

Try Make. This is an affiliate link. If you sign up through it we may earn a commission at no cost to you. Disclosure

Related recipes

Get overdue invoice reminders from QuickBooks (Zapier)

Create a draft reminder email whenever a QuickBooks invoice comes due.

ZapierAccounts receivableBeginnerHuman check: Medium

Saves ~2-3 hrs/month

Record Stripe payments against Xero invoices (n8n)

When a Stripe payment succeeds, find the matching Xero invoice and log it for posting.

n8nAccounts receivableAdvancedHuman check: High

Saves ~3-6 hrs/month

Turn a signed order form into a QuickBooks invoice (Make)

When an order form comes in, find or create the customer and create an invoice.

MakeAccounts receivableIntermediateHuman check: Medium

Saves ~2-4 hrs/month


One new finance automation recipe every week

Free. Step-by-step workflows for QuickBooks, Xero, BILL, and more.

We'll ask you to confirm your email. Unsubscribe anytime.