How do you track unpaid net 30 wholesale orders? Spreadsheet is stressing me out

AI-generated summary

A small brand with 12 wholesale stockists on Net 30 terms is struggling to track unpaid orders and prevent customers with overdue invoices from placing more. Shopify can send payment reminders and filter orders by payment status, but it does not automatically block overdue accounts or provide per-company credit limits and aging totals. A practical low-cost workflow is to export unpaid orders, pivot by company, and track invoice age and last order date; bank-transfer payments must be marked paid manually or balances and reminders will be wrong.

For overdue accounts, Shopify’s company-level “submit orders as drafts for review” setting can act as a manual approval gate, though it does not stop customers submitting orders. Suggestions for new accounts include requiring prepayment for the first two or three orders, then offering Net 30 with a modest limit that increases after on-time payments. Participants also recommend collecting the accounts-payable contact, purchase-order requirements, and payment-run schedule to improve collection timing.

Several third-party tracking or credit-control apps were mentioned, with disclosures from their makers. No final setup or resolution was reported; the original poster has not said what they chose.

Small brand, 12 stockists on net 30 since the B2B rollout in April.

Sat down last week to work out what I’m actually owed -took an hour of clicking through orders. One shop has 3 unpaid orders from May and Shopify let them place a 4th on Tuesday like everything’s fine

Also no idea how to decide if a new stockist deserves net 30. Current system: “they seem nice.”

Is there an app for this that actually works? Or is everyone just reconciling in Xero / spreadsheets? What’s your setup?

@Nithi1994 Shopify can track payment due dates and send reminders, but it does not prevent a company with overdue invoices from placing another order. With only 12 clients, I would create a saved view for unpaid and overdue orders. New orders from companies with overdue payments should first be sent to drafts for review. New clients could start on prepayment, with Net 30 offered only after several successful payments. Reconciliation can remain in Xero, but restrictions on new orders should be handled in Shopify

Adding the exact setup to Tetianaholub’s draft-review suggestion:

Go to Customers > Companies, select the company or company location, then open Checkout > Edit. Under Order submission, choose Submit all orders as drafts for review.

Future checkouts from that company or location will then land in Drafts for approval instead of becoming normal orders automatically. It is not tied automatically to overdue status, so with 12 stockists the simple approach is to turn it on when an account goes overdue and turn it off only after the account is current.

This is a review gate rather than a complete checkout block: the buyer can still submit the cart, but you decide whether to approve the order.

Your second question is the one nobody’s answered, and long term it’s the more useful one.

A workable version of “does this stockist deserve net 30”, without turning yourself into a credit department:

Start every new account on prepayment for the first two or three orders. Not a judgement, just policy — say it up front and it never gets awkward. Then give terms, but set the limit lower than feels polite. Easy to raise after two clean cycles, very awkward to cut once you’re already exposed.

Ask for the AP contact and the PO number at the moment you grant terms, not later. An invoice that doesn’t match a PO sits in someone’s manual queue, and that queue is where Net 30 quietly becomes Net 60.

And plan your cash at 45 days even on Net 30. Most larger accounts aren’t being difficult, that’s just their cycle.

On the tracking half — the draft-order toggle above is the only native lever, and the thing worth knowing is that Shopify has no credit limit field at all. Whatever number you settle on lives outside the platform, in your head or your spreadsheet.

One more that catches people out: if any of your stockists pay by bank transfer, Shopify never sees that money. Those orders stay unpaid in Shopify forever unless you mark them paid by hand. That’s usually the reason a spreadsheet and Shopify disagree by thousands, and it’s worth checking before you trust either number.

I’m a supply chain student looking into how small brands handle wholesale credit right now, and your post caught my eye. What are you actually basing new stockist decisions on when gut feel isn’t enough? Do you ask for anything upfront, like trade references or a first order paid in full, or is it more that you watch how the first few invoices go before you loosen up?

Hey @Nithi1994

hope you’re doing well!

I’d look at apps like B2B Handsfree or Balance by Boost flow for credit limits and payment controls. otherwise, most merchants end up managing it through Xero plus spreadsheets.

Everything above is detection, which is the right first move. The gap is what happens after an invoice goes past due, and there is one thing that transfers directly from card dunning.

A reminder that fires on a fixed offset from the due date hits the same point in the payer’s AP cycle every single time. Most companies pay on runs, weekly or twice monthly, and if your reminder consistently lands the day after their run you have effectively added a full cycle to every invoice. Same trap as retrying a card on the same date each month and wondering why it keeps failing.

So at the moment you grant terms, alongside the AP contact and the PO process @onurcanogul mentioned, ask one more thing: when is your payment run. Then time the reminder to arrive two or three days before it. Costs nothing, needs no app, and it moves more invoices than a fourth reminder does.

