There are two ways to answer "who is allowed to see this catalog" on Shopify. You either label the customer and check the label, or you model the buyer as a company and publish a catalog to it. Both are legitimate. Which one is right depends less on your ambitions and more on your plan and your buyer structure.
What native B2B actually gives you
Shopify's B2B feature set, available on Plus, introduces objects that do not exist elsewhere in the platform:
- Companies, each with one or more locations.
- Company contacts: customers attached to a company, with permissions per location.
- Catalogs, which combine a product selection with a price list and are published to specific companies or locations.
- Payment terms (net 30 and similar), purchase orders, and draft-order style checkout behaviour.
- Per-location tax exemptions and payment methods.
This is proper B2B modelling and it is enforced server-side: a product outside a buyer's catalog is not purchasable by that buyer, full stop. If you are on Plus and you sell to organisations where three people from the same buying office order to two warehouses on different terms, use this. Nothing built on tags will represent that as cleanly.
What tags actually give you
A tag is a string on a customer record. Every plan has them, the API writes them instantly, and Shopify Flow, segments and most apps can read them. Gating on tags means: this collection is visible to customers carrying wholesale; this page is visible to customers carrying vip.
The underrated property is composability. One tag can drive several unrelated systems at once: a lock app hides the catalog, a volume-pricing app applies the tier, an email tool segments the newsletter, and Flow sends an internal alert on the first order. None of those systems needs to know about the others. Company membership is far less portable; most apps have no concept of it.
Side by side
| Customer tags | Native B2B companies | |
|---|---|---|
| Plan required | Any plan, including Basic | Shopify Plus only |
| Hierarchy support | Flat. One customer, one set of labels | Company → locations → contacts, with per-contact permissions |
| Per-location pricing | No. Price tiers are per tag, via a pricing app | Yes, price lists per catalog per location |
| App interoperability | High. Almost every app reads tags | Low. Few apps understand companies |
| Setup time | Minutes. Tag a customer and write a rule | Days. Data modelling, catalogs, onboarding buyers |
| Payment terms and POs | Not supported | Built in |
| Who it fits | Trade catalogs, VIP tiers, gated pages, mixed retail and wholesale | Distributors and manufacturers with real account structures |
The honest decision
Answer three questions.
- 1Are you on Plus? If no, use tags. There is no decision to make.
- 2Do multiple people from the same buyer place orders, to different locations, on different terms? If yes, use companies.
- 3Is your requirement mostly "these people see this, those people do not"? If yes, use tags even on Plus, because companies are a heavier tool than that problem needs.
The most common mistake is a Plus merchant with two hundred small independent retailers building out companies for all of them. Each retailer is one person ordering to one address. That is a tag with extra steps and a much slower onboarding process.
They can coexist
This is not exclusive. A company contact is still a Shopify customer record, so it can still carry tags. A useful hybrid, once you have both, looks like this:
- Companies and catalogs handle pricing, terms and purchasing for your top accounts.
- Tags handle visibility rules that cut across the company model: early access to a drop, an end-of-line clearance page, a locked press kit.
- A single validation function enforces the tag rules; native catalogs enforce themselves.
Migrating from tags to companies later
Starting with tags does not paint you into a corner. When you upgrade to Plus and want the company model, the tag is the migration plan: it already identifies exactly which customers are trade accounts.
- 1Export customers carrying your access tag, with their company name metafield.
- 2Create companies and locations from that export, one per business.
- 3Attach each customer as a company contact with ordering permission.
- 4Build catalogs and price lists, and publish them to the companies.
- 5Keep the tag in place through the transition, so nothing loses access mid-migration.
- 6Retire the tag-based locks only once every buyer is inside a catalog.
The step people skip is the fifth one. Removing tag rules the moment catalogs go live guarantees a support week, because there will be buyers you missed. Run both for a month.
Prime Lock works on the tag side of this line, on any plan, and stays out of the way if you are on Plus and using catalogs for pricing.