Accounts receivable for Shopify wholesale: tracking AR aging and DSO

If you offer net terms, you have accounts receivable: the money your wholesale customers owe you but haven’t paid yet. Managing receivables well is the difference between terms being a growth lever and terms being a slow leak. And the first thing most Shopify wholesale merchants discover is that Shopify won’t show them their receivables in any useful, aggregated way.

This guide explains what to track, how to read an aging report, how to calculate DSO, and how to actually see it all for a Shopify B2B business.

Where your AR lives in Shopify, and what an aging view adds

Shopify tracks payment status on each individual order: you can open an order and see whether it’s paid, pending, or partially refunded. What it doesn’t do for B2B is aggregate. There’s no native report that says “Acme Wholesale owes you $14,200 across five invoices, two of which are more than 30 days overdue.” The data exists, scattered across orders; the view doesn’t.

For a handful of accounts you can reconstruct it by hand. Past a dozen, you need a real accounts-receivable view: either a disciplined spreadsheet you update religiously, or an app that computes it from your order data automatically.

The AR aging report

The core tool of receivables management is the aging report. It takes every open (unpaid) invoice and sorts it into buckets by how overdue it is:

BucketMeaning
CurrentNot yet due
1–30 daysRecently overdue: usually just slow, worth a nudge
31–60 daysOverdue enough to act on
61–90 daysSerious: tighten this account
90+ daysAt real risk of becoming a write-off

Read left to right, the report tells you how healthy your book is. Money concentrated in Current and 1–30 is normal. Money drifting into 61–90 and 90+ is your early-warning system: those balances rarely improve on their own, and they’re where you focus collection effort before they turn into bad debt.

The aging view also tells you which accounts are the problem, not just the total. One customer sitting in the 90+ bucket is a specific conversation; a general “receivables are up” number isn’t actionable.

The aging report by company, and the outstanding-orders report

The dashboard is the live picture. When someone needs the document instead, your accountant at month end, a bank, a partner who asked where your receivables stand, Quay has two reports under Reports in its navigation. Both take the same date control as a statement, Balance on a date: Today, End of last month, or any custom date since your first B2B order.

Aging summary by company is the table above turned into rows: one row per company, the five buckets across, and in each bucket the amount and how many orders sit in it. A company with $7,800 in the 61–90 bucket from one order is a different conversation from one with the same amount spread over nine.

Outstanding orders by company is the detail behind it: every order that still carries a balance, grouped under its company with a subtotal, so a question about one order is answered without a spreadsheet.

An order a buyer overpaid appears in both reports with its balance below zero (on the aging summary it sits in the current bucket), so their totals can come out lower than what buyers owe you. A line under each total says how much the overpayments lower it. The dashboard counts only what buyers owe, which is why the two can differ. If buyers owe you in more than one currency, the reports keep a section per currency, while the dashboard’s totals add every currency into one figure (credit limits in multiple currencies).

Both are on screen the moment you open them, and come three ways from there: Print, Download PDF (the table is laid out on a landscape page), and Download CSV for your own spreadsheet. The difference from the dashboard is the date: the dashboard always shows now, a report shows the picture as at the date you chose, so the report you print on the 3rd for the 31st shows the balances as they stood on the 31st.

If it is the buyer who asks for their side of the same numbers, that is a statement of account, one per company, covered in B2B account statements on Shopify.

DSO: your collection speed in one number

Where the aging report shows structure, Days Sales Outstanding (DSO) shows trend. DSO is the average number of days it takes you to collect after a sale:

DSO = (Accounts Receivable ÷ Total Credit Sales) × Days in Period

Example: $50,000 in receivables against $200,000 of credit sales over a 90-day quarter gives (50,000 ÷ 200,000) × 90 = 22.5 days. On Net 30 terms, a DSO of 22.5 is excellent: you’re collecting before the average due date. A DSO of 45 on Net 30 means, on average, customers are paying two weeks late, and your cash is tied up longer than your terms intend.

Track DSO over time. The absolute number matters less than the direction: a rising DSO means collections are slipping and it’s time to tighten limits or handling before it hits cash flow.

How to track AR for Shopify B2B

The spreadsheet route. Export orders, mark which are paid, calculate due dates from each company’s terms, and bucket the unpaid ones by age. It’s free and it works, but it’s only as current as your last manual update, and it drifts the moment you get busy, which is exactly when you most need it accurate.

The automated route. Quay builds an AR aging dashboard from your live Shopify order and refund data: what you’re owed, what’s overdue and what’s due in the next 7 days, the aging buckets and your top debtors, with each company’s balance on the companies list, recalculated as orders and payments come in. Quay doesn’t show DSO; work it out with the formula above. The dashboard reads the same orders, payments and refunds that enforcement acts on.

From seeing to acting

An aging report is diagnostic; the point is to do something with it. This is where receivables tie back to credit limits and checkout enforcement. The aging state of an account is the strongest signal for how firmly to treat it:

Quay automates that escalation using the aging it computes, so an account that slides from healthy to 60-days-overdue is handled by a policy you set once, not by you remembering to check. Seeing your receivables is step one; the value is in what happens next.

Frequently asked questions

Does Shopify have an accounts-receivable or AR aging report?

Not for B2B net terms. Shopify shows a payment status on each individual order, but there is no native report that aggregates unpaid invoices by company and groups them by how overdue they are. You either build that view in a spreadsheet or use an app that computes it.

What is an AR aging report?

An accounts-receivable aging report lists every unpaid invoice grouped into buckets by age: current (not yet due), 1–30 days overdue, 31–60, 61–90, and 90+. It tells you at a glance who owes you, how much, and how late, which is the earliest signal that an account is going bad.

How do I calculate DSO for my Shopify wholesale business?

Days Sales Outstanding = (accounts receivable ÷ total credit sales) × number of days in the period. If you have $50,000 in receivables and $200,000 in credit sales over 90 days, DSO = (50,000 ÷ 200,000) × 90 = 22.5 days. Lower is better; a rising DSO means you're collecting more slowly.

How does AR aging connect to blocking checkout?

Overdue balances are the strongest trigger for enforcement. An account that is simply over its limit this week is usually a soft case (pay on order, though a policy can also block over-limit orders outright); an account that is 60 days overdue is a hard case. Quay uses the aging state to escalate a company from monitored, to pay-on-order, to a checkout-blocking hold.

Can I export the aging report?

Yes. Open Reports, choose Aging summary by company and a date, and use Download PDF for a landscape PDF or Download CSV for the rows. The same two buttons, and Print, are on Outstanding orders by company.