Resources

Per-customer wholesale pricing for produce, done right

July 8, 2026

Ask a produce distributor what a case of romaine costs and the honest answer is "for which customer?" There is no single wholesale price. The steakhouse that buys ten cases a week, the taqueria that buys two, and the new café you're trying to win all pay different numbers for the same box — and that's not a flaw in how you run things, it's the nature of wholesale. This piece is about managing that reality without it turning into chaos. It pairs with our B2B ordering guide, which covers the whole wholesale flow; here we zoom in on pricing.

Why every relationship prices differently

Per-customer pricing isn't favoritism. It's the rational result of a handful of forces that pull in different directions for every account:

  • Volume. The account moving ten cases carries your truck's economics in a way the two-case account doesn't, and volume pricing reflects that.
  • Relationship and tenure. A restaurant that's ordered every week for three years has earned pricing a first-month account hasn't.
  • Competition. Sometimes you cut a number to win or keep a marquee account, and that deal is specific to that fight.
  • Product mix. An account that takes the ugly-but-fine seconds alongside the premium stuff prices differently than one that only wants the cosmetic top grade.

Because these forces are per-account, the price list is per-account too. Any system that assumes one public price per product is the wrong shape for wholesale before you've sold a single case.

Why spreadsheet price lists rot

Almost every distributor starts with spreadsheets, and almost every one eventually gets burned by them. The failure is predictable, and it isn't about being disorganized — it's structural.

You start with a master sheet of base prices. Then one customer negotiates a deal, so they get a tab. Another gets a column. A third gets a separate sheet a salesperson emailed once and never linked back. Now your cost on an item moves — say strawberries jump with the season — and you update the master. But the customer tabs, the columns, and that emailed sheet don't move with it. Within a season you have three or four numbers for the same product for the same customer, living in different places, none of them agreeing.

The damage shows up in three ways:

  1. Margin leaks. A customer keeps paying an old price you meant to raise, because the sheet they order from never got updated.
  2. Arguments. The number your salesperson quoted, the number on the portal or order sheet, and the number on the invoice don't match — so every mismatch becomes a phone call, and the customer is right often enough that you eat it.
  3. Key-person risk. The only person who understands which sheet is authoritative can't take a vacation, and if they leave, the pricing logic leaves with them.

Spreadsheets don't rot because you're careless. They rot because they store the same fact — this customer's price for this product — in more than one place, and copies drift.

The fix: one base price, per-customer overrides

The discipline that fixes this is simple to state: store each price once. Concretely, that means one base price per product, plus explicit per-customer overrides only where you've actually negotiated something different.

Here's how it holds together:

  • Base price is the default. Every product has one list price. An account with no special deal simply gets it. When your cost moves, you change the base price in one place and every account on the default moves with it automatically — no tab-hunting.
  • Overrides are the exceptions. When you cut a deal for a specific customer, that becomes an override attached to their account. It's deliberate, it's visible, and it's the single source of truth for that customer's price on that item.
  • Everything reads from the same place. The price a customer sees when they order, the price a salesperson quotes, and the price on the invoice all resolve from the same base-plus-override logic. They can't drift apart because there's nothing to drift — it's one lookup, not four copies.

This is exactly how per-customer pricing works in Minori Midori: a base price list plus per-customer overrides, and the customer's storefront, their orders, and their invoices all price from it. The customer sees the price they'll be billed, because it's literally the same number.

Keep the quote, the portal, and the invoice in sync

The whole point of storing a price once is that the three moments where a customer encounters a price — the quote, the order, and the invoice — never disagree.

When those three come from the same source, a category of problem simply disappears. A customer can't order at one price and get invoiced at another. A salesperson can't quote a stale number. There's no reconciliation ritual on invoice day because there was never a gap to reconcile. The customer builds a cart, sees their price, and that's the price on the bill. Trust in your pricing — which is trust in you — comes from that consistency more than from the numbers being low.

This is also where an online portal quietly earns its keep. Every customer logs into their own storefront and sees their own prices, resolved live. Update an override and the next order the customer places reflects it, without you sending a new sheet or hoping they use the current one.

Confidentiality: negotiated prices stay private

There's one more reason per-customer pricing has to be handled properly rather than emailed around: the deals are confidential, and for good reason.

If the taqueria finds out the steakhouse pays less for the same case, you have a problem that no explanation fully fixes — every account assumes it's the one being overcharged. Spreadsheets make this leak almost inevitable: a master sheet with everyone's columns gets forwarded, a salesperson pulls up the wrong tab on a customer's screen, an emailed price list gets shown around a kitchen.

Per-customer pricing in a portal closes that off structurally. Each account, when they log in, sees only their own prices — never the base list they don't get, never another customer's negotiated number. The confidentiality isn't a policy you have to remember to follow; it's built into the fact that a customer can only ever see their own account. That protects both the deals you've cut and your ability to price the next account on its own merits.

Price once, apply everywhere

Wholesale prices per relationship because volume, tenure, competition, and product mix are all per-relationship — that's normal, not messy. Spreadsheets turn it messy by storing the same price in several places that drift apart, leaking margin and starting arguments. The fix is one base price per product plus deliberate per-customer overrides, with the quote, the order, and the invoice all reading from that single source, and each customer seeing only their own numbers. Get that right and your pricing stops being a source of surprises and starts being something customers trust.

For how pricing sits alongside approvals, credit limits, and invoicing in the full wholesale flow, head back to the B2B ordering guide — or see it working on your own catalog with a demo.

See it in your own storefront.

Create your store, pick a subdomain and add a product — or have us walk you through it first.