You're Tracking 40 Wholesale Customers on Net-30 Terms With a Spreadsheet That Breaks Every Month — Here's the Free AR Aging System That Actually Works
You know the moment. It's Friday afternoon, you scroll through your bank transactions, and something doesn't add up. A retailer who ordered 24 units of your starter kit six weeks ago still hasn't paid. You check your spreadsheet — the one with columns for Retailer Name, Invoice #, Amount, and Paid? (Y/N). It says "N." No follow-up was sent. No reminder. Just silence. The invoice is now 60 days old and you're starting to wonder if that $1,200 is ever coming back.
This isn't a hypothetical. It's the exact position hundreds of small CPG brands find themselves in when wholesale crosses the 20-retailer threshold. The spreadsheet that worked when you had 8 accounts becomes a liability at 40 — not because you're bad at tracking payments, but because the tool was never designed for this job.
The real cost of the spreadsheet-that-breaks. A small organic skincare brand doing $470K/year in wholesale across 40 independent retailers discovered three unpaid invoices totaling $2,800 — all 90+ days old. They wrote it off. Two retailers consistently pay 10-15 days late and nobody tracks it. The founder has no idea what her Days Sales Outstanding (DSO) is. At 40 retailers, the "scroll through and check the Y/N column" approach consumes 2-3 hours every Friday — and still misses payments. The fix costs $0 and takes an afternoon.
You've probably looked at wholesale management platforms. JOOR, RepSpark, OrderWerks — the demos are slick. But they start at $200-500/month, and when you're only adding 5 more retailers this year, that math doesn't pencil out. Here's what nobody in the platform ecosystem will tell you: you don't need their software yet. You need a better spreadsheet — one purpose-built for AR aging, not a generic "Invoice Tracker" template from Etsy.
Why every generic payment tracker fails at 20+ retailers
The problem isn't the spreadsheet format — it's what most templates leave out. Here's what breaks:
1. The "Paid? Y/N" column is a trap
A binary paid/unpaid flag tells you nothing about urgency. A retailer who's 5 days late is different from one who's 55 days late, but a "Y/N" column treats them identically. By the time you scroll through 40 rows and notice the three "N"s buried among the "Y"s, the oldest one is already approaching 90 days — the point at which collection probability drops below 50%.
2. No aging means no prioritization
AR aging — bucketing receivables into 0-30, 31-60, 61-90, and 90+ day groups — is the single most important feature of any payment tracking system. It tells you who to call first, who gets the firm email, and who needs a "final notice" letter. A generic spreadsheet has no aging logic. You're sorting manually, which means you're acting on the invoices you happen to notice, not the ones that are most urgent.
3. Payment history disappears into the void
When a retailer pays, you mark the invoice as "Y" and... that's it. Three months later, when the same retailer is late again, you can't see that they've been late 4 of the last 6 cycles. A retailer who's habitually 10-15 days late is fundamentally different from one who's late once because their AP person was on vacation — but without a payment log, you can't tell the difference.
4. The follow-up process is manual and inconsistent
You send "just checking in!" emails when you happen to notice a late payment. Sometimes it's day 32, sometimes it's day 67. The language is different each time. Some retailers get friendly reminders. Others get nothing because their N is buried on row 34 of a spreadsheet you only look at when you're wondering why cash is tight this month.
The 4-Tab AR Aging Spreadsheet System (Free, Built in 2 Hours)
Here's the system. It's four Google Sheets tabs, takes about 2 hours to build, and handles 40-75 retailers reliably. When you cross 75 active wholesale accounts, you'll know it's time to evaluate platform options — but until then, this is all you need.
TAB 1 Active Orders
One row per open invoice. Columns:
- Retailer Name — consistent naming is critical; use the legal business name from their resale certificate
- Invoice # — your internal numbering; use format INV-YYYY-MM-NNN for sortability
- Invoice Date — date the order shipped, not the date you created the invoice
- Due Date — invoice date + 30 days. Use
=InvoiceDate+30formula - Amount — the total invoice amount including shipping if you charge for it
- Days Overdue —
=TODAY()-DueDate. This auto-calculates every time you open the sheet - Aging Bucket —
=IF(DaysOverdue<=0,"Current",IF(DaysOverdue<=30,"1-30",IF(DaysOverdue<=60,"31-60",IF(DaysOverdue<=90,"61-90","90+")))) - Last Follow-Up Date — manually updated; links to the Payment Log tab
- Status — dropdown: Open / Partial Payment / Paid / Disputed / Write-off
Conditional formatting: rows turn yellow at 1-30 days overdue, orange at 31-60, red at 61+. This makes your Friday review visual — you can scan the color, not the numbers.
TAB 2 Payments Received
Every payment gets logged here. Columns:
- Date Received — the date the payment hit your bank, not the date you noticed
- Retailer Name — must match Tab 1 exactly (use data validation dropdown)
- Invoice # — what this payment applies to
- Amount — the amount received
- Payment Method — ACH, check, wire, credit card
- Days Late —
=DateReceived - DueDate. This is your truth column. Over time, you'll see which retailers consistently pay on day 35 vs. day 28. - Notes — partial payment? short-paid? overpaid? note it here.
When a payment comes in, log it here first. Then go to Tab 1 and mark the invoice as Paid or Partial Payment. This two-step process is intentional — it forces you to verify that the payment amount matches the invoice amount before closing it out.
TAB 3 AR Aging Summary
This tab auto-calculates from Tab 1 using SUMIFS. It's your Friday dashboard:
- Total Outstanding: SUM of all open invoice amounts
- Current (0-30 days): $$ — these are fine, no action needed
- 31-60 days: $$ — these get the "friendly reminder" email today
- 61-90 days: $$ — these get the "payment is now due" call
- 90+ days: $$ — these get the "final notice" letter; consider collections
- DSO (Days Sales Outstanding): = (Total AR / Annual Wholesale Revenue) × 365. Track this monthly. If DSO is trending up, your collection process is getting worse, even if total AR looks flat.
A separate section shows AR Aging by Retailer, so you can see which accounts are dragging your DSO up. One retailer with $4,200 sitting at 75 days is a bigger problem than five retailers at 35 days.
TAB 4 Retailer Directory
Static reference data that feeds the other tabs:
- Retailer Name (used for data validation dropdowns in Tabs 1-2)
- Buyer Contact Name & Email — the actual person who handles AP
- Payment Terms — net-30 standard, but some accounts may have net-45 or net-60 negotiated
- Credit Limit — the maximum outstanding balance you'll carry for this retailer
- Last Order Date — helps identify dormant accounts
- Notes — "always pays 5 days late but never defaults" or "requires PO number on every invoice"
The 20-Minute Friday AR Review Protocol
The spreadsheet is the tool. The protocol is what makes it work. Here's the Friday routine — it takes 20 minutes once you've done it a few times:
- Open Tab 3 (AR Aging Summary). Look at the aging buckets. If 90+ is above zero, that's your first priority. If 61-90 is growing week-over-week, your follow-up process isn't working.
- Open Tab 1 (Active Orders). Sort by Days Overdue, descending. Work top to bottom — the oldest overdue invoices first.
- For each overdue invoice, cross-reference Tab 2 (Payments Received). Did the money come in and you forgot to mark it? It happens. Check your bank before sending a reminder.
- Send templated emails to the 3-5 retailers who are actually late. Use the templates below. Don't customize — the consistency is the point. Retailers learn that you follow up reliably.
- Update the Last Follow-Up Date column in Tab 1. This prevents double-emailing and lets you see at a glance who hasn't been contacted.
- Log any payments received this week in Tab 2. Update Tab 1 statuses. Move paid invoices to a "Paid Invoices" archive tab if you want to keep Tab 1 clean (optional — keep them if you want to track payment velocity).
- Check DSO. Is it trending up? Down? Flat? This single number tells you whether your collection process is improving or degrading.
Email Templates: The Right Words at the Right Time
These are designed to be copied, pasted, and filled in. No rewriting, no overthinking. The power is in the consistency — retailers learn that day 31 means an email, day 61 means a call, and day 91 means collections.
DAY 25 Friendly Heads-Up (Before It's Due)
Subject: Quick heads-up — invoice INV-2026-07-001 due next week
Hi [Buyer Name],
Just a quick note that invoice INV-2026-07-001 for $[Amount] is due on [Due Date]. No rush — just flagging it in case your AP team needs anything from our side (W-9, updated COI, banking details, etc.).
Happy to help with anything that makes the payment process smoother on your end.
Best,
[Your Name]
DAY 31 The "Friendly Reminder" (1 Day Late)
Subject: Following up — invoice INV-2026-07-001
Hi [Buyer Name],
Following up on invoice INV-2026-07-001 for $[Amount], which was due on [Due Date]. I know things slip through — if this is already in process, no worries at all. Just let me know when we should expect it.
If there's an issue or you need anything from us, I'm happy to sort it out.
Thanks,
[Your Name]
DAY 45 The "We Need to Resolve This" Email
Subject: Outstanding balance — invoice INV-2026-07-001 now 15 days past due
Hi [Buyer Name],
I've sent a couple of notes about invoice INV-2026-07-001 ($[Amount]), which is now 15 days past due. I want to make sure this hasn't fallen through the cracks — and if there's a dispute or issue with the order that's holding up payment, I'd rather know now so we can resolve it directly.
Can you let me know the status by [3 business days from now]? If I don't hear back, I'll give you a call to make sure we're aligned.
Appreciate it,
[Your Name]
DAY 60 Final Notice Before Collections
Subject: Final notice — invoice INV-2026-07-001 30 days past due
Hi [Buyer Name],
Invoice INV-2026-07-001 for $[Amount] is now 30 days past due. We've reached out several times and haven't received payment or a response.
We value your business and want to resolve this directly, but if we don't receive payment or a payment plan commitment by [7 days from now], we'll need to place your account on hold for future orders and escalate to collections.
If circumstances have changed and you need to discuss a payment arrangement, please call me directly at [your phone number]. I'd much rather work something out than go the collections route.
Regards,
[Your Name]
When to Cut Off a Retailer: The 3-Strike Rule
Not every wholesale relationship is worth saving. Use this framework:
- Strike 1: Payment is 60+ days late. Send the final notice. Document it in the Retailer Directory notes.
- Strike 2: A second payment in the same 12-month period goes 60+ days late. Place the account on prepaid or COD terms — no more net-30 until they demonstrate 6 months of on-time payment.
- Strike 3: A third late payment, or any single invoice that goes 90+ days without communication from the retailer. Cut off future orders. Send to collections for outstanding balances above $500. For smaller amounts, write it off and redirect your energy to retailers who pay on time.
The hardest part of this rule isn't enforcing it — it's accepting that some retailers will leave. But a retailer who doesn't pay you on net-30 isn't a customer. They're an interest-free lender you didn't agree to be.
Integrating With QuickBooks or Xero
The AR spreadsheet and your accounting software don't need to be disconnected. Here's the bridge:
- Create invoices in QuickBooks/Xero as normal. This is your official record. The spreadsheet is your operational dashboard — faster and more visual than any accounting software's AR module.
- Export open invoices from QuickBooks to CSV once a week (Reports → Customers & Receivables → Open Invoices → Export). Paste new invoices into Tab 1 of the spreadsheet.
- When payments come in, record them in QuickBooks first (this is your books of record), then log them in Tab 2 of the spreadsheet.
- Once a month, reconcile Tab 3's total outstanding against QuickBooks' open AR report. They should match within 1-2 days' timing difference. If they don't, you missed logging a payment or closing an invoice.
This dual-system approach exists because QuickBooks' built-in AR reporting is slow, hard to scan, and doesn't have aging-by-retailer at a glance. The spreadsheet is your Friday operations tool. QuickBooks is your month-end accounting record.
How to Know When You've Outgrown the Spreadsheet
The system works until it doesn't. Here are the triggers that mean it's time to evaluate a wholesale management platform:
- You've crossed 75 active wholesale accounts. At this volume, the 20-minute Friday review becomes 45 minutes, then an hour. The time cost approaches platform pricing.
- You're tracking purchase orders, inventory allocation, AND payments. Three separate spreadsheets that need to reconcile = the spreadsheet architecture is now your bottleneck, not your solution.
- Your retailers are asking for a portal. When 3+ retailers ask "can we check our order status online?", it's time to look at B2B wholesale platforms that include a retailer-facing portal (JOOR, RepSpark, NuORDER).
- Your DSO is trending up despite following the protocol. This means the problem isn't tracking — it's your credit policy or your retailer quality. The spreadsheet can't fix that.
When you hit these triggers, the platform math becomes rational: $300/month for JOOR vs. 4 hours/week of spreadsheet wrangling at $50/hour effective rate = the platform is cheaper. But until you hit these triggers? The spreadsheet is free, it works, and it's already better than what you're doing now.
The difference between this system and what you're doing now isn't complexity — it's reliability. A "Paid? Y/N" column that you check sporadically is hope-based AR management. An aging summary that auto-calculates and a 20-minute Friday protocol is process-based AR management. One works. The other costs you $2,800 in write-offs you never saw coming.
Stop Guessing Who Owes You Money
You didn't build a wholesale brand to become an accounts receivable clerk. The 4-tab system takes 2 hours to set up and 20 minutes a week to run. If you want someone to build the automated version — payment reminders that send themselves, aging alerts that hit your phone, and a dashboard that shows you DSO without opening a spreadsheet — that's what we do.
Book a free audit →Frequently Asked Questions
Can I really track wholesale net-30 payments without buying expensive software?
Yes. A Google Sheets AR aging tracker plus a 20-minute Friday review routine handles 40-75 wholesale retailers reliably. The key is building the right spreadsheet structure — tabs for Active Orders, Payments Received, AR Aging (0-30/31-60/61-90/90+), and a Retailer Directory — plus a disciplined weekly review cadence. Platforms like JOOR and RepSpark start at $200-500/month and are designed for 100+ retailer operations. Most small CPG brands don't need them yet. The spreadsheet system described in this guide costs $0 and takes about 2 hours to set up. When you cross 75 active wholesale accounts, the platform math may start to make sense — but below that threshold, you're paying for features you don't need.
How much money do small brands lose to uncollected wholesale payments?
The average small CPG brand doing $400K-850K in wholesale revenue loses $8,000-$15,000 per year to write-offs from accounts that went 90+ days without follow-up. This doesn't count the cash flow drag from retailers who routinely pay 10-15 days late — money that could be funding new production runs or marketing. The worst part: most of these write-offs are preventable. A 20-minute weekly AR aging review catches late payments at day 31 instead of day 91. Improving DSO by just 8 days on $470K in wholesale receivables frees up roughly $10,300 in working capital at any given time.
How long does it take to set up a wholesale payment tracking system?
You can build the core AR aging spreadsheet in about 2 hours — creating the tabs, setting up the aging formulas, and adding conditional formatting for overdue alerts. Populating it with your existing receivables takes another hour if you have clean records. After that, the ongoing time commitment is 20 minutes per week: sort by aging column, identify accounts past 30 days, send templated reminder emails to the 3-5 retailers who are late, and update payment statuses. Most operators who switch from ad-hoc tracking to this system recover the setup time within the first month just from payments they would have otherwise missed.