Maya's wholesale revenue grew 40% last year. Her wholesale profit grew 6%.
She didn't know that until February, when she sat down with three years of QuickBooks exports and a half-built spreadsheet that her accountant had been gently nudging her toward for nine months. By Sunday night the spreadsheet had a new tab called Per-Account P&L, and the tab had a column called Annual Contribution Margin, and the column had numbers in it that made her put the laptop down and walk to the kitchen for a glass of water she did not actually want.
Eight of her 28 wholesale accounts were unprofitable. Not "low margin." Unprofitable. They were paying her, on average, $0.83 for every dollar they cost her to fulfill. One small West Coast boutique had bought $4,200 of soap over the year and consumed roughly $4,900 in unit cost, packaging, freight, and payment fees. The boutique was lovely. The owner sent thank-you notes. Maya had been losing $58 every month she was in that store.
This is the story of what she did about it — over one quarter, across one uncomfortable phone call, and through three changes to how she ran wholesale that, by the end of June, had pulled her wholesale loss rate down 32% and turned the 28-account roster into a system that would no longer quietly drain a fifth of itself.
The numbers in this post are composite — Maya is a fiction stitched from the patterns that show up in real maker P&Ls. The mechanics are not.
The audit she had been avoiding
Maya's business — call it North Cedar Soap — runs cold-process bars, six core scents, two seasonals, all from a converted garage with an overhead kitchen rack of curing bars permanently in the way of the dryer. Retail through her own Shopify is roughly half the business. Wholesale is the other half: 28 independent boutiques, garden centers, and one mid-sized regional grocer. She had told herself for two years that wholesale "ran itself."
The thing she had been avoiding was a number. Specifically, the per-account contribution margin number. It was easy to avoid because the rolled-up wholesale total looked fine — a 41% gross margin on the wholesale channel, which is what most makers see and round to "healthy." The problem with the rolled-up number is that it averages the boutique that orders $9,000 a year and reorders without prompting against the boutique that orders $180 every six months and asks for free freight every time. The first account is paying for the second. The first account does not know it.
When she finally built the per-account view, three patterns fell out of it.
Pattern 1: small-order economics had quietly inverted
Eleven of her 28 accounts had average order sizes under $250. The fixed cost of fulfilling a wholesale order — the master case, the inserts, the packing time, the shipping label, the deposit-collection email loop — was running her about $42 per order. On a $180 order, that fixed cost ate 23% of revenue before a single bar of soap moved. On a $1,800 order it was 2.3%. She had never thought of fulfillment as having fixed costs because the bookkeeping had buried them inside cost of goods sold and "supplies expense" without telling her where they were going.
The pattern in plain English: every wholesale order has a fixed-cost floor. If your average order is small and your fixed-cost floor is unchanged, the floor swallows the margin. The accounts that hurt are not the rude ones — they are the small, polite ones that reorder twice a year.
Pattern 2: she was shipping retail packaging to wholesale buyers
Every bar that left North Cedar — retail or wholesale — was shrink-wrapped, hangtagged, and sleeved. The hangtag and sleeve cost $0.84 per bar combined. On a 144-bar wholesale case, that's $121 of retail-display packaging she was paying for and shipping at her cost. Most of her boutiques unwrapped the bars and put them on open shelves with shop-printed signage. The hangtags went straight into a recycling bin Maya had never seen.
She had been buying packaging that her buyers were throwing away. For one account specifically — a co-op that displayed soap exclusively in open baskets — she calculated she had shipped $2,160 of retail packaging into compost over the year.
Pattern 3: terms had crept
Eighteen months earlier, every new wholesale account had been prepay. Then a couple of larger boutiques asked for Net 30, which felt reasonable. Then one of those asked for Net 60 around the holidays, which also felt reasonable in the moment because December is December. Then a smaller account, who had heard about Net 60 from somewhere, asked for Net 60 too. By the time Maya pulled the audit, six accounts were on Net 60 and four more on a "loose" Net 30 that was usually paying at 45–55 days. Two accounts had outstanding balances over 90 days that she had not chased because the conversations were uncomfortable.
The cash drag from terms creep was real money. The bigger problem was the story she had been telling herself — that the wholesale channel was healthy because the year-end revenue number was up. The revenue number was up because she was effectively financing her buyers, and one of them was financing themselves at her expense.
The conversation she didn't want to have
The hardest part of the quarter was not the spreadsheet. The spreadsheet just told her what was true. The hardest part was the phone call to Ash, the owner of a small Pacific Northwest boutique that had been one of Maya's first three wholesale accounts. The boutique placed about $2,800 a year in orders, all in $200–$300 increments, all on Net 60. By Maya's per-account math, Ash's boutique was costing her about $61 a month.
Maya had rehearsed three versions of the conversation. The first one was a cowardly version where she pretended a "company-wide policy change" had forced her hand. The second was an over-explained version with a slide deck. She used the third one. She called Ash on a Tuesday morning, told her she had finally run the per-account numbers, and said the small frequent reorder pattern was below the floor she could sustain. She proposed three options: raise the per-order minimum to $400, move from Net 60 to Net 30 with a 2% prompt-pay discount, and drop the hangtag-and-sleeve from wholesale orders.
Ash was quiet for fifteen seconds — Maya counted — and then said, "I've been waiting for one of my vendors to actually do this. Send me the new sheet." Two weeks later Ash placed a $620 order, paid in 21 days, and asked if Maya could do a custom holiday scent for the boutique's December gift packs. The conversation Maya had been dreading for six months took eleven minutes.
Two of her 28 accounts did not take the new terms. One was the account that had been at 90+ days outstanding. The other was a buyer who had built a habit of asking for free freight on every order and now wanted that codified. Maya let both go. By her own math, dropping those two accounts increased wholesale profit because she had stopped paying for orders that were extracting more value than they delivered.
The three changes she made
The restructured wholesale program landed in mid-March. The changes were small in print and large in effect.
The minimum opening order moved from $200 to $400, the reorder minimum from $150 to $300, and a $50 small-order surcharge applied to any reorder under $300 that the buyer pushed through anyway. Half her accounts increased their order sizes immediately. A handful held their order sizes and accepted the surcharge. Three accounts consolidated two prior reorders into one, which was the behavior change she had wanted in the first place.
Wholesale orders shipped without hangtags or sleeves, with an option for the buyer to pay for retail-display packaging at $0.40 per bar — billed as a clear add-on, broken out on the line sheet. Six accounts opted in. The other 22 saved Maya $0.84 per bar on every wholesale unit, which over a quarter was about $3,800 of packaging she did not have to buy.
Terms moved to Net 30 across the board, with prepay required on first orders and on any account whose previous invoice had aged past 45 days. A 2% prompt-pay discount nudged a third of her buyers into ten-day payment, which improved cash conversion by roughly two weeks across the wholesale book. The two Net 60 accounts that converted to Net 30 paid noticeably faster — the friction had been pure habit, not actual cash constraint.
The result, ninety days later
The end-of-Q2 numbers told a much better story than the audit had. Wholesale revenue was down 4% on the quarter — the two dropped accounts and the surcharge friction took their bite. Wholesale contribution margin was up 11 percentage points. Net wholesale profit was up 32%. The eight previously unprofitable accounts had become five profitable ones (after restructure), two cleanly walked-away ones, and one that was still marginal but now self-aware: the buyer knew the constraints and was choosing to operate inside them.
The per-account spreadsheet, now updated weekly, had become Maya's most-used tool. She runs the contribution-margin number for every wholesale order before she accepts it. She has not added a new wholesale account in two months that did not clear the math.
Two more makers, same shape of story
The pattern is not soap-specific.
Devon, cottage baker, four coffee-shop wholesale accounts
Devon supplies four independent coffee shops in the same metro area with morning pastries. He thought he was running a profitable wholesale book until one of the shops asked for a 14% volume discount on a 3% volume increase, and Devon couldn't say yes or no without checking his math. He didn't have the math.
Two evenings of spreadsheet work later, the pattern was: three of the four shops were profitable on their morning-rush orders and unprofitable on the small Wednesday afternoon resupplies. The Wednesday orders were a habit, not a financial decision — the shops kept ordering them because Devon kept delivering them. He moved Wednesday from a delivery day to a pick-up-only day with a $40 small-order fee. Three of the four shops rebatched their orders into one larger Tuesday delivery. The fourth shop dropped Wednesday entirely and increased its Friday order. Devon's wholesale margin came up 8 points without losing a customer.
Lila, candle maker, consignment shelf at a boutique grocer
Lila sold candles on consignment at a regional grocer — 30 days on shelf, 65/35 split in her favor, unsold returned. She thought consignment was risk-free until she ran the numbers. The grocer was selling through 60% of her stock per month, returning the rest, and the returned candles were arriving with handled, dirty wicks and scuffed labels. Two-thirds of the returns went into seconds. The effective margin on the consignment placement, after seconds losses, was 22% — well below her wholesale-direct margin of 41%.
Lila didn't drop the grocer; she renegotiated. She moved to a hybrid: candles still sold on a consignment split, but with a 50% buy-the-floor minimum on each new shipment and a clearance protocol for slow-moving units (priced down before they hit the seconds bin). The grocer agreed because they wanted the brand on shelf and the alternative was losing it. Lila's candle program at the grocer is now 31% margin and stable.
What the audit actually does
The mechanic running through all three stories is the same: the rolled-up channel margin can hide a third of the accounts losing money. The fix is per-account contribution margin, run honestly, and then a structured conversation about the things that drive it — minimums, packaging, terms, freight.
You can do this in a spreadsheet. Maya did. So did Devon and Lila — if you're starting from scratch, the Wholesale Line Sheet Template has the per-SKU pricing math, the 50%-margin sanity check, and the buyer-ready front sheet wired in, which gets you to the same numbers in an evening rather than a weekend. The spreadsheet works for a while, until the spreadsheet becomes the second job.
This is where Ardent Seller earns its keep for makers running real wholesale books. Per-customer transaction history, tied to true unit costs (materials + labor + packaging) that update automatically when an ingredient price moves, means the contribution-margin number for every account is always current — not a Sunday-night spreadsheet refresh. Wholesale and retail pricing tiers live side by side, so a 50%-of-MSRP wholesale floor is enforced at the point of sale, not after the order ships. And the customer profile holds each account's terms, MOQs, and packaging preferences so the next person packing the order doesn't accidentally ship hangtags to the co-op that throws them away.
The boutique conversation is still on you. The audit doesn't have to be.
Start a free Ardent Seller account and run your first per-account profitability view this week. If your wholesale book is healthier than you think, you'll know that for certain. And if it isn't, you'll know that too — early enough to do something about it before the year-end report tells you a story you can't change.
Related reading
- Wholesale Pricing for Handmade — The pricing math that has to be right before any per-account audit will tell you something you can act on: keystone, MOQs, net terms, and where wholesale margin actually has to land.
- Soap Making Inventory Guide — The soap-specific cost spine Maya was running on before she ran the audit — oils, lye, fragrance, packaging, and the per-bar number that makes the wholesale conversation possible at all.
- Spreadsheet Breakup — The seven signs that the per-account spreadsheet has become the second job, and the four-gate decision framework for moving the wholesale book onto a system that updates itself.
Free resources
Three free downloads from the Ardent Workshop library that pair well with the audit Maya ran:
- Wholesale Line Sheet Template — A working Excel line sheet with the per-SKU wholesale-pricing math and a 50%-margin sanity check already wired in, so you can rebuild your wholesale program from a pricing floor rather than a guess.
- Soap Maker's Cost-Per-Bar Calculator — The fully-loaded per-bar number that has to anchor any wholesale conversation: SAP-table lye math, cure-loss adjustment, and packaging-and-labor roll-up, so the wholesale price you negotiate is built on a unit cost you can defend.
- Should I Raise My Prices? Decision Tool — A live decision tool that runs the +10% / +20% / +30% scenarios with the volume drop modelled in, for the moment a per-account audit tells you a price increase is non-optional.
This article is provided for educational purposes only and does not constitute financial, tax, or business advice. Maya, Devon, and Lila are composite personas; their numbers are illustrative and will vary by your specific circumstances. Wholesale conventions (MOQ, packaging, payment terms, returns) vary by category, channel, and jurisdiction. Consult a qualified accountant or small-business advisor before making financial or contractual decisions based on this content.
