Home>Migrations & Replatforming>Data & Customer Migration>Per-Account SKU Visibility in Shopify B2B Catalogs

Does customer-specific product visibility (certain SKUs only shown to certain B2B accounts) migrate correctly to Shopify B2B's catalog-assignment model?

Per-account SKU visibility migrates as a binary, and the legacy models it comes from are three-state. SuiteCommerce Personalized Catalog Views offer Display Fully, Disable Purchase, and Disable Purchase and Hide Price (Oracle NetSuite docs, September 2026). Shopify catalogs offer in or out. A visible product the buyer cannot purchase has no native catalog equivalent.

What Shopify's model actually is

Catalogs "let you customize the buying experience for the companies that you sell to. With catalogs, you can control the availability of products for your B2B customers" (per Shopify Help Center, September 2026). You include all products or select specific ones, and you can exclude individually. A product not in a company location's catalogs is not available to that location.

That is a two-state model: in, or out. It is clean, it is the right default, and it does not express the middle states that legacy B2B platforms use heavily.

The three-state model you are probably coming from

SuiteCommerce's Personalized Catalog Views assign a customer segment one of three website visibility levels against an item collection (per Oracle NetSuite documentation, September 2026):

PCV levelBehaviourShopify catalog equivalent
Display FullyView and purchaseProduct in the catalog
Disable PurchaseVisible, no Add to CartNone
Disable Purchase and Hide PriceVisible, no price, no Add to CartNone

SuiteCommerce documents PCVs as "the recommended way of controlling access to and visibility of your inventory across difference audiences," with the ability to "pair down a large inventory so customers only see items handpicked for them" (per SuiteCommerce developer docs, September 2026). If your source store uses the middle two levels, those rules do not have a catalog to land in.

Why the middle state exists, and what to do with each reason

Before rebuilding it, find out why it is there. In wholesale it is usually one of four things, and three of them have better answers on Shopify than a rebuild.

  • "Ask for a quote" products. The buyer should see it and contact sales. Answer: keep it in the catalog and use a quote-request flow, or set the company location to submit orders as draft orders so every order is reviewed. Draft-order submission is a native B2B checkout setting.
  • Discontinued but still supported items. The buyer needs to see it exists. Answer: keep it visible to everyone, manage it with inventory and a product status, and stop treating it as a visibility rule.
  • Regulatory or licensing restrictions. Certain buyers may not purchase certain goods. Answer: this is the case where hiding entirely is usually correct anyway, and Shopify's binary is the safer model. A visible-but-unbuyable product invites a support call and a compliance argument.
  • Price confidentiality. Show the product, hide the price from unentitled accounts. Answer: this is the genuine gap. On Shopify the product is either in the catalog with its price or not present.

Second constraint: which plan renders the contextualized storefront

"Online store contextualization" is available on the Advanced and Plus plans (per Shopify Help Center, September 2026), and contextual checkout with Markets requires Advanced or higher. On non-Plus plans, catalogs attach through B2B markets rather than directly to company locations, which is the same constraint the parent page describes. Per-account visibility, specifically, is a Plus capability because per-account catalog assignment is.

A Basic or Grow store can do per-market visibility. It cannot do "only this account sees these 12 SKUs" natively.

Third constraint: the storefront still has to cooperate

Even with correct catalog assignment, theme code decides what a buyer sees in navigation, search and collection listings. Developer-community threads on hiding products absent from a company's catalog are a recurring theme, and the work lands in Liquid. Budget theme time for this; it is not configuration.

Migration order

  1. Export every visibility rule with its level, not just the item lists. The level is the thing that does not port.
  2. Sort by reason using the four categories above. Most rules will move to a different mechanism entirely.
  3. Convert Display Fully rules to catalog membership. These are direct.
  4. Decide each remaining rule individually. Hide it, expose it with draft-order review, or accept a theme customization.
  5. Verify with a real buyer account per segment, on the storefront, in search and in navigation, not in the admin.

When NOT to port the rules

  • When nobody can name why a SKU is hidden from an account. Visibility rules accumulate and are rarely retired. A migration is the audit.
  • When the rule is a pricing rule wearing a visibility costume. "They can't see it because they'd get the wrong price" is a catalog-pricing problem, and hiding the product is the workaround, not the requirement.
  • When it protects a price rather than a product. Shopify's catalog is the wrong tool, and building a visible-but-priceless product state is a theme project you should scope deliberately rather than inherit.

The Deploi point of view

Our own position, from building on Shopify. Separate from the facts above.

  • Our take: Audit the rules before you port them. The three-state to two-state collapse forces a decision on every rule in the middle band, and that is the useful part of this migration, not the painful part. Most of those rules turn out to be something else.
  • What we’ve seen: Hidden-SKU rules survive staff changes better than the reasons for them do. When we ask why a product is hidden from a named account, the answer is frequently that nobody currently employed knows. That is a finding worth surfacing to the client before it becomes a requirement.
  • Where we disagree: The standard answer is that Shopify catalogs handle per-account visibility, full stop. They handle the in-or-out case, on Plus, and only after the theme cooperates. A requirements document that records "catalog assignment" against a three-state source model has under-scoped the work and has not yet made the decisions that matter.
  • What this page adds: that the source model is three-state and the target is two-state, exactly which SuiteCommerce visibility levels have no Shopify equivalent, the four reasons the middle state exists and what replaces each, and that per-account visibility depends on Plus-only direct catalog assignment plus theme work.

Reviewed by Martin Dejnicki, Director of SEO & AI Search. Facts verified 2026-09-14.