The other thing the aging report will not tell you: a stockist who is 60 days late and still ordering is a different problem from one who is 60 days late and has gone quiet. The first is a terms problem and they are still a customer. The second is a collection problem and you are probably last in their queue. Same bucket, opposite response, and the buckets cannot see the difference. Worth putting last order date next to outstanding balance in that pivot, since the export already has it.

Late to this one, but two things are still missing from the thread, and then a disclosure.

First, the reminders side. Shopify has built-in payment reminders for net-terms orders (up to five, sent on the due date or a set number of days after it, from your own notification template). Worth switching on before you buy anything. The two limits: nothing goes out before the due date, and if you later add an app that also sends reminders you need to turn one of them off or your stockists get two emails.

Second, on the draft-review toggle @cuongnm_trooix described: it is the right native lever, but it is manual in both directions. Someone has to flip it on when an account goes overdue and remember to flip it off when they pay. With 12 stockists that is workable. What it will not do is stop the fourth order from being submitted, it just parks it for you to approve or cancel. And @onurcanogul’s point about bank transfers is the one that bites: any tool, Shopify’s own reminders included, reads the order’s payment status, so if you do not mark the order paid in admin, everything downstream thinks it is still owed.

Disclosure: I build Credit Guard, a Shopify app for exactly the situation in your first paragraph. You set a credit limit per company, and a company that is over its limit or has an overdue invoice gets a credit hold at checkout (with a per-company switch to let a good customer through). Reminders go out through Shopify’s own template 72 hours before, on, and 72 hours after the due date. It never holds your buyers’ contact details. It needs companies and payment terms, which you have since April. US$29 a month, 14-day trial. If you want, I will set it up with you on a 20-minute screen-share, starting with the shop that placed the 4th order. Either way, the toggle plus native reminders is a solid free setup for 12 accounts.

Coming back to this because the situation in your first paragraph — three unpaid orders from May, and a fourth one going through on Tuesday as if nothing was wrong — is exactly what I ended up building for, and it’s now live.

One thing from building it that might help whatever you use: the part that goes wrong is not the totals. It’s that the fourth order looks identical to the first one. Payment terms live on each order, so nothing on the screen where you pick and pack tells you this account is already behind. Most fixes are about seeing that at the moment the order lands, not in a spreadsheet on Friday.

Disclosure: I made Chalkline, a free Shopify app. It shows every account that owes you money, sorted by how late it is rather than how much, with the ageing split (1–30, 31–60, 61–90, 90+) and a credit limit per account. It does not block orders or email your customers — it ends each late account on the question you’re actually facing (“send the next order, or hold it until this is paid?”) and leaves the call to you. That’s deliberate: holding a shipment from someone who already paid by bank transfer costs you a real customer.

If you try it and something reads wrong for how you run net terms, I’d genuinely like to hear it.

Aging report + AP contact + payment-run date is the tracking half. The chase half is a cadence: confirm received → ask payment date → firm notice. If you want the email wording without inventing it each week: LatePay Closer — Invoice follow-up sequences for freelancers

@Nithi1994 late reply, but for anyone landing here with the same setup: with 12 stockists the two numbers that matter are “how old is each unpaid order” and “who is over their limit”. Natively you can filter orders by payment status, but there is no per-company total or aging, which is why it takes an hour.

On deciding who gets net 30: prepay the first two or three orders, then give terms with a limit of roughly one average order, and raise it after a few on-time payments. That keeps a bad stockist to one order of exposure.

Disclosure: I built Arrears for exactly this. It shows aging per company, sends statements and reminders, applies payments oldest-first, and can hold a company’s new orders when they’re overdue. Free for up to 3 companies: Arrears: B2B Net Terms & AR - B2B net terms. Collections that get you paid. | Shopify App Store

One thing that might cut the hour of clicking: in Orders, filter by payment status (pending/overdue), export to CSV, and pivot by company. That gives you a who-owes-what-and-how-old list in a couple of minutes. Mark any bank transfers as paid first, otherwise the totals will be off (as onurcanogul said above).

It’s been a few months, so I’m curious: did you find a setup that works, or are you still on the spreadsheet?

Disclosure: I’m on a small team (ikc) researching how wholesale brands handle this. Not pitching anything here.

hat “3 unpaid orders from May and Shopify let them place a 4th” bit hit home — same thing happened to us, the order screen just looks like a normal new order. We ended up doing the same hour-long click-through to work out what we were owed. What are you using to chase them at the moment — just the native reminders, or still the spreadsheet? Happy to swap notes on what’s actually worked.