You rarely need a second store to sell wholesale on Shopify. Wholesale pricing — showing approved buyers lower, customer-specific prices — can live in the same store as your retail catalog. Your options run from customer tags and automatic discounts, to dedicated wholesale apps with price lists, to native B2B on Shopify Plus with companies and catalogs. The right one depends on how many wholesale customers you have, how complex the pricing is, and — the part most guides skip — whether that pricing must be enforced at checkout, not just displayed. This guide walks the ladder and shows you how to choose.
What “wholesale pricing” actually requires
“Add wholesale pricing” sounds like one feature. It’s really four, and any real B2B setup needs most of them:
- Customer-specific prices — a given buyer (or buyer group) sees different prices than retail, often per product or per collection, sometimes as a flat percentage off.
- Access control — only approved, logged-in wholesale accounts see wholesale pricing. Retail shoppers must never see it.
- Minimum order quantities (MOQs) and increments — wholesale usually means “order in cases of 12” or “minimum $500,” which retail carts don’t enforce.
- Checkout enforcement — the discounted price the buyer sees has to be the price actually charged at checkout, re-validated server-side. If pricing is only “painted” onto the page with JavaScript, it can be lost or gamed at the cart.
Judge every option below against those four. The cheap methods cover the first one or two; the gap is almost always enforcement and access control.
Why a separate wholesale store is usually the wrong first answer
The instinct is to spin up a second Shopify store “just for wholesale.” For most brands that’s the expensive answer to the wrong question:
- Double the cost and admin — another subscription, another theme, another set of apps, another checkout to maintain.
- Split inventory — two stores mean two stock pools to reconcile, or a sync app that becomes its own failure point.
- Split SEO and content — you fragment your domain authority and duplicate product data across two catalogs.
- Duplicate merchandising — every product edit, image and description has to be done twice.
A second store only makes sense at real scale — genuinely different catalogs, separate teams, or regulatory separation. For everyone else, run retail and wholesale from one store with access control so wholesale pricing only appears for approved buyers.
The options ladder
1. Customer tags + discounts + quantity breaks
The lowest-cost path. Tag approved buyers (wholesale), then apply pricing with automatic discounts, discount codes, or quantity breaks so bigger orders cost less per unit. You can gate a hidden “wholesale” collection behind a customer tag and show volume pricing on the product page.
Fits when: you have a handful of wholesale accounts, pricing is a simple flat percentage or volume tiers, and you don’t need per-product custom prices. It’s the natural cousin of retail volume discounts.
Breaks down when: every customer needs different prices, you need real MOQ enforcement, or the “wholesale price” is only shown via theme code and not enforced at the cart.
2. Wholesale / B2B apps with price lists
Dedicated wholesale apps add a proper price-list layer: per-customer or per-group price lists, a locked wholesale registration and login flow, MOQs, net terms, and order forms. This is the standard answer for non-Plus merchants who’ve outgrown tags.
Fits when: you have dozens to hundreds of wholesale accounts, need per-customer or per-tier price lists, and want a real B2B experience without upgrading plans. Vet each app for how it enforces price at checkout — some handle it cleanly with a Shopify Function or draft-order flow; others only reprice in the theme, which is the leak to watch for.
Breaks down when: app pricing rules can’t express your logic, or you’re stacking several apps and want the enforcement owned in one place you control.
3. Custom logic / Shopify Functions for enforcement
When the pricing rules are yours and yours alone — tiered contract pricing, per-SKU negotiated rates, complex MOQ-and-increment logic — the durable answer is custom apps and Shopify Functions. A discount or cart-transform Function runs on Shopify’s servers and re-validates the wholesale price at checkout, so the price a logged-in buyer sees is the price charged. No JavaScript painting, nothing to game.
Fits when: your pricing is genuinely custom, must be bulletproof at checkout, and you want to avoid a stack of overlapping apps. Works on standard Shopify plans as well as Plus.
Breaks down when: the requirement is really just “standard B2B” — in which case a price-list app or Plus B2B gets you there faster.
4. Shopify Plus B2B (companies + catalogs)
On Shopify Plus, B2B is native. You create companies with multiple buyers and locations, assign catalogs with their own product selection and price lists (percentage off or fixed per-product prices), set payment terms and per-customer checkout rules — all enforced natively at checkout, no app required. Wholesale buyers log in and see their catalog and pricing; retail is untouched.
Fits when: you’re on (or ready for) Plus, have structured B2B relationships with companies and multiple buyers, and want native, checkout-enforced pricing without third-party apps. If you’re weighing the upgrade, see is Shopify Plus worth it?.
Breaks down when: you’re not on Plus and the volume doesn’t justify the jump — the earlier rungs cover you first.
Capability comparison
| Approach | Custom prices | Access control | MOQs | Checkout-enforced | Plan | Best for |
|---|---|---|---|---|---|---|
| Tags + discounts + quantity breaks | Flat % / volume tiers | Via tags + hidden collection | Limited | Depends on method | Any | A few accounts, simple pricing |
| Wholesale / B2B app + price lists | Per-customer / per-group | Built-in registration/login | Yes | App-dependent — verify | Any | Dozens–hundreds of accounts |
| Custom logic / Shopify Functions | Fully custom | You define it | Yes, custom rules | Yes, server-side | Any | Bespoke rules, must be bulletproof |
| Shopify Plus B2B | Company / catalog price lists | Native (companies + login) | Yes | Yes, native | Plus | Structured B2B at scale |
Two honest notes: on standard Shopify, “customer-specific pricing” is always an approximation layered on discounts, tags or an app — there’s no native per-customer price field. And native B2B companies and catalogs are a Plus-only feature; below Plus you’re combining the first three rungs.
The enforcement and access-control trap
This is where DIY wholesale setups leak money. Two failure modes:
Displayed but not enforced. A theme snippet checks the customer tag and rewrites the price on the product page. It looks right — but the cart and checkout still use the real product price, or a discount that can be removed. Wholesale buyers get charged retail, or a shared code escapes to retail shoppers. The fix: price must be validated server-side at checkout, via a Shopify Function, draft order, or native B2B — never painted on with JavaScript alone.
Wholesale pricing that leaks to retail. If your “wholesale” collection or price list isn’t gated behind an approved, logged-in account, retail shoppers can find your trade prices — through search, a shared link, or by removing the tag check client-side. Access control has to be enforced at the data layer, not hidden with CSS.
Get these two right and everything else is merchandising. Get them wrong and you either overcharge partners or undercharge the public.
How to decide
- A few wholesale accounts, simple flat or volume pricing → tags + automatic discounts + quantity breaks. Cheapest, ships today.
- Dozens to hundreds of accounts, per-customer or per-tier price lists, not on Plus → a dedicated wholesale/B2B app — and check its checkout enforcement before you commit.
- Bespoke pricing rules that must be bulletproof at checkout → custom logic with Shopify Functions, on any plan.
- Structured B2B with companies and buyers, on or ready for Plus → native Plus B2B with catalogs and price lists.
Not sure which rung you’re on? A quick profit audit maps your customer count and pricing rules to the cheapest option that still enforces price at checkout.
Common mistakes
- Opening a second store by default. Almost always more cost and maintenance than a gated one-store setup.
- Trusting JavaScript-only wholesale pricing. If it’s not enforced server-side, it’s a display trick, not a price.
- Leaking wholesale prices to retail. Ungated collections and client-side tag checks expose your trade pricing.
- Over-buying Plus too early. If tags or an app cover you, Plus B2B is a later step, not the first one.
- Ignoring MOQs. Wholesale without minimums invites tiny, unprofitable orders — enforce them in the cart.
Wholesale on Shopify isn’t one feature you flip on; it’s a ladder you climb only as far as your complexity demands. Start at the cheapest rung that still enforces price at checkout and keeps trade pricing away from retail.
Adding wholesale to your Shopify store? Tell us your customer count and pricing rules — we’ll tell you whether tags, an app, custom logic or Plus B2B is the right fit, and how to keep pricing enforced at checkout. See B2B & wholesale or get a free profit audit.