Shopify B2B and Wholesale: Why the Apps Still Fall Short (and What to Build Instead)
Shopify's native B2B tools on the higher plan handle company profiles, catalogs, and price lists, and for straightforward wholesale that combination plus a couple of apps is genuinely fine. You need a custom wholesale layer when your pricing is more than a flat percentage off retail, when deals begin life as negotiated quotes, or when orders hinge on net terms, per-account credit limits, and an internal approver. The heart of it is a price-resolution engine that returns the one correct price for a given buyer every time, contract before group before volume before list, with no manual overrides. Around that sit a real quote-to-order flow and terms enforced in code rather than in someone's memory. This is the honest picture of where the off-the-shelf approach hits a wall, and what it takes to get past it while staying on Shopify.
The short version
- Wholesale buyers behave nothing like retail shoppers. They reorder on a cadence, expect a negotiated price, pay on terms, and often need sign-off before an order is placed.
- Real pricing is a resolution problem, not a discount. A given buyer's price is decided by contract, group, volume break, and list price in a defined order of precedence, and the engine must pick the winner consistently.
- Net terms and credit limits are enforcement, not display. An account on terms needs its balance checked against a limit at order time, which no pricing app was built to do.
- A quote is a workflow, not a contact form. A negotiated quote should convert into an order carrying the exact agreed numbers, with nothing re-keyed by hand.
- Mixed B2C and B2B is where trust breaks. When one store serves both, the failure mode is a customer seeing the wrong price, and price errors are the fastest way to lose a business account.
- Stay on Shopify, extend its B2B primitives. Company records, catalogs, and price lists are the foundation; the custom layer adds the resolution logic, the quoting, and the approvals on top.
Why doesn't retail software fit wholesale buyers?
When an owner tells me their wholesale side feels held together with tape, the worry underneath is rarely about a missing feature. It is that every tool assumes their buyers act like retail shoppers, and they do not. A retail customer browses, decides, and pays the price on the tag. A wholesale account reorders the same items on a schedule, pays the price they negotiated months ago, settles on terms weeks after the goods arrive, and often routes the purchase through someone who has to approve it first. Those are not edge cases to bolt on; they are the shape of the relationship.
That shape has consequences for the software. Wholesale runs on trust that an order will be priced and fulfilled exactly as agreed, so a system that quietly shows the wrong number does more than annoy, it signals that you are not a dependable supplier and it leaks margin every time it guesses low. The real question, then, is not whether a B2B app exists. It is whether the system can represent your specific customers, your specific pricing, and your specific approvals the way they truly work. That distinction is the line between a setup you outgrow within a year and one you can keep building on.
Where does the off-the-shelf B2B stack fall short?
Shopify's native B2B features cover the basics of company profiles, catalogs, and payment terms, and the app ecosystem fills the space around them. For simple wholesale that is a fair starting point. The strain appears as your selling gets more specific, and it clusters in five places.
- Pricing that is more than a percentage off. Genuine wholesale pricing is per customer, per group, and per product, with volume breaks and contract prices that override everything else. Most apps offer a simplified slice and quietly force you to flatten the rest into something they can store.
- Quotes that become orders. Many deals start as a quote, get negotiated, and then convert. A quote-request form stapled to a retail checkout is not the same as a flow where your team and your buyer both trust that the agreed figures carried through unchanged.
- Terms, credit limits, and approvals. Net terms, per-account credit ceilings, and an internal approver who signs off before an order is placed are normal in wholesale, and awkward to assemble from apps that were each designed for a different job.
- One store serving both B2C and B2B. When you sell to consumers and businesses at once, you are constantly fighting tools that assume you are one or the other, and the occasional result is a customer seeing a price that was never meant for them.
- A stack that is fragile and costs more as you grow. Three or four overlapping apps approximating one coherent process is expensive and brittle, the trap covered in the hidden cost of app stacking, and every price change becomes a test of whether the arrangement still holds.
Put those together and the pattern is plain. Each app can do a piece, but no single one owns the whole way you actually sell to a business buyer, so the gaps between them become your team's manual work.
What does a custom wholesale layer resolve on Shopify?
The goal is not to leave Shopify. It is to extend it so the platform represents your wholesale business faithfully, built on Shopify's own B2B building blocks. Company and location records model your accounts, and catalogs with price lists publish the right products at the right prices to the right buyers, using the same primitives Shopify documents for anyone building for B2B. On that base, a few things work as one.
- A price-resolution engine. For any buyer and product it evaluates the candidates, contract price, group price, volume break, and list price, in a fixed order of precedence and returns the single correct number, so no one is ever overriding a price by hand at order time. The mechanics of expressing that logic natively are covered in the Shopify Functions guide.
- A real quote-to-order flow. A negotiated quote converts into an order carrying the exact agreed figures, so nobody re-keys a price and nobody wonders whether the numbers survived the handoff.
- Terms and credit enforced in code. Net terms and per-account credit limits are checked at order time, so an account near its ceiling is caught by the system rather than discovered later by accounting, and approvals route to the right internal person before an order is placed.
- A buyer workspace that fits how accounts operate. Fast reordering, visible pricing, order tracking, and access to invoices and purchase orders is the natural companion to the customer portal Shopify does not give you, so buyers do their routine work without emailing you.
The custom data these pieces depend on, contract references, credit limits, approval chains, lives in structured fields rather than scattered app settings, which is exactly the modeling job the metafields and metaobjects guide walks through. And because net terms mean the order has to reach your accounting or ERP cleanly, this leans on the same integration discipline as connecting your stack instead of copy and paste. Wholesale orders also tend to be large, so the freight and multi-origin questions in advanced shipping and fulfillment logic usually arrive alongside the pricing ones.
How do you build a wholesale layer, step by step?
Because this touches pricing and money, the safe path is a sequence of small, provable commitments rather than one large bet on a launch day. This order de-risks it.
- Document how you price and approve a real order today. Walk one contract account, one group-priced account, and one volume deal from quote to invoice, including the approvals and terms, so the true rules are on paper before anything is built.
- Define the precedence explicitly. Agree the exact order in which contract, group, volume, and list prices win, because the whole engine depends on that ranking being unambiguous.
- Build the resolution engine first. Ship the piece that returns the correct price for a buyer, and prove it against known accounts before it drives a single live order.
- Add quoting on top of resolved prices. Let a negotiated quote inherit the engine's numbers and convert to an order without re-entry, so the agreed figures cannot drift.
- Layer in terms and credit checks. Enforce net terms and credit limits at order time, and route approvals to the right person, so the rules act on their own instead of relying on vigilance.
- Prove it with a friendly account. Have a real buyer and your team run the flow on a development store, including the awkward mixed cart and the account near its credit limit, before anyone relies on it.
- Connect accounting, then expand. Wire orders into your accounting or ERP so terms settle cleanly, and only then extend to the next account type or catalog.
A wholesale-readiness checklist
- Can you state the precedence of your price types, contract over group over volume over list, in one sentence?
- Does a resolved price ever require a human to override it, and if so, why?
- Do negotiated quotes convert into orders without anyone re-keying a number?
- Are net terms and credit limits checked automatically at order time, not reconciled afterward?
- If you sell to both consumers and businesses, is there a guarantee that neither sees the other's prices?
- Do approvals route to a named person before an order is placed, or happen informally?
- Do wholesale orders reach your accounting or ERP without manual entry?
Common pitfalls
The failures in wholesale software are specific to relationships and money, and each one erodes the trust a business account is built on.
Flattening real pricing into a single discount. The tempting shortcut is to express everything as one percentage off retail and handle the exceptions by hand. It works until the exceptions outnumber the rule, at which point your team is quietly maintaining the real pricing in their heads and the system is decorative.
Re-keying negotiated numbers. When a quote is agreed by email and then typed into a draft order, a single fat-fingered figure becomes a wrong invoice, and the buyer who negotiated that price notices immediately. Manual re-entry between the quote and the order is where agreed numbers go to die.
Skipping the credit check. Net terms without an enforced limit is just hope. An account can drift well past its ceiling one reasonable order at a time, and nobody notices until the receivable is a problem rather than a policy.
Consider a representative case, details changed. A specialty distributor sold to a few dozen trade accounts, each on its own negotiated pricing and net terms. Quotes were agreed over email and re-entered as draft orders by whoever was free, so prices occasionally landed a few percent off what was promised, and because there was no credit enforcement, one slow-paying account kept ordering well beyond the limit it had been given. Reconciling the disagreements and chasing the overextended account cost more time than the sales were worth. Rebuilding it as a resolution engine that produced the agreed price automatically, a quote flow that converted without re-keying, and a credit check that ran at order time ended the pricing disputes and stopped accounts from quietly exceeding their limits. Nothing here was exotic. A retail-shaped process had simply been asked to run relationships it was never designed for.
FAQ
Does Shopify support B2B and wholesale natively?
It does on its higher plan, where you get company profiles, location-level ordering, catalogs, and payment terms, and for simpler wholesale that native foundation plus a few apps is a reasonable place to operate. Where it stops is the more specific logic, layered price precedence, enforced credit limits, quote negotiation, and internal approvals, which the platform leaves for you to build on top. So the honest answer is that Shopify gives you solid primitives for B2B and expects a custom layer to express the rules that make your particular wholesale business run.
How do I set customer-specific and volume pricing on Shopify?
Native catalogs and price lists let you publish different prices to different company locations, which covers straightforward per-account pricing. Real wholesale usually needs more than that: contract prices for individual accounts, group pricing, and volume breaks that interact, with a defined rule for which one wins when several apply. That is a resolution problem, solved by an engine that ranks the candidates and returns the correct number, rather than by stacking discount apps that each know only their own slice and cannot agree on the final price.
Can I offer net terms and credit limits on Shopify?
Payment terms are supported natively, so you can invoice an account and let it pay later. Credit limits are the part that needs building, because a limit is only meaningful if it is checked, and native terms display the arrangement without enforcing a ceiling. A custom layer evaluates an account's outstanding balance against its limit at order time and holds or routes orders that would exceed it, which turns net terms from an honor system into an actual control that protects your receivables.
What is a quote-to-order flow?
It is the path a negotiated deal takes from a proposed quote, through back-and-forth, to a placed order that carries the agreed figures exactly. The reason it matters is that wholesale deals are frequently negotiated rather than bought off a shelf, and the risk lives in the handoff: if someone re-types the quote into an order, the numbers can drift. A proper flow lets the accepted quote convert directly into the order, so both your team and the buyer can trust that what was agreed is what gets invoiced.
Can I run B2B and retail on the same Shopify store?
Yes, and many businesses do, but the mixed setup is where pricing mistakes are most damaging, so it needs deliberate guarding. The failure mode is a consumer seeing wholesale pricing or a trade account seeing retail, and either erodes trust or margin. A custom layer resolves the right context for each buyer and keeps the two pricing worlds cleanly separated, so the same catalog can serve both audiences without ever showing one of them a price meant for the other.
Do I have to be on Shopify Plus for custom B2B?
The richest native B2B primitives, company records and catalogs, live on the higher plan, so serious wholesale usually points there. That said, the custom layer is where the value concentrates regardless of plan, because the resolution logic, quoting, and approvals are things you build on top rather than features you toggle. If your wholesale side has outgrown the apps holding it together, tell me how you price and approve a typical order and I will sketch a first phase, informed by running production commerce like the headless LeO-Optic store, that finally matches the way you sell.
Have a project in mind?
Let's turn it into custom software that moves your business forward.