Option one: native Shopify B2B on your existing store
Shopify's native B2B is built around company profiles and catalogs. A company gets locations, buyers with permissions, net payment terms, vaulted cards and a PO number field at checkout. Catalogs are the pricing engine: each one is a price list plus publishing rules, so your NetSuite "Wholesale AU" price level becomes a catalog, "Distributor" becomes another, and a buyer only ever sees the catalog assigned to them. Quantity rules - minimums, increments, carton multiples - and volume price breaks sit on top.
The critical security property: trade prices in a catalog are only rendered for an authenticated buyer attached to a company. They do not exist in the public storefront, the product JSON, or anything a crawler can reach. This is the structural fix for price leakage, not a workaround.
What changed in April 2026 is that company profiles, quantity rules, volume pricing, net terms and PO numbers now work on Basic, Grow and Advanced plans - with a hard ceiling of three active B2B catalogs across all your B2B markets. Plus removes the ceiling and adds the features serious wholesale operations end up needing: unlimited catalogs, catalogs assigned directly to a specific company or location (true customer-level pricing), deposits and partial payments, and checkout customisation for B2B flows.
Three catalogs sounds workable until you map a real ERP against it. On a recent build for a first-aid brand with hundreds of stockists, the NetSuite pricing profiles alone - retail chains, pharmacy groups, distributors, government and a legacy tier nobody would admit to creating - blew past three before we touched export pricing. That store needed Plus, and the direct company catalogs meant each NetSuite price level mapped one-to-one to a Shopify catalog, synced on a schedule, with no manual reconciliation. See the Fast Aid case study for how that played out. If your ERP has four or more price levels, budget for Plus from day one rather than discovering the ceiling mid-project.
Option two: tag-gated customer accounts
The old pattern: tag wholesale customers, then use Liquid conditionals or an app to show different prices and hide retail elements. Sometimes paired with automatic discounts that knock a percentage off for tagged customers.
It is cheap and it works on any plan, which is why so many stores run it. But understand what you are buying. The price shown is usually the retail price with a discount applied at cart or checkout, so line-item pricing on invoices looks wrong to trade buyers. Liquid gating is presentation-layer only - the underlying product data is still public, and hidden wholesale collections and variants have a habit of surfacing in site search, sitemap crawls and JSON endpoints. Percentage-off logic cannot express real price lists, where item A is 40 per cent off retail and item B is 15 per cent because its margin is thin. And there are no net terms, no company structure, no PO field without further apps.
Tag-gating wins in exactly one scenario: a small wholesale side-channel, one flat trade discount, a handful of trusted accounts, and no ERP. The moment you have per-SKU trade pricing or more than a couple of dozen stockists, you have outgrown it.
Option three: a separate wholesale store
Before native B2B matured, the standard Plus answer was an expansion store: a second Shopify store on a trade subdomain, fully gated behind login, with its own pricing. Plenty of these are still running well.
The trade-offs are operational. Two stores means two themes, two app stacks, duplicated product data and a sync problem you own forever. Inventory either splits or syncs, and both options create edge cases. But separation has genuine upsides: the wholesale experience can be completely different (pallet quantities, freight quoting, no retail merchandising), nothing trade-related can ever leak into the retail store because it literally is not there, and a distributor in another region can get its own currency and catalogue without contorting your main store's Markets setup. Shopify's own guidance now frames this as blended versus dedicated, and dedicated still wins when the two businesses barely share an audience - or when a large retail team and a large wholesale team need to work without treading on each other.
The connective tissue: applications, portals, stockists
Whichever architecture you pick, the surrounding workflow is where wholesale portals succeed or fail.
Application and approval: a trade application form feeds a review step - ABN check, minimum order agreement, territory - and on approval a company profile is created with the right catalog, payment terms and buyer permissions. Shopify Flow automates most of this natively; the approval itself should stay human.
The gated portal: trade buyers land in a logged-in experience with quick order lists, easy reorders from history, live account balances against net terms, and their PO number captured at checkout so their accounts payable process works without email ping-pong.
The retail side gets a stockist map. If you are protecting hundreds of retail partners, a store locator is not decoration - it is part of the deal you have with stockists, and it converts retail buyers who want the product today.
Choosing
Run one store with native B2B if your wholesale and retail catalogues substantially overlap and you want one source of truth - on a standard plan if three catalogs cover your pricing tiers, on Plus if your ERP says otherwise. Tag-gate only if wholesale is a genuinely minor channel. Go dedicated when the two businesses need to diverge in experience, region or team.
We have built all three, including the messy ERP-shaped versions with NetSuite price levels, hundreds of stockists and approval workflows attached. If you are weighing this up for your own brand, talk to Jaboo - we'll tell you which architecture fits before anyone writes a line of code.