The standard advice for selling trade and retail from one brand is to run two Shopify stores. It is solid advice and it is expensive: a second subscription, a second theme to maintain, a second inventory to keep in step, and a second URL to explain to buyers. For a lot of stores it is more machinery than the problem deserves.
Here is what the alternatives actually give you.
What Shopify gives you already
Shopify B2B is the real thing: company profiles, price lists per company, payment terms, draft orders, tax exemptions. If your trade business is genuinely a business, with purchase orders, net terms and buyers who log in, use it. Nothing below competes with it and this guide is not trying to.
It is also no longer the Plus-only feature it was. Shopify's own documentation now lists B2B as available on Basic, Grow, Advanced and Plus at no extra cost, with some of the more advanced controls still reserved for the higher plans. This guide said "on Plus" until August 2026 and was wrong to; if you dismissed B2B because you are not on Plus, go and look again before reading the rest of this.
Markets can vary prices by country, which is not what most people mean by wholesale, but is worth knowing before you buy an app to do something Shopify already does.
Customer tags are the free primitive everything else is built on. Tag a customer wholesale, condition your theme on the tag, done. This is where most stores start and quite a few finish.
What a tag-based build actually costs
It works. The costs show up over months rather than immediately.
The logic spreads. A price appears on the product page, the collection grid, search results, the cart drawer, related products, recently viewed, the quick view modal, and in the JSON most themes print for their own scripts. Each one needs the same condition. Miss one and a trade price is public.
Anyone can register. A customer account is not an approval. You still need a process for deciding who is a real trade buyer, and that process lives in your inbox.
Nothing collects demand. The retail customer who wanted trade pricing and found a "log in to see prices" link either emails you or leaves. Mostly they leave, and you never know they existed.
Tags are visible. Customer tags can be read on the storefront. Fine for merchandising; not a secret.
The gating approach
The other shape is to leave one storefront and one price, and gate who can buy instead of what they see.
For a trade catalogue that means: the products are browsable and indexed, prices and buy buttons are hidden on the trade range, and a visitor who wants access fills in a short form (company name, VAT number, whatever you need) that lands in your admin for approval. Approve them and they can see prices and check out. Everyone else browses and cannot.
What that buys you over tags:
- One place for the rule, instead of six templates.
- A request form, so interest from someone who is not yet a customer becomes a record instead of a bounce. This is the part stores underestimate. A trade buyer who lands on your site at 11pm is not going to compose an email.
- Approval as a workflow, not a memory. With auto-approve rules you can let through anything matching a pattern, an email domain or a supplied VAT number, and hand-check the rest.
- Tiers, if you need more than in-or-out. Distributor, stockist, sample account; different levels seeing different things. Inner Circle writes a customer tag per tier as well, so Shopify's own segments and discounts can act on it without knowing the app exists.
And the honest limitation, the same one that applies to every approach short of Shopify B2B: this hides prices and blocks purchases, it does not create a separate price list. If a trade buyer needs to see £4.20 where a retail customer sees £9.99, on the same variant, you want B2B or a second store. Gating answers "who may buy this", not "what does it cost them".
Where gating fits neatly is the very common case of a trade-only range: products retail customers should not be buying at all, as opposed to a trade discount on the retail range.
Draft orders, for the awkward middle
There is a middle path worth knowing about. Collect the interest, then quote.
A visitor asks for access to a trade product, you approve them, and the items they were interested in become a draft order you can price by hand and send as an invoice. No price list, no second store, and the negotiation stays a negotiation, which for a lot of trade relationships is what it actually is.
Inner Circle does this on the Starter plan and up. It is the least automated option here and, for a business doing ten trade orders a month, comfortably the most appropriate.
Choosing
- Real B2B buyers, purchase orders and terms → Shopify B2B, on whichever paid plan you are already on.
- A handful of trade customers you already know → tags and a theme edit. Do not buy anything.
- A trade-only range, and strangers who want access to it → gating, because the request-and-approve loop is the work and tags do not do it.
- Different prices for the same product, for different buyers → B2B or a second store. Nothing else honestly solves this.
If you are not sure which, count how many people asked you for trade pricing last month and how many of those you had to chase for details. That number is the one that decides it